Soweit ich weiß, machen sie nur Round-Robin und verteilen die Verbindungen gleichmäßig auf die Server hinter ihnen.
Art, aber nicht ganz ich denke - leider ist die Amazon ELB- Routing-Dokumentation nicht vorhanden, so dass man einige Teile zusammensetzen muss, um eine Schlussfolgerung zu ziehen. Hier ist das einzige Fragment aus dem Entwicklerhandbuch für den elastischen Lastausgleich, das mir bekannt ist, siehe Abschnitt Sticky Sessions im Überblick über den elastischen Lastausgleich :
Standardmäßig leitet ein Load Balancer jede Anforderung unabhängig an die Anwendungsinstanz mit der geringsten Last weiter . Sie können jedoch die Sticky-Session-Funktion (auch als Sitzungsaffinität bezeichnet) verwenden, mit der der Load Balancer die Sitzung eines Benutzers an eine bestimmte Anwendungsinstanz binden kann. Dadurch wird sichergestellt, dass alle Anforderungen, die vom Benutzer während der Sitzung eingehen, an dieselbe Anwendungsinstanz gesendet werden. [Hervorhebung von mir]
Was bedeutet nun kleinste Last genau? Die einzige Erklärung, die mir bekannt ist, ist die etwas vage Antwort des AWS-Teams von 2009 auf die ELB-Strategie :
ELB verfolgt lose, wie viele Anforderungen (oder Verbindungen im Fall von TCP) in jeder Instanz ausstehen. Die Ressourcennutzung (z. B. CPU oder Speicher) wird nicht bei jeder Instanz überwacht. ELB wird derzeit unter den Fällen, von denen es glaubt, dass sie die wenigsten ausstehenden Anfragen haben, ein Round-Robin-Verfahren durchführen. [Hervorhebung von mir]
Dies ist in Bezug auf die Systemarchitektur und die angesprochenen Anwendungsfälle sehr sinnvoll, bietet jedoch offensichtlich nicht die Transparenz und / oder Kontrolle des Routings, die Sie für erweiterte HA-Szenarien benötigen oder benötigen.
Bitte beachten Sie, dass dies je nach Interpretation möglicherweise durch eine neuere Antwort des AWS-Teams auf die Richtlinien für den elastischen Lastausgleich - Lastverteilung ein wenig widerlegt wird oder nicht :
Round-Robin kommt zwar ins Spiel, aber die Client-Sitzungen berücksichtigen nicht immer TTL- oder DNS-Caches, sodass Sie verzerrte Ergebnisse und ungleichmäßige Verteilungen von Anforderungen erhalten können. Die ELB berücksichtigt nicht, welche Verkehrs- / Anforderungsinstanzen bisher in ihren Verkehrsroutingentscheidungen erhalten haben. [Hervorhebung von mir]
Gesundheitschecks
Natürlich wird das oben Gesagte durch die ordnungsgemäß dokumentierten, transparenten und kontrollierbaren Integritätsprüfungen geändert , die Ihnen eine gewisse Hebelwirkung bieten, um (möglicherweise vorübergehend) Instanzen aus dem Routing zu entfernen, wie in der oben genannten Antwort des AWS-Teams an ELB zusammengefasst Strategie auch:
Der Load Balancer überwacht den Zustand Ihrer bei Ihrem Load Balancer registrierten Instanzen. Wenn der Load Balancer ein Problem mit einer Instanz erkennt, wird die Verteilung des Datenverkehrs an diese Instanz beendet. Wenn die Instanz wieder fehlerfrei ist, startet der Load Balancer die Verteilung des Datenverkehrs neu. Dieser Prozess ermöglicht es Ihrer Anwendung, automatisch auf fehlgeschlagene Instanzen zu reagieren, ohne dass Sie über die Konfiguration des Integritätsprüfungsprogramms hinaus involviert sein müssen.
Fazit
Obwohl dies sicherlich ungewöhnlich ist, verstehe ich nicht, warum ELB nicht auch mit einem Pool verschiedener Amazon EC2- Instanztypen arbeiten sollte. Ich habe dies jedoch nicht selbst versucht und würde sowohl die Überwachung Ihres Load Balancers mit CloudWatch als auch die Überwachung empfehlen Ihre einzelnen EC2-Instanzen und korrelieren die Ergebnisse, um letztendlich einen Einblick und ein Vertrauen in ein solches Setup zu erhalten.