Asumí incorrectamente que mi prueba AB interna significa que mi servidor puede manejar 1k concurrencia @ 3k visitas por segundo.
Mi teoría en este momento es que la red es el cuello de botella. El servidor no puede enviar suficientes datos lo suficientemente rápido.
Las pruebas externas de blitz.io con una concurrencia de 1k muestran que mis hits / s tienen un límite de 180, y las páginas tardan más y más en responder, ya que el servidor solo puede devolver 180 por segundo.

He servido un archivo en blanco de nginx y lo he guardado: escala 1: 1 con concurrencia.

Ahora para descartar cuellos de botella de IO / memcached (nginx normalmente se extrae de memcached), presento una versión estática de la página en caché del sistema de archivos.

Los resultados son muy similares a mi prueba original; Tengo un límite de alrededor de 180 RPS.
Dividir la página HTML por la mitad me da el doble de RPS, por lo que definitivamente está limitado por el tamaño de la página.

Si internamente ApacheBench desde el servidor local, obtengo resultados consistentes de alrededor de 4k RPS tanto en la página completa como en la media página, a altas tasas de transferencia. Velocidad de transferencia: 62586.14 [Kbytes / seg] recibidos
Si AB de un servidor externo, obtengo alrededor de 180RPS, lo mismo que los resultados de blitz.io.
¿Cómo sé que no es un estrangulamiento intencional?
Si comparo con varios servidores externos, todos los resultados se vuelven pobres, lo que me lleva a creer que el problema está en el tráfico saliente de MIS servidores, no en un problema de velocidad de descarga con mis servidores de evaluación comparativa / blitz.io.
Así que vuelvo a la conclusión de que mi servidor no puede enviar datos lo suficientemente rápido.
Estoy en lo cierto? ¿Hay otras formas de interpretar estos datos? ¿La solución / optimización es configurar múltiples servidores + balanceo de carga que pueden servir 180 golpes por segundo?
Soy bastante nuevo en la optimización del servidor, así que agradecería cualquier confirmación que interprete estos datos.
Tráfico saliente
Aquí hay más información sobre el ancho de banda saliente: el gráfico de red muestra una salida máxima de 16 Mb / s: 16 megabits por segundo. No parece mucho en absoluto.
Debido a una sugerencia sobre el estrangulamiento, investigué esto y descubrí que linode tiene un límite de 50mbps (que aparentemente ni siquiera estoy cerca de golpear). Lo hice subir a 100mbps.
Dado que linode limita mi tráfico, y ni siquiera lo estoy alcanzando, ¿significa esto que mi servidor debería ser capaz de generar hasta 100 Mbps pero está limitado por algún otro cuello de botella interno? Simplemente no entiendo cómo funcionan las redes a esta gran escala; ¿Pueden literalmente enviar datos tan rápido como pueden leer desde el HDD? ¿La tubería de red es tan grande?

En conclusión
1: Basado en lo anterior, creo que definitivamente puedo aumentar mi 180RPS agregando un equilibrador de carga nginx en la parte superior de una configuración de servidor multi nginx a exactamente 180RPS por servidor detrás del LB.
2: Si linode tiene un límite de 50 / 100mbit que no estoy alcanzando en absoluto, debe haber algo que pueda hacer para alcanzar ese límite con la configuración de mi único servidor. Si puedo leer / transmitir datos lo suficientemente rápido localmente, y Linode incluso se molesta en tener un límite de 50mbit / 100mbit, debe haber un cuello de botella interno que no me permite alcanzar esos límites que no estoy seguro de cómo detectar. ¿Correcto?
Me doy cuenta de que la pregunta es enorme y vaga ahora, pero no estoy seguro de cómo condensarla. Cualquier contribución es apreciada en cualquier conclusión que haya hecho.


