Quantos recursos do sistema serão mantidos para manter 1.000.000 de websocket abertos? [fechadas]

122

O Websocket é bom, mas seria capaz de lidar com 1.000.000 de conexões simultâneas?
Quantos recursos do sistema serão mantidos para manter 1.000.000 de websocket abertos?

kk lou
fonte

Respostas:

65

Resposta atualizada

Resposta curta : sim, mas é caro.

Resposta longa :

Essa pergunta não é exclusiva do WebSockets, pois os soquetes TCP são fundamentalmente de vida longa, com um handshake do tipo HTTP e um enquadramento mínimo para as mensagens.

A verdadeira questão é: um único servidor poderia lidar com 1.000.000 de conexões de soquete simultâneas e que recursos de servidor isso consumiria? A resposta é complicada por vários fatores, mas 1.000.000 de conexões de soquete ativo simultâneas são possíveis para um sistema de tamanho adequado (muita CPU, RAM e rede rápida) e com um sistema de servidor ajustado e software de servidor otimizado.

O número de conexões não é o principal problema (isso é apenas uma questão de ajuste do kernel e memória suficiente), é o processamento e o envio / recebimento de dados de / para cada uma dessas conexões. Se as conexões de entrada se espalharem por um longo período e, na maioria das vezes, estiverem ociosas ou não estiverem enviando pequenos pedaços de dados estáticos, é provável que você obtenha muito mais do que 1.000.000 de conexões simultâneas. No entanto, mesmo nessas condições (conexões lentas que geralmente estão ociosas), você ainda terá problemas com redes, sistemas de servidores e bibliotecas de servidores que não estão configurados e projetados para lidar com um grande número de conexões.

Veja a resposta de Alessandro Alinone sobre o uso aproximado de recursos para 500.000 conexões.

Aqui estão alguns recursos mais antigos, mas aplicáveis, para ler sobre como você configuraria o servidor e gravaria o software para suportar um grande número de conexões:

kanaka
fonte
1
Aparentemente, 12 milhões de conexões de soquete são possíveis em uma única JVM. Veja como eles fizeram isso mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts
@JacquesKoorts thx
BG BRUNO
159

Nos sistemas atuais, lidar com 1 milhão de conexões TCP simultâneas não é um problema.

Posso afirmar que com base em nossos próprios testes (divulgação completa: sou o CTO da Lightstreamer).

Tivemos que demonstrar várias vezes, para alguns de nossos clientes, que 1 milhão de conexões podem ser alcançadas em uma única caixa (e não necessariamente em uma máquina de super monstros). Mas deixe-me recapitular a configuração em que testamos conexões simultâneas de 500K, pois esse é um teste muito mais recente realizado no Amazon EC2.

Instalamos o Lightstreamer Server (que é um servidor WebSocket, entre outras coisas) em uma instância m2.4xlarge. Isso significa 8 núcleos e 68,4 GiB de memória.

Lançamos 11 máquinas clientes para criar 500.000 conexões simultâneas com o servidor Lightstreamer. O teste foi configurado para que a taxa de transferência total de saída do servidor fosse 90.000 atualizações / s, resultando em picos de 450 Mbit / s de largura de banda de saída.

O servidor nunca usou mais de 13 GiB de RAM e a CPU ficou estável em torno de 60%.

Com pelo menos 30 GiB de RAM, você pode lidar com 1 milhão de soquetes simultâneos. A CPU necessária depende da taxa de transferência de dados necessária.

Alessandro Alinone
fonte
7
Estou assumindo que este foi algum sabor de linux. Você poderia compartilhar informações adicionais sobre como o kernel foi ajustado? descritores máximos de arquivo / tamanhos de janelas tcp etc?
quixver
14
Foi baunilha Amazon Linux. O número máximo de descritores de arquivo foi aumentado. O buffer de envio do TCP foi reduzido para 1600 bytes (feito por padrão pelo Lightstreamer, embora possa ser ajustado manualmente). MSS era o padrão.
Alessandro Alinone 23/06
Este software é totalmente gratuito ou precisa de alguma taxa para usá-lo?
Avtandil Kavrelishvili
@AvtandilKavrelishvili: Há uma edição gratuita e uma edição paga.
Alessandro Alinone 7/02
Seria mais fácil no servidor se, em vez de websockets, eu usasse pesquisas regulares?
MFeinstein