alto tráfego websocket / haproxy tuning

2

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?

    
por hackerhasid 18.06.2013 / 19:53

1 resposta

0

Ative o registro HTTP do HAProxy, se ainda não o fez, e veja se você pode encontrar a causa das desconexões no syslog do servidor. O formato de registro HTTP do HAProxy inclui termination_state para solicitações que devem ajudá-lo a direcionar você para a direita direção.

    
por 20.06.2013 / 12:59