Estamos tentando projetar uma arquitetura capaz de lidar com mais de 64k websockets.
Primeiro tentamos com o Amazon ELB, mas seu design não permite pico inesperado de tráfego nem soquete da web. (O modo TCP atinge o tempo limite dos webs inesperadamente)
Com o HAProxy, esses limites não se aplicam, mas estaremos limitados a ~ 64k websockets mantidos entre a HA e os servidores de back-end.
Várias soluções que vieram à mente:
- Várias instâncias HAProxy, equilíbrio de carga com DNS (Route53 tem uma opção ponderada)
- Duas instâncias HAProxy com Keepalived, vários endereços IP internos (não tenho certeza se é possível)
Existe uma maneira melhor de fazer isso ?
domain-name-system
load-balancing
haproxy
scalability
websocket
Bastien974
fonte
fonte
Respostas:
Se o seu limite de 64k é devido a portas de origem, você pode fazer algo como o seguinte (um pouco hacky, mas atualmente fazemos no SE para websockets (temos algo como 0,5 milhão simultâneo geralmente com HAProxy):
Também várias instâncias são possíveis com keepalived. Basta fazer algo como DNS de rodízio em vários IPs. Apenas garanta que os IPs sempre sejam capturados pelos balanceadores de carga ativos, pois o próprio DNS não fornecerá o balanceamento de carga (há mais opções aqui também, essa é apenas uma simples).
fonte
source 0.0.0.0 usesrc client
na configuração de back-end do haproxy para obter a transparência do código-fonte do tproxy. Dessa forma, srcIP: srcPORT será o IP / portas do cliente real (e não os IPs internos da máquina), ideal para o log também.Você pode configurar vários sistemas HAproxy que compartilham os mesmos IPs usando Anycast e BGP ou algum outro protocolo de roteamento de borda. Dessa forma, todos os sistemas HAproxy estão ativos; se alguma dessas falhas for interrompida, você para de anunciar a rota BGP nesse sistema e, em ~ 30 segundos, deixa de receber tráfego; que será redistribuído para outros sistemas disponíveis que anunciam o mesmo intervalo.
Por exemplo, verifique este URL sobre como configurar esse layout
fonte