Ich habe verschiedene Lastausgleichsalgorithmen für HTTP untersucht und gerade 3. Random, Round Robin und Weighted Round Robin gefunden. Gibt es noch andere Möglichkeiten?
Vielen Dank, Paul
Ich habe verschiedene Lastausgleichsalgorithmen für HTTP untersucht und gerade 3. Random, Round Robin und Weighted Round Robin gefunden. Gibt es noch andere Möglichkeiten?
Vielen Dank, Paul
Antworten:
Die gebräuchlichsten Lastverteilungsalgorithmen für HTTP-Lastverteiler sind IMHO:
Round Robin (manchmal "Next in Loop" genannt).
Weighted Round Robin - wie Round Robin, jedoch erhalten einige Server einen größeren Anteil am gesamten Datenverkehr.
Zufall .
Quell-IP- Hash. Verbindungen werden basierend auf der Quell-IP-Adresse an Back-End-Server verteilt. Wenn ein Webknoten ausfällt und außer Betrieb genommen wird, ändert sich die Verteilung. Solange auf allen Servern eine bestimmte Client-IP-Adresse ausgeführt wird, wird immer derselbe Webserver verwendet.
URL- Hash. Ähnlich wie der Quell-IP-Hash, außer dass das Hashing für die URL der Anforderung durchgeführt wird. Nützlich beim Lastenausgleich vor Proxy-Caches, da Anforderungen für ein bestimmtes Objekt immer nur an einen Backend-Cache gesendet werden. Dies vermeidet Cache-Duplikationen, bei denen dasselbe Objekt in mehreren / allen Caches gespeichert ist, und erhöht die effektive Kapazität der Backend-Caches.
Am wenigsten Verbindungen , am wenigsten gewichtete Verbindungen. Der Lastenausgleich überwacht die Anzahl der offenen Verbindungen für jeden Server und sendet diese an den Server mit der geringsten Auslastung.
Am wenigsten Verkehr , am wenigsten Verkehr gewichtet. Der Lastenausgleich überwacht die Bitrate von jedem Server und sendet sie an den Server mit dem geringsten ausgehenden Datenverkehr.
Geringste Latenz . Perlbal sendet eine schnelle HTTP OPTIONS-Anfrage an die Back-End-Server und sendet die Anfrage an den ersten Server, der antwortet.
Wahrscheinlich handelt es sich bei den oben genannten Verfahren nicht um Algorithmen im strengen Sinne der Informatik, sondern um allgemeinere Beschreibungen gängiger Ansätze. Hier ist ein kleines Dokument von Cisco, in dem einige der von ihnen verwendeten Algorithmen detaillierter beschrieben werden . Implementierungen von anderen Anbietern unterscheiden sich geringfügig.
Es gibt Randfälle, in denen die exotischeren Algorithmen nützlich sind - zum Beispiel kann sich Video-Streaming gut für den "geringsten Verkehr" eignen. Im Allgemeinen ist die optimale Lösung für die meisten Webanwendungen und Websites:
Ein geteiltes / verteiltes Sitzungssystem , so dass jeder Webnode jede Benutzeranfrage beantworten kann (dh die Sitzungsdaten des Benutzers wie Sitzungscookies stehen allen Servern gleichermaßen zur Verfügung).
Load Balancing mit Round Robin (optional Weighted Round Robin) oder Random Distribution. Round Robin und Random sind einfache und ausfallsichere Algorithmen ohne Hot-Spot-Probleme, dh die Lastverteilung auf die Backends bleibt in allen Situationen fair.
Die Frage ist unvollständig:
Lastausgleich WAS?
CPUs können gesättigt sein. Die übliche Perspektive ist das Zurückschieben einer Ressource, anstatt zu ihr zu ziehen.
Festplatten müssen viele verschiedene Arten von Lasten ausgleichen, z. B. Speicherplatz, Lesegeschwindigkeiten, Schreibgeschwindigkeiten, Durchsatz usw.
Netzwerke können basierend auf Latenz oder Gesamtdurchsatz lastausgeglichen werden ...
Personen können auf der Grundlage ihrer individuellen Kapazität ausbalanciert werden. Manche sind Multi-Task-fähig, andere nicht, und dann gibt es Qualität gegen Quantität. Sie können Ihre Personalressourcen auf der Grundlage vieler Faktoren und mit unterschiedlichen Gewichten für unterschiedliche Attribute optimieren.
Das Obige ist alles andere als erschöpfend; Der Punkt ist, dass unterschiedliche Ressourcen völlig unterschiedliche Arten des Lastausgleichs erfordern. Von ihren verfügbaren Attributen und Kapazitäten müssen Sie angeben, WELCHE für das Auswuchten von Interesse sind.
Was Sie zu balancieren versuchen, ist das erste Kriterium für einen guten Balancierungsalgorithmus. Und der Vorschlag, dass es nur drei gibt, ist ... nicht aufgeklärt. Es wäre eine Promotion wert, einen ordentlichen Job zu machen und zu versuchen, alle Arten des "Lastenausgleichs" zu beschreiben.
RT
Keine direkte Antwort auf Ihre Frage, aber eine tatsächliche Lösung, die wir für nützlich befunden haben. Unter Verwendung von LVS und des Puls-Daemons wird unser HTTP-Lastenausgleich so konfiguriert, dass ein benutzerdefiniertes Bash-Skript aufgerufen wird, das die Belastung der "realen Server" über eine einfache SSH-Verbindung und einen Aufruf der Verfügbarkeit ermittelt .
Anschließend wird basierend auf dem Lastdurchschnitt der Server eine Gewichtung pro Server festgelegt. Dies ist nicht der wissenschaftlichste Ansatz, da der Lastdurchschnitt nicht unbedingt auf HTTP-Verbindungen oder die durch diese Verbindungen verursachte CPU-Last hinweist. Trotzdem haben wir überraschend effektive Ergebnisse erzielt.
Mein 2c. YMMV.
PS: Schauen Sie sich das LVS-Projekt an - Sie finden definitiv Informationen zu Implementierungen der Lastausgleichsplanung.