Rendimiento de WebSocket en NGINX

NGINX | 24 de junio de 2014

Recientemente hemos probado la escalabilidad de NGINX para equilibrar la carga de conexiones WebSocket . Incluso con 50.000 conexiones WebSocket activas, NGINX necesitó menos de 1 GB de memoria y menos de 1 núcleo de CPU. Además, al someterlo a conexiones con una actividad muy intensa, el uso de memoria se mantuvo estable y aumentó más lentamente que el tamaño de los mensajes. El rendimiento en su entorno dependerá de la naturaleza de su aplicación, pero los resultados de estas pruebas pueden ofrecerle una idea de la cantidad de recursos que puede esperar que utilice NGINX.

Entorno de pruebas

Para estas pruebas se utilizaron los siguientes equipos:

  • Generador de carga – thor en un Xeon EX5645 de 6 núcleos a 2,40 GHz, 48 GB de RAM
  • NGINX – Versión 1.7.0, x86_64 con 6 procesos de trabajo en un Xeon E5645 de 6 núcleos a 2,40 GHz, 48 GB de RAM
  • Backend de WebSocket – servidor de eco Node.js en un Xeon E5-2660 0 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 mayormente inactivas. El número de conexiones varió entre 1.000 y 50.000, el tamaño de los mensajes entre 10 y 4096 bytes, y el intervalo entre mensajes entre 0,1 y 10 segundos (una frecuencia que consideramos baja).

Los resultados muestran que la memoria total necesaria para las conexiones WebSocket depende del número de conexiones y que la memoria utilizada por conexión se mantiene constante. El uso de memoria no se ve afectado por el tamaño ni por la frecuencia de los mensajes. El uso de la CPU sigue, en líneas generales, la evolución del número de conexiones y, ni siquiera con 50.000 conexiones, llegó a utilizar un núcleo completo. El uso de la CPU que se muestra aquí se ha normalizado respecto a un único núcleo sumando el uso de la CPU de todos los núcleos. Los siguientes gráficos muestran los resultados de este conjunto de pruebas:

conn1


cpu1


mem1


memk1

El segundo conjunto de pruebas simuló conexiones de corta duración, pero con una actividad muy intensa. 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 de los mensajes osciló entre 1 y 4096 bytes.

Los resultados muestran que, con un número fijo de conexiones simultáneas, el uso total de memoria depende del tamaño de los mensajes, al igual que la memoria utilizada por conexión. Sin embargo, en ambos casos, la cantidad de memoria varía poco y lo hace de forma sublineal, con un aumento inferior al 15 %.

tamaño2


cpu2


mem2


memk2

Resumen

Durante estas pruebas, NGINX ofreció un rendimiento predecible y escalable al actuar como proxy de servidores WebSocket. Se trataba de pruebas sintéticas que no eran necesariamente representativas de una aplicación real, por lo que los resultados de las pruebas realizadas en otros sistemas pueden variar. Para obtener más información, consulte:


Compartir

Sobre el autor

Rick Nelson
Rick NelsonVicepresidente regional de Ingeniería de Soluciones

Más artículos de Rick Nelson

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.