Cómo manejar conexiones websocket de 1M (Nginx/HAProxy/Amazon/Google)

Cómo manejar conexiones websocket de 1M (Nginx/HAProxy/Amazon/Google)

QuénginxohaproxySe sugiere configuración para el objetivo.100K¿Conexiones websocket simultáneas? Lo que creo es que un solo nginx no podrá aceptar ese tráfico ni las conexiones simultáneas. ¿Cómo se debe dividir el tráfico hacia nginx/haproxy (nivel DNS o cualquier opción disponible de Amazon/Google)? ¿Cuántos websockets concurrentes puede manejar un solo nginx?

Intenté recopilar información relevante de la búsqueda de Google y de las publicaciones de SO.

Respuesta1

Hay personas que ejecutan servidores de chat detrás de balanceadores de carga haproxy con cargas aún mayores. La carga más alta que me informaron en un correo electrónico privado (con la copia de la página de estadísticas) fue de alrededor de 300.000 conexiones por proceso (por lo tanto, 600.000 sockets). Tenga en cuenta que en Linux, de forma predeterminada, un proceso está limitado a 1 millón de descriptores de archivos (por lo tanto, 500.000 conexiones de extremo a extremo), pero eso se puede modificar en /proc.

Lo más importante a considerar con tales cargas es la cantidad de RAM que necesita. Los buffers de socket del lado del kernel siempre requerirán al menos 4 kB por dirección por lado, por lo tanto, un mínimo de 16 kB por conexión de extremo a extremo. HAProxy 1.5 y versiones anteriores tendrán dos buffers por conexión (por ejemplo: buffers de 4kB son suficientes para websocket). 1.6 puede ejecutarse sin esos buffers y solo mantenerlos asignados para las raras conexiones con datos. Entonces, al menos son 16 GB de RAM por cada millón de conexiones, o alrededor de 24 GB con versiones anteriores. Puede que valga la pena distribuir esto entre múltiples procesos en máquinas SMP para reducir la latencia. Tenga en cuenta que para establecer simplemente conexiones de 1 M, puede llevar 10 segundos a 100 k conexiones/s. Todas estas conexiones inducen algo de trabajo durante unos pocos bytes cada una, y lidiar con 1 M de conexiones activas definitivamente inducirá un trabajo importante y una gran carga en el sistema.

información relacionada