Como lidar com conexões de websocket de 1 milhão (Nginx/HAProxy/Amazon/Google)

Como lidar com conexões de websocket de 1 milhão (Nginx/HAProxy/Amazon/Google)

O quenginxouhaproxya configuração é sugerida para o destino100 milconexões websocket simultâneas? O que eu acho é que um único nginx não será capaz de receber esse tráfego tão bem quanto conexões simultâneas. Como o tráfego para nginx/haproxy deve ser dividido (DNS lvl ou qualquer opção Amazon/Google disponível)? Quantos websockets simultâneos um único nginx pode suportar?

Tentei coletar informações relevantes da pesquisa do Google e de postagens do SO.

Responder1

Existem pessoas executando servidores de chat atrás de balanceadores de carga haproxy com cargas ainda maiores. A carga mais alta que me foi relatada em e-mail privado (com a cópia da página de estatísticas) foi de cerca de 300 mil conexões por processo (portanto, 600 mil soquetes). Observe que no Linux, por padrão, um processo é limitado a 1 milhão de descritores de arquivo (portanto, 500 mil conexões ponta a ponta), mas isso pode ser ajustado em /proc.

A coisa mais importante a considerar nessas cargas é a quantidade de RAM necessária. Os buffers de soquete do lado do kernel sempre exigirão pelo menos 4kB por direção por lado, portanto, no mínimo 16kB por conexão ponta a ponta. HAProxy 1.5 e inferior terão dois buffers por conexão (por exemplo: buffers de 4kB são suficientes para websocket). 1.6 pode ser executado sem esses buffers e mantê-los alocados apenas para raras conexões com dados. Portanto, pelo menos são 16 GB de RAM por milhão de conexão, ou cerca de 24 GB com versões mais antigas. Pode valer a pena espalhar isso por vários processos em máquinas SMP para reduzir a latência. Tenha em mente que para simplesmente estabelecer conexões de 1 milhão, pode levar 10 segundos a 100 mil conexões/s. Todas essas conexões induzem algum trabalho de alguns bytes cada, e lidar com 1M de conexões ativas certamente induzirá um trabalho importante e uma alta carga no sistema.

informação relacionada