Nous avons eu des combats avec HAProxy pour quelques jours dans Amazon EC2; l'expérience a été jusqu'à présent très bien, mais nous sommes coincés sur la serrant plus les performances du logiciel d'équilibrage de la charge. Nous ne sommes pas exactement les réseaux Linux génies (nous ne sommes qu'un .NET boutique, normalement), mais nous avons tenu jusqu'à présent notre propre, en essayant de régler correctement les ulimits, en inspectant les messages du noyau et tcpdumps pour toutes les irrégularités. Jusqu'à présent, nous avons atteint un plateau d'environ 1 700 requêtes/s, à quel point le client délais d'attente abondent (nous avons été à l'aide de et de peaufinage httperf à cet effet). Un collègue et moi avons été à l'écoute de la plus récente Débordement de Pile podcast, dans lequel le Reddit fondateurs de noter que la totalité de leur site fonctionne un HAProxy nœud, et qui jusqu'à présent n'est pas devenu un goulot d'étranglement. Ack! Il n'y a de toute façon pas voir que beaucoup de demandes simultanées, nous faisons quelque chose de mal, ou de la nature partagée de l'EC2 est la limitation de la pile réseau de l'instance Ec2 (nous sommes à l'aide d'un grand type d'instance). Compte tenu du fait que Joel et le Reddit fondateurs d'accord que le réseau sera probablement le facteur limitant, est-il possible que la limitation que nous voyons?
Toutes les pensées sont grandement appréciés!
Edit , Il ressemble à la réelle question n'est pas, en fait, avec l'équilibrage de la charge de noeud! Le coupable était en fait les noeuds httperf, dans la présente instance. Comme httperf construit et arrache un socket pour chaque demande, il consacre une bonne quantité de temps CPU dans le noyau. Comme nous avons croisé le taux de demande supérieure, le TCP FIN TTL (années 60 par défaut) a été de garder les sockets autour trop long, et le ip_local_port_range par défaut a été trop faible pour ce scénario d'utilisation. En gros, après quelques minutes de la client (httperf) nœud de constamment créer et de détruire les nouveaux sockets, le nombre de ports non utilisés manqué, et après la "demande" d'erreur à ce stade, rendement faible demande/sec nombre et une grande quantité d'erreurs.
Nous avons également eu regardé nginx, mais Nous avons travaillé avec RighScale, et ils ont déroulant dans des scripts pour HAProxy. Oh, et nous avons trop serré un délai de [bien sûr] pour passer sur les composants, sauf si cela s'avère absolument nécessaire. Heureusement, étant sur AWS nous permet de tester une autre configuration à l'aide de nginx en parallèle (le cas échéant), et de les faire passer une nuit plus tard.
Cette page décrit chacune des variables sysctl assez bien (ip_local_port_range et tcp_fin_timeout ont été à l'écoute, dans ce cas).