Como lidar com conexões 1M websocket (Nginx / HAProxy / Amazon / Google) [duplicado]

1

Qual configuração de nginx ou haproxy é sugerida para conexões de websocket simultâneas de 100K alvo? O que eu acho, um único nginx não será capaz de levar esse tráfego, bem como conexões simultâneas. Como o tráfego para o nginx / haproxy deve ser dividido (DNS lvl ou qualquer opção da Amazon / Google disponível)? Quantos websockets simultâneos um único nginx pode manipular?

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

    
por Ravi Kumar 28.09.2015 / 11:00

1 resposta

6

Existem pessoas que executam servidores de bate-papo por trás de balanceadores de carga haproxy em cargas ainda mais altas. A carga mais alta que foi relatada a mim em email privado (com a cópia da página de estatísticas) foi em torno de 300k conexões por processo (portanto, soquetes de 600k). Observe que, no Linux, por padrão, um processo é limitado a descritores de arquivos 1M (portanto, conexões de ponta a ponta de 500k), mas isso pode ser ajustado em / proc.

A coisa mais importante a considerar em tais cargas é a quantidade de RAM que você precisa. Os buffers de soquete do lado do kernel sempre exigirão pelo menos 4kB por direção por lado, portanto, um mínimo de 16kB por conexão de 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 executar sem esses buffers e apenas mantê-los alocados para as raras conexões com dados. Então, 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 em vários processos em máquinas SMP para reduzir a latência. Tenha em mente que, para simplesmente estabelecer conexões 1M, pode levar 10 segundos a 100k conns / s. Todas essas conexões induzem algum trabalho por alguns bytes cada, e lidar com conexões ativas de 1M induzirá definitivamente um trabalho importante e uma alta carga no sistema.

    
por 29.09.2015 / 08:17