Eu tenho um aplicativo pubsub (principalmente chat, mas algumas outras coisas sendo publicadas e sub-editadas também) rodando em node & socket.io.
Estou carregando o teste deste aplicativo girando algumas outras caixas grandes e grandes e executando um aplicativo de nó que eu escrevi para esse propósito que gera uma tonelada de processos que se conectam usando o pacote socket.io-client.
descobri que posso obter cerca de 1k de conexões simultâneas para uma única caixa de nuvem de 1gig rackspace. Precisamos suportar entre 10k e 100k conexões simultâneas (para eventos específicos, não o tempo todo), embora eu coloquei um balanceador de carga na frente e percebi que antes de um grande evento eu giraria mais máquinas. mas eu coloquei uma caixa haproxy na frente e descobri que com 2 servidores e 2k usuários eu sou de ouro, mas com 4 servidores até 3k usuários é uma luta!
Eu notei que quando meus testes de carga começam causando muitas desconexões, os servidores de nós estão experimentando um uso de CPU muito alto (nos 90%), o que acho estranho porque quando 2 servidores e 2k usuários acabam com um máximo de 70% que diminui rapidamente.
aqui estão algumas linhas relevantes da minha configuração haproxy:
mode http
timeout client 86400000
timeout server 86400000
timeout connect 5000
maxconn 100000
Eu também coloquei alguns ajustes do kernel no /etc/sysctl.conf nas minhas caixas haproxy e node:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 50000
net.core.netdev_max_backlog = 50000
net.ipv4.tcp_rmem = 8192 87380 8388608
net.ipv4.tcp_wmem = 8192 87380 8388608
e ambas as caixas haproxy e node
%código%
em seus scripts de inicialização relevantes (antes de iniciar o haproxy ou o nó)
a caixa haproxy é consistentemente de uso de cpu com um único dígito (ou menos).
como devem ser meus próximos passos? alguma coisa aqui se destaca como um problema?