Escala HAProxy para mais de 64k websockets

8

Estamos tentando projetar uma arquitetura que consiga lidar com mais de 64k websockets.

Primeiro, tentamos com o Amazon ELB, mas seu design não permite picos inesperados de tráfego nem websocket. (Tempo de espera do modo TCP os websockets inesperadamente)

Com o HAProxy, esses limites não se aplicam, mas ficaremos limitados a ~ 64k websockets mantidos entre o HA e os servidores de backend.

Várias soluções que vieram à mente:

  • Várias instâncias de HAProxy, balanceamento de carga com DNS (o Route53 tem uma opção ponderada)
  • Duas instâncias do HAProxy com vários endereços IP internos mantidos pelo Keepalive (não tenho certeza se isso é possível)

Existe uma maneira melhor de fazer isso?

    
por Bastien974 05.11.2014 / 17:21

2 respostas

7

Se o seu limite de 64k é devido a portas de origem, você pode fazer algo como o seguinte (um pouco hacky, mas foi feito atualmente no SE para websockets (temos algo como .5 milhões simultaneamente com HAProxy):

server ny-web01-1 10.0.0.1:8081 check
server ny-web01-2 10.0.0.1:8082 check
server ny-web01-3 10.0.0.1:8083 check

Também é possível fazer várias instâncias com keepalived. Basta fazer algo como o DNS round robin em vários IPs. Apenas certifique-se de que os IPs sempre sejam escolhidos pelos balanceadores de carga ativos, pois o próprio DNS não fornecerá o balanceamento de carga (também há mais opções aqui, essa é simplesmente simples).

    
por 05.11.2014 / 18:17
0

Você pode configurar vários sistemas HAproxy que compartilham os mesmos IPs usando Anycast e BGP ou algum outro protocolo de roteamento de borda. Desta forma, todos os sistemas HAproxy estão ativos; se algum desses problemas cair, pare de anunciar a rota do BGP nesse sistema e ele interromperá o tráfego em até 30 segundos; que será redistribuído para outros sistemas disponíveis que anunciam o mesmo intervalo.

Por exemplo, verifique este URL sobre como configurar esse layout

    
por 05.11.2014 / 17:29