Estamos tratando de diseñar una arquitectura que pueda manejar más de 64k websockets.
Primero probamos con Amazon ELB, pero su diseño no permite un pico inesperado de tráfico ni websocket. (El modo TCP agotó el tiempo de espera de los websockets inesperadamente)
Con HAProxy, esos límites no se aplican, pero estaremos limitados a ~ 64k websockets mantenidos entre HA y los servidores de fondo.
Múltiples soluciones que me vinieron a la mente:
- Múltiples instancias HAProxy, equilibrio de carga con DNS (Route53 tiene una opción ponderada)
- Dos instancias HAProxy con Keepalived, múltiples direcciones IP internas (no estoy seguro de si es factible)
Hay una mejor manera de hacer esto ?
Respuestas:
Si su límite de 64k se debe a puertos de origen, puede hacer algo como lo siguiente (un poco hacky, pero era lo que hacemos actualmente en SE para websockets (tenemos algo así como .5 millones concurrentes generalmente con HAProxy):
También se pueden hacer múltiples instancias con keepalived. Simplemente haga algo como DNS round robin sobre múltiples IP. Solo asegúrese de que las IP siempre sean recogidas por los equilibradores de carga activos ya que el DNS en sí mismo no le dará el equilibrio de carga (también hay más opciones aquí, esta es simplemente simple).
fuente
source 0.0.0.0 usesrc client
la configuración de back-end de haproxy para la transparencia de fuente de tproxy. De esta manera, srcIP: srcPORT serán los puertos / IP del cliente real (no las IP internas de la máquina haproxy), también es perfecto para el registro.Puede configurar múltiples sistemas HAproxy que comparten las mismas IP utilizando Anycast y BGP o algún otro protocolo de enrutamiento de borde. De esta manera, todos los sistemas HAproxy están activos; si alguno de esos falla, deja de anunciar la ruta BGP en ese sistema y dejará de recibir tráfico en ~ 30 segundos; que se redistribuirá a otros sistemas disponibles que anuncian el mismo rango.
Por ejemplo, consulte esta url sobre cómo configurar dicho diseño
fuente