BLOG | NGINX

Rendimiento de WebSockets de NGINX

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Rick Nelson
Rick Nelson
Publicado el 24 de junio de 2014

Recientemente probamos la escalabilidad de NGINX para equilibrar la carga de conexiones WebSocket . Incluso con 50.000 conexiones WebSocket activas, NGINX requirió menos de 1 Gb de memoria y menos de 1 núcleo de capacidad de CPU, y cuando se cargó con conexiones muy ocupadas, el uso de memoria fue estable y aumentó más lentamente que el tamaño del mensaje. El rendimiento en su entorno dependerá de la naturaleza de su aplicação, pero los resultados de estas pruebas pueden proporcionar alguna indicación de la cantidad de recursos que puede esperar que utilice NGINX.

Entorno de prueba

Para esta prueba se utilizaron las siguientes máquinas:

  • Generador de carga: Thor en un procesador Xeon EX5645 de 6 núcleos a 2,40 GHz y 48 GB de RAM
  • NGINX – Versión 1.7.0, x86_64 con 6 trabajadores en un Xeon E5645 de 6 núcleos a 2,40 GHz, 48 GB de RAM
  • Backend WebSocket: servidor de eco Node.js en un Xeon E5-2660 de 4 núcleos a 2,20 GHz, 8 GB de RAM

Pruebas

Realizamos dos series de pruebas.

El primer conjunto de pruebas simuló conexiones de larga duración y mayoritariamente inactivas. El número de conexiones varió de 1.000 a 50.000, el tamaño de los mensajes de 10 a 4.096 bytes y la frecuencia de los mensajes de 0,1 a 10 segundos (lo que consideramos bajo).

Los resultados muestran que la memoria total necesaria para las conexiones WebSocket depende de la cantidad de conexiones y que la memoria utilizada por conexión es consistente. La utilización de la memoria no se ve afectada por el tamaño ni la frecuencia de los mensajes. La utilización de la CPU básicamente tiende según el número de conexiones e incluso con 50.000 conexiones no se utilizó un núcleo de CPU completo. La utilización de la CPU representada aquí se normaliza para un solo núcleo sumando la utilización de la CPU en todos los núcleos. Los siguientes gráficos muestran los resultados de este conjunto de pruebas:

conexión1


CPU1


miembro1


memoria1

El segundo conjunto de pruebas simuló conexiones de corta duración pero muy activas. El número de conexiones simultáneas se mantuvo constante en 500, con 50 mensajes por conexión y sin demora entre mensajes. El tamaño del mensaje varió entre 1 y 4096 bytes

Los resultados muestran que con un número fijo de conexiones simultáneas, la utilización total de memoria es un factor del tamaño del mensaje, al igual que la memoria utilizada por conexión, pero en ambos casos la cantidad de memoria no varía mucho y varía de manera sublineal, aumentando en menos del 15%.

tamaño2


CPU2


miembro2


memoria2

resumen

Durante estas pruebas, NGINX entregó un rendimiento predecible y escalable al actuar como proxy de servidores WebSocket. Estas fueron pruebas sintéticas y no necesariamente representativas de una aplicação del mundo real, por lo que los resultados de las pruebas realizadas en otros sistemas pueden diferir. Para obtener más información, consulte:


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.