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?
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:
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.
fonte