Load Balancing von Client-Verbindungen zu Anwendungsservern ist entscheidend für die Anwendungserfahrung. Im Laufe der Jahre, in denen Load Balancer eingesetzt wurden, sind eine Reihe von Algorithmen entwickelt und optimiert worden, um die Leistung zu verbessern.
Jeder Load Balancing-Algorithmus erfüllt die Kernanforderung, eingehende Client-Anfragen zu verwalten und sie an eine Anwendungsinstanz weiterzuleiten, die auf einem Pool von Back-End-Servern läuft. Anwendungen sind vielfältig, und die optimale Methode für das Load Balancing von Verbindungen zu ihnen hängt von der vorhandenen Infrastruktur und den Anforderungen des Unternehmens ab.
Im Folgenden werden elf Algorithmen zum Load Balancing von Verbindungen zu Anwendungsservern vorgestellt und einige Anwendungsfälle erläutert.
Round Robin ist der einfachste Load Balancing-Algorithmus. Die Client-Anfragen werden in einfacher Rotation auf die Anwendungsserver verteilt. Wenn Sie beispielsweise drei Anwendungsserver haben: Die erste Client-Anfrage geht an den ersten Anwendungsserver in der Liste, die zweite an den zweiten, die dritte an den dritten, die vierte an den ersten und so weiter.
Load Balancing nach dem Round-Robin-Prinzip eignet sich am besten für vorhersehbare Client-Anfragen, die auf einen Server-Pool verteilt werden, dessen Mitglieder über relativ gleiche Verarbeitungskapazitäten und verfügbare Ressourcen (wie Netzwerkbandbreite und Speicherplatz) verfügen.
Die Einfachheit des Load Balancing nach dem Rotationsprinzip ist sein wichtigster Vor- und Nachteil. Da er so einfach ist, sind die Einrichtung und die laufende Verwaltung schnell erledigt. Allerdings berücksichtigt dieser Algorithmus nichts über den Zustand der Anwendungsserver oder deren Auslastung, was in der Praxis sehr schnell problematisch werden kann.
Ein Anwendungsfall für Round Robin Load Balancing ist der Test, ob ein neu eingerichteter Load Balancer und ein Anwendungsserver-Pool kommunizieren können und ob die grundlegenden Netzwerk- und Load Balancing-Funktionen funktionieren.
Der gewichtete Round-Robin-Algorithmus ähnelt dem Round-Robin-Algorithmus, bietet aber zusätzlich die Möglichkeit, die eingehenden Client-Anfragen entsprechend der relativen Kapazität der einzelnen Server auf den Serverpool zu verteilen. Er eignet sich am besten für die Verteilung eingehender Client-Anfragen auf Server mit unterschiedlichen Fähigkeiten oder verfügbaren Ressourcen. Der Administrator weist jedem Anwendungsserver anhand von Kriterien seiner Wahl eine Gewichtung zu, die die relative Fähigkeit jedes Servers im Pool zur Verarbeitung des Datenverkehrs angibt.
Den Servern, denen eine höhere Gewichtung zugewiesen wurde, wird ein höherer Prozentsatz der eingehenden Anfragen zugewiesen. Wenn Server 1 in einem Pool mit drei Servern doppelt so leistungsfähig ist wie die Server 2 und 3, kann die Gewichtung wie folgt festgelegt werden:
Die Skala, die für die Gewichtung verwendet wird, spielt keine Rolle. Es sind nur die Unterschiede in der Gewichtung zwischen den Servern, die wichtig sind.
Ein Anwendungsfall für gewichtetes Load Balancing ist die Durchführung von A/B-Tests von Anwendungsänderungen, indem Aktualisierungen zunächst auf einem Server mit geringem Gewicht bereitgestellt werden, um zu sehen, wie die Änderungen funktionieren. Wenn keine Probleme auftreten, können die Administratoren die Anwendungsaktualisierungen auf anderen Servern bereitstellen. Die Gewichtung wird angepasst, um das Rollout zu steuern, bis alle Server aktualisiert sind und die Produktionsgewichtung verwendet werden kann.
Least Connections Load Balancing ist ein dynamischer Load Balancing-Algorithmus, bei dem Client-Anfragen an den Anwendungsserver mit der geringsten Anzahl aktiver Verbindungen verteilt werden, wenn die Client-Anfrage eingeht. In Fällen, in denen die Anwendungsserver ähnliche Spezifikationen haben, kann ein Server aufgrund von länger bestehenden Verbindungen überlastet werden. Dieser Algorithmus berücksichtigt die dynamische Verbindungslast und sendet keine Anfragen an Server, die sie nicht bearbeiten können.
Ein Anwendungsfall für Load Balancing für die wenigsten Verbindungen ist, wenn eingehende Anfragen unterschiedliche Verbindungszeiten haben und eine Reihe von Servern mit relativ ähnlicher Verarbeitungsleistung und Ressourcen zur Verfügung stehen. Wenn Clients die Verbindungen über einen längeren Zeitraum aufrechterhalten können, besteht die Möglichkeit, dass ein einzelner Server seine gesamte Kapazität durch mehrere solche Verbindungen auslastet. Die Verwendung des Algorithmus für die wenigsten Verbindungen mindert dieses Risiko.
Weighted Least Connection (gewichtete kleinste Verbindung) erweitert den Algorithmus der kleinsten Verbindung, um unterschiedliche Eigenschaften der Anwendungsserver zu berücksichtigen. Der Administrator weist jedem Anwendungsserver eine Gewichtung zu, die auf der relativen Verarbeitungsleistung und den verfügbaren Ressourcen basiert. Load Balancing-Entscheidungen werden auf der Grundlage aktiver Verbindungen und der zugewiesenen Servergewichte getroffen (z. B. wenn es zwei Server mit der geringsten Anzahl von Verbindungen gibt, wird der Server mit dem höchsten Gewicht bevorzugt).
Die Anwendungsfälle für das Load Balancing mit gewichteten Least Connections ähneln denen der einfachen Least Connections, sind aber auf Serverpools anwendbar, bei denen die Server nicht alle gleich sind. Sie bietet denselben Schutz gegen dauerhafte Verbindungen zu einem einzelnen Server oder dem leistungsstärksten Server in einem gemischten Pool.
Beim ressourcenbasierten (oder adaptiven) Load Balancing werden Entscheidungen auf der Grundlage von Statusindikatoren getroffen, die der Load Balancer von den Anwendungsservern abruft. Der Status wird von einem Agenten ermittelt, der auf jedem Server läuft. LoadMaster fragt jeden Server regelmäßig nach diesen Statusinformationen ab und legt dann für jeden Server ein entsprechendes dynamisches Gewicht fest. Mit dieser Load Balancing-Methode wird im Wesentlichen eine detaillierte Gesundheitsprüfung der Anwendungsserver durchgeführt.
Diese Methode ist geeignet, wenn detaillierte Informationen über den Zustand der einzelnen Server erforderlich sind, um Entscheidungen über das Load Balancing zu treffen. Diese Methode eignet sich beispielsweise für alle Anwendungen, bei denen die Arbeitslast schwankt und detaillierte Informationen über die Leistung und den Status der Anwendung erforderlich sind, um den Zustand des Servers zu beurteilen. Diese Methode kann auch eine anwendungsspezifische Zustandsprüfung für Layer-4-Dienste (UDP) ermöglichen.
Beim Load Balancing-Algorithmus mit fester Gewichtung wird jedem Anwendungsserver eine Gewichtung zugewiesen, die auf Kriterien basiert, die die relative Fähigkeit jedes Servers zur Verkehrsabwicklung darstellen. Der Anwendungsserver mit der höchsten Gewichtung erhält den gesamten Datenverkehr. Wenn der Anwendungsserver mit der höchsten Gewichtung nicht verfügbar ist, um weitere Verbindungen zu verarbeiten, leitet der Load Balancer den gesamten Datenverkehr an den nächsthöheren Anwendungsserver weiter.
Der Algorithmus für die gewichtete Antwortzeit verwendet die Antwortzeit eines Anwendungsservers, um eine Servergewichtung zu berechnen. Der Anwendungsserver, der am schnellsten antwortet, erhält die nächste Anfrage. Ein Anwendungsfall für Load Balancing mit gewichteter Antwortzeit ist, wenn eine schnelle Antwortzeit der Anwendung im Vordergrund steht.
Der Algorithmus für das Load Balancing mit Quell-IP-Hash verwendet die Quell- und Ziel-IP-Adressen des Clients, um einen eindeutigen Hash-Schlüssel zu erzeugen, der den Client mit einem bestimmten Server verbindet. Da der Schlüssel neu generiert werden kann, wenn die Verbindung unterbrochen wird, können erneute Verbindungsanfragen an denselben Server weitergeleitet werden, der zuvor verwendet wurde. Dies wird als Serveraffinität bezeichnet. Diese Load Balancing-Methode ist am besten geeignet, wenn ein Client bei jeder weiteren Verbindung immer zum selben Server zurückkehren muss, wie z. B. in Einkaufswagen-Szenarien, bei denen Artikel, die auf einem Server in den Einkaufswagen gelegt wurden, auch noch vorhanden sein sollten, wenn ein Benutzer später eine Verbindung herstellt.
Der Load Balancing-Algorithmus für den URL-Hash ähnelt dem Source-IP-Hashing, mit dem Unterschied, dass der erstellte Hash auf dem URL in der Client-Anfrage basiert. Dadurch wird sichergestellt, dass alle Client-Anfragen an eine bestimmte URL immer an denselben Back-End-Server gehen. Ein typischer Anwendungsfall wäre die Weiterleitung des Datenverkehrs an einen optimierten Medienserver, der Videos abspielen kann, oder an einen für eine bestimmte Aufgabe optimierten Server.
DNS Load Balancing ist eine weit verbreitete Technik für Load Balancing in einfachen Szenarien und auch für die Verteilung des Datenverkehrs über mehrere Rechenzentren, möglicherweise in verschiedenen geografischen Regionen.
Ein DNS-Namensserver ist für die Verwaltung des Datenverkehrs zuständig, anstatt über eine spezielle Hardware zu verfügen, die auflöst, an welchen Server umgeleitet werden soll. Der Nameserver verfügt über eine Liste von IP-Adressen, die den verschiedenen Servern entsprechen, an die Anfragen weitergeleitet werden können. Jedes Mal, wenn eine Anfrage nach einer bestimmten Domäne gestellt wird, gibt der Name-Server diese Liste von IP-Adressen zurück und ändert die Reihenfolge der Adressen. Die Neuordnung erfolgt nach dem Round-Robin-Prinzip. So wird jede neue Anfrage an einen anderen Rechner weitergeleitet, und die Last wird auf die Server verteilt.
Die Verwendung von DNS Load Balancing über einen Nameserver ist einfach und bei vielen Implementierungen beliebt. Sie berücksichtigt jedoch nicht die bestehende Last auf den Servern, die Verarbeitungszeit des Servers, seinen Online-Status und mehr. Im Grunde handelt es sich um eine Art Rundlaufverfahren, das keinen speziellen Load Balancer erfordert. Weitere Einschränkungen ergeben sich, wenn DNS-Einträge auf Clients und Servern zwischengespeichert werden, was bedeutet, dass die zufällige Umverteilung, die die Last verteilen würde, nicht sehr effektiv ist.
Geografisches Load Balancing via DNS über getrennte Rechenzentren hinweg ist ein häufiger und nicht trivialer Anwendungsfall für diese Technik. In diesem Szenario bietet sie einen Mehrwert, wohingegen ihre Verwendung zur Vermeidung des Einsatzes eines Load Balancers für die lokale Nutzung eine falsche Wirtschaftlichkeit darstellt.
Viele Progress Kemp-Kunden fragen uns, welchen Load Balancing-Algorithmus sie verwenden sollen und welcher am häufigsten verwendet wird. Im Folgenden geben wir einige Hinweise zu diesen Fragen. Aber wie wir bereits erwähnt haben, ist jedes Unternehmen und jeder Einsatz einzigartig. Wenn Sie sich also nicht sicher sind, welchen LoadMaster-Algorithmus Sie verwenden sollen, sprechen Sie mit unserem Beratungsteam, das Sie auf der Grundlage seiner Erfahrung aus über 100.000+ Implementierungen und Kundenprojekten beraten kann.
Es überrascht nicht, dass der einfache statische Round-Robin-Algorithmus am häufigsten verwendet wird. Da er so einfach einzurichten ist, wird er häufig verwendet, um zu testen, ob ein Load Balancer und ein Serverpool miteinander kommunizieren. In vielen einfachen Implementierungen bleibt er nach dieser ersten Einrichtung die Standardeinstellung, bis dynamischere Algorithmen benötigt werden. Die gewichtete Version des Round-Robin-Verfahrens wird häufig verwendet, wenn die Backend-Server nicht identisch sind, aber die Anforderungen noch einfach sind.
Da das Verkehrsaufkommen zunimmt und die Anforderungen komplexer werden, werden dynamische Algorithmen wie die geringste Verbindung, adaptive Algorithmen und gewichtete Antwortzeiten beliebt. Die IP-Hash- und URL-Hash-Algorithmen werden häufig für Szenarien verwendet, in denen Affinität erforderlich ist (Warenkörbe oder dedizierte Medienserver).
Bei der Wahl des Load Balancing-Algorithmus spielen viele Faktoren eine Rolle. Grundsätzlich sollte man sich für den Einsatz von dedizierten Load Balancern entscheiden und nicht auf DNS-basiertes Load Balancing setzen.
Verwenden Sie den Algorithmus, der die gewünschte Anwendungserfahrung mit dem geringsten Overhead bietet. Wenn die Verkehrsmuster und die Auslastung der Infrastruktur gut bekannt sind, kann die Verwendung einfacher Algorithmen mit einem angemessen dimensionierten Anwendungsserver-Pool ausreichen. Wenn die Auslastung nicht vorhersehbar ist oder wenn die verfügbare Infrastruktur einen Server-Pool mit unterschiedlichen Ressourcen erfordert, sind die dynamischeren Algorithmen, die den Zustand der Server und des Netzwerks berücksichtigen, besser geeignet und bieten die beste Anwendungserfahrung.
Bei der Entscheidung, welcher Algorithmus verwendet werden soll, ist zu bedenken, dass der Load Balancer möglicherweise weitere Funktionen wie Proxy-Dienste, TLS/SSL-Verschlüsselungs-Offloading oder Global Server Load Balancing (GSLB) hostet. Die dem Load Balancer zur Verfügung stehenden Ressourcen sollten in der Lage sein, die wichtigsten Load Balancing-Algorithmen sowie alle anderen auf dieser Instanz laufenden Dienste zu unterstützen.
Das Beratungsteam von Kemp LoadMaster steht Ihnen jederzeit zur Verfügung, um Sie dabei zu unterstützen, die richtigen Entscheidungen zu treffen und die beste Benutzeranwendungserfahrung aus Ihrer verfügbaren Infrastruktur herauszuholen.