Nous essayons de concevoir une architecture capable de gérer plus de 64 000 websockets.
Nous avons d'abord essayé avec Amazon ELB, mais sa conception ne permet pas un pic inattendu de trafic ni de websocket. (Le mode TCP expire les websockets de manière inattendue)
Avec HAProxy, ces limites ne s'appliquent pas, mais nous serons limités à environ 64 000 websockets maintenus entre HA et les serveurs principaux.
Plusieurs solutions qui vous sont venues à l'esprit:
- Plusieurs instances HAProxy, équilibre de charge avec DNS (Route53 a une option pondérée)
- Deux instances HAProxy avec Keepalived, plusieurs adresses IP internes (je ne sais pas si c'est faisable)
Y a-t-il une meilleure manière de faire cela ?
Réponses:
Si votre limite de 64 Ko est due aux ports source, vous pouvez faire quelque chose comme ceci (un peu hacky, mais c'est ce que nous faisons actuellement à SE pour les websockets (nous avons quelque chose comme 0,5 million en même temps que HAProxy):
De plus, plusieurs instances sont réalisables avec keepalived. Faites simplement quelque chose comme DNS à tour de rôle sur plusieurs IP. Assurez-vous simplement que les IP sont toujours récupérées par les équilibreurs de charge actifs car le DNS lui-même ne vous donnera pas l'équilibrage de la charge (il y a plus d'options ici aussi, celle-ci est tout simplement simple).
la source
source 0.0.0.0 usesrc client
dans la configuration backend de haproxy pour la transparence de la source tproxy. De cette façon, srcIP: srcPORT va être l'IP / les ports clients réels (pas les IP internes de la machine haproxy) - parfait pour la journalisation aussi.Vous pouvez configurer plusieurs systèmes HAproxy qui partagent les mêmes IP en utilisant Anycast et BGP ou un autre protocole de routage de frontière. De cette façon, tous les systèmes HAproxy sont actifs; si l'un de ceux-ci tombe en panne, vous arrêtez de faire la publicité de l'itinéraire BGP sur ce système et il cessera en ~ 30 secondes de recevoir du trafic; qui sera redistribué à d'autres systèmes disponibles qui annoncent la même gamme.
Par exemple, vérifiez cette URL pour savoir comment configurer une telle disposition
la source