nodejs - ¿Cuántos recursos del sistema se mantendrán para mantener abierto 1,000,000 de websocket?
websockets (2)
En los sistemas actuales, manejar 1 millón de conexiones TCP simultáneas no es un problema.
Puedo afirmar eso en base a nuestras propias pruebas (divulgación completa: soy el CTO de Lightstreamer).
Tuvimos que demostrar varias veces, a algunos de nuestros clientes, que se puede llegar a 1 millón de conexiones en una sola caja (y no necesariamente una máquina súper monstruo). Pero permítanme recapitular la configuración en la que probamos 500K conexiones simultáneas, ya que esta es una prueba mucho más reciente realizada en Amazon EC2.
Instalamos Lightstreamer Server (que es un servidor WebSocket, entre otras cosas) en una instancia m2.4xlarge. Esto significa 8 núcleos y 68.4 memoria GiB.
Lanzamos 11 máquinas cliente para crear 500,000 conexiones simultáneas al servidor Lightstreamer. La prueba se configuró para que el rendimiento total de salida del servidor fuera de 90,000 actualizaciones / s, lo que resulta en picos de ancho de banda de salida de 450 Mbit / s.
El servidor nunca utilizó más de 13 GiB de RAM y la CPU se mantuvo estable en torno al 60%.
Con al menos 30 GiB de RAM, puede manejar 1 millón de sockets simultáneos. La CPU necesaria depende del rendimiento de datos que necesita.
Websocket es bueno, pero ¿podría manejar 1,000,000 conexiones concurrentes?
¿Cuántos recursos del sistema se mantendrán para mantener abierto 1,000,000 de websocket?
Respuesta actualizada
Respuesta corta : sí, pero es caro.
Larga respuesta :
Esta pregunta no es exclusiva de WebSockets, ya que WebSockets son fundamentalmente zócalos TCP de larga vida útil con un protocolo de enlace tipo HTTP y marcos mínimos para los mensajes.
La verdadera pregunta es: ¿podría un solo servidor manejar 1,000,000 de conexiones de socket simultáneas y qué recursos de servidor consumiría? La respuesta se complica por varios factores, pero son posibles 1.000.000 de conexiones de socket activas simultáneas para un sistema de tamaño adecuado (gran cantidad de CPU, RAM y redes rápidas) y con un sistema de servidor sintonizado y un software de servidor optimizado.
El número de conexiones no es el problema principal (que es principalmente una cuestión de ajuste del kernel y memoria suficiente), es el procesamiento y envío / recepción de datos a / desde cada una de esas conexiones. Si las conexiones entrantes se extienden durante un período prolongado, y están en su mayoría inactivas o con poca frecuencia enviando pequeños fragmentos de datos estáticos, entonces probablemente podría obtener conexiones mucho más altas que incluso 1.000.000 simultáneas. Sin embargo, incluso en esas condiciones (conexiones lentas que en su mayoría están inactivas), todavía tendrá problemas con las redes, los sistemas de servidor y las bibliotecas de servidor que no están configurados y diseñados para manejar grandes cantidades de conexiones.
Vea la respuesta de Alessandro Alinone sobre el uso aproximado de recursos para 500,000 conexiones.
Aquí hay algunos recursos más antiguos pero aún aplicables para leer sobre cómo configurar su servidor y escribir su software de servidor para admitir un gran número de conexiones: