Inhaltsverzeichnis[Ausblenden][Zeigen]
Die Verfügbarkeit von Anwendungen wurde noch nie so ernst genommen wie heute, wenn wir Apps für mehr als nur die Kommunikation nutzen, ob privat oder beruflich, und wenn Apps das Geschäft sind.
Anwendungen, die nicht ständig online oder instabil sind, verlieren ihre Benutzer und Relevanz und werden schließlich obsolet. Es geschah im Handumdrehen. Da das Internet niemals schläft und 24 Stunden am Tag, 7 Tage die Woche in Betrieb ist, muss die gleiche Idee für Apps gelten.
Skalierbarkeit ist entscheidend, um dies zu erreichen und die Anwendungsverfügbarkeit sicherzustellen. Load Balancing ist eine der wichtigsten Komponenten zur Sicherstellung der Verfügbarkeit. Viele Leute glauben immer noch, dass der Lastausgleich mit einem einfachen Skript erreicht werden kann.
Dies ist jedoch nicht der Fall. Sie allein ermöglicht den Zugriff auf Programme auf der ganzen Welt – jederzeit und von jedem Gerät aus.
In diesem Beitrag werfen wir unter anderem einen tiefen Blick auf Load Balancing, seine Algorithmen und seine Beziehung zu Microservices. Lass uns anfangen!
Was ist Load-Balancing?
Wenn die Nachfrage nach einer Website oder Geschäftsanwendung wächst, wird ein einzelner Server bald nicht mehr in der Lage sein, die gesamte Last zu bewältigen. Organisationen verteilen die Arbeitslast auf mehrere Server, um die Nachfrage zu befriedigen. Diese als „Load Balancing“ bekannte Methode verhindert, dass ein einzelner Server überlastet wird, was dazu führen kann, dass er langsamer wird, Anfragen verwirft oder sogar abstürzt.
Load Balancing verteilt den Netzwerkverkehr gleichmäßig, um Ausfälle aufgrund von Ressourcenüberlastung zu vermeiden. Anwendungen, Websites, Datenbanken und andere Computerressourcen werden mit dieser Methode besser ausgeführt und sind besser verfügbar. Es hilft auch bei der ordnungsgemäßen und rechtzeitigen Bearbeitung von Benutzeranfragen.
Aus der Sicht des Benutzers dient der Lastenausgleich als unsichtbarer Vermittler zwischen einem Client und einer Sammlung von Servern und stellt sicher, dass Verbindungsanforderungen nicht verworfen werden. Anwendungen, Websites, Datenbanken und Online-Dienste würden höchstwahrscheinlich zusammenbrechen, wenn die Nachfrage ohne Lastausgleich zu groß würde.
Hunderttausende Benutzeranfragen können gleichzeitig an eine einzige stark frequentierte Website gesendet werden. Mehrere Server sind erforderlich, um Webseiten korrekt mit den angeforderten Inhalten wie Text, Bildern, Video und Audio-Streaming zu füllen. Load Balancing wird häufig in Website-Serverfarmen mit hohem Datenverkehr sowie auf DNS-Servern, Datenbanken und FTP-Sites (File Transfer Protocol) eingesetzt.
Wenn ein einzelner Server überlastet ist, kann dieser schlecht funktionieren oder sogar abstürzen. Load Balancer reduzieren die Wahrscheinlichkeit von Ausfallzeiten, indem sie Benutzeranfragen gleichmäßig auf eine Sammlung von Servern verteilen. Wenn einer der Server in der Gruppe ausfällt, wird der Datenverkehr an andere Server in der Gruppe umgeleitet. Ein Load Balancer fügt automatisch neue Server in den Datenverkehrsverteilungsprozess ein, wenn sie dem Serverpool hinzugefügt werden.
Wie funktioniert Load-Balancing?
Es funktioniert wie folgt:
- Wenn ein Client eine Anfrage erhält, beispielsweise über einen Browser oder eine Anwendung, versucht er, eine Verbindung mit dem Server herzustellen.
- Wenn ein Load Balancer eine Anfrage erhält, leitet er sie basierend auf festgelegten Mustern des Algorithmus (oder der Farm) an einen der Server in einer Servergruppe weiter.
- Der Server empfängt die Verbindungsanfrage und antwortet dem Client über den Load Balancer.
- Wenn der Load Balancer die Antwort erhält, gleicht er die IP-Adresse des Clients mit der IP-Adresse des ausgewählten Servers ab. Anschließend wird die Antwort mit dem Paket übertragen.
- SSL-Offload ist der Prozess der Entschlüsselung von Daten mithilfe des Security Socket Layer-Verschlüsselungsprotokolls, sodass Server dies nicht tun müssen.
- Der Vorgang wird wiederholt, bis die Sitzung beendet ist.
Load-Balancing-Methoden
Um auszuwählen, welcher der Server in einer Serverfarm die nächste Anfrage erhält, verwendet jede Lastausgleichstechnik eine Reihe von Kriterien. Es gibt fünf typische Ansätze für das Load-Balancing:
- Round Robin: Dies ist der Standardansatz, und er funktioniert genauso, wie er sich anhört. Der Load Balancer verteilt Anfragen in einem rotierenden Muster, beginnend mit dem ersten Server in der Gruppe und weiter nach unten, wo er darauf wartet, erneut aufgerufen zu werden. Diese Methode stellt sicher, dass jeder Server ungefähr die gleiche Anzahl von Verbindungen verarbeitet.
- Gewichteter Round Robin: Dieser Ansatz weist jedem Server eine Gewichtung (oder Präferenz) zu, die im Allgemeinen proportional zu seiner Kapazität ist. Je mehr Anfragen ein Server erhält, desto höher die Gewichtung. Beispielsweise erhält ein Server mit einem Gewichtungswert von zwei doppelt so viele Anfragen wie ein Server mit einem Gewichtungswert von eins.
- Klebrige Sitzung: Dieser auch als Sitzungspersistenz bezeichnete Ansatz verbindet bestimmte Clients und Server für die Dauer einer Sitzung. Um die Verknüpfung herzustellen, verwendet der Load Balancer ein Cookie oder die IP-Adresse des Benutzers, um ein Benutzerattribut zu identifizieren. Sobald die Verbindung hergestellt ist, werden die Anfragen des Benutzers an denselben Server geleitet, bis die Sitzung endet. Dies optimiert die Netzwerkressourcen und verbessert gleichzeitig die Benutzererfahrung.
- Wenigste Verbindungen: Diese Strategie geht davon aus, dass alle Anfragen zu einer gleichen Serverlast führen. Als Ergebnis erhält der Server mit den wenigsten Anfragen die nächste Anfrage.
- IP-Hash: Dieser Algorithmus generiert einen eindeutigen Hash-Schlüssel basierend auf den Quell- und Ziel-IP-Adressen des Clients und Servers. Der Schlüssel wird zum Weiterleiten der Anfrage verwendet und ermöglicht die Wiederaufnahme einer unterbrochenen Verbindung mit demselben Server.
Hardware vs. Software-Load-Balancer
Hardware-Load-Balancer
Physische Hardware, wie z. B. eine Appliance, bildet Hardware-Load-Balancer. Diese leiten den Datenverkehr abhängig von Faktoren wie der Anzahl bestehender Verbindungen, der Prozessorauslastung und der Serverleistung an die Server weiter. Hardware-Load-Balancer verfügen über proprietäre Firmware, die gewartet und aktualisiert werden muss, wenn neue Versionen und Sicherheitsfixes verfügbar werden.
Hardware-Load-Balancer bieten häufig eine höhere Leistung und Kontrolle sowie ein breiteres Spektrum an Funktionen wie Kerberos-Authentifizierung und SSL-Hardwarebeschleunigung, erfordern jedoch ein gewisses Maß an Management- und Wartungskompetenz. Da Hardware-Load-Balancer weniger flexibel und skalierbar sind als Software-Load-Balancer, besteht die Tendenz, Hardware-Load-Balancer übermäßig bereitzustellen.
Software-Load-Balancer
Software-Load-Balancer sind in der Regel einfacher einzurichten als ihre Hardware-Pendants. Sie sind außerdem kostengünstiger und anpassungsfähiger und funktionieren gut mit Softwareentwicklungsumgebungen. Mit der Softwaremethode können Sie den Load Balancer genau an die Anforderungen Ihrer Umgebung anpassen. Die erhöhte Flexibilität kann auf Kosten zusätzlicher Zeit für die Einrichtung des Load Balancers gehen.
Software-Balancer bieten Ihnen eine größere Flexibilität bei der Durchführung von Änderungen und Aktualisierungen als Hardware-Balancer, die einen geschlosseneren Ansatz verfolgen. Vorgefertigte virtuelle Maschinen können als Software-Load-Balancer (VMs) verwendet werden. Virtuelle Maschinen sparen Ihnen etwas Einstellzeit, aber sie verfügen möglicherweise nicht über alle Funktionen, die in ihren Hardware-Gegenstücken verfügbar sind.
Einfache Load-Balancing-Implementierung
Dazu verwenden wir die Spring Cloud-Bibliothek Apps erstellen die mit Lastenausgleich eine Verbindung zu anderen Apps herstellen. Während der Verarbeitung von Remote-Service-Anfragen können wir mit jeder beliebigen Technik problemlos einen Lastausgleich erstellen. Betrachten Sie den folgenden Code als Beispiel. Wir beginnen mit einer einfachen Serveranwendung.
Der Server wird nur noch einen HTTP-Endpunkt haben und in mehreren Instanzen betrieben werden. Dann erstellen wir eine Client-App, die Load Balancer verwendet, um Anfragen auf mehrere Serverinstanzen zu verteilen.
Server
Wir beginnen mit einer Basis Frühlingsstiefel Anwendung für unseren Beispielserver:
Zu Beginn fügen wir eine anpassbare Variable namens instance_ID ein. Dies hilft uns, zwischen zahlreichen Instanzen zu unterscheiden, die in Betrieb sind. Anschließend erstellen wir einen einzelnen HTTP-GET-Endpunkt, der eine Nachricht und eine Instanz-ID zurückgibt.
Die Standardinstanz mit der ID 1 wird auf Port 8080 betrieben. Wir müssen nur ein paar Programmparameter hinzufügen, um eine zweite Instanz zu starten:
Kunden
Schauen wir uns nun den Client-Code an. Hier kommt Load Balancer ins Spiel, also fangen wir damit an, es in unsere Anwendung zu integrieren:
Anschließend entwickeln wir eine Implementierung von ServiceInstanceListSupplier. Dies ist eine der wichtigsten Schnittstellen in Load Balancer. Es gibt an, wie wir zugängliche Dienstinstanzen finden.
Wir werden zwei separate Instanzen unseres Beispielservers in unserer Beispielanwendung hartcodieren. Sie laufen auf demselben System, verwenden aber separate Ports:
Erstellen Sie jetzt eine LoadBalancerConfiguration-Klasse:
Diese Klasse hat nur einen Zweck: Sie erstellt einen WebClient-Builder mit Lastenausgleich für Remoteanforderungen. Unsere Annotation verwendet einen fiktiven Namen für den Dienst.
Dies liegt daran, dass wir die genauen Hostnamen und Ports für die Ausführung von Instanzen höchstwahrscheinlich nicht im Voraus kennen werden. Daher verwenden wir einen fiktiven Namen als Platzhalter, und das Framework ersetzt die tatsächlichen Informationen, wenn es eine laufende Instanz auswählt.
Als Nächstes erstellen wir eine Konfigurationsklasse, die zum Instanziieren unserer Dienstinstanzversorgung verwendet wird. Beachten Sie, dass wir denselben Alias wie zuvor verwenden:
Wir können jetzt die echte Client-Anwendung erstellen. Lassen Sie uns 10 Abfragen an den Beispielserver senden, indem wir die WebClient-Bean von früher verwenden:
Wir können aus der Ausgabe ersehen, dass wir die Last zwischen zwei separaten Instanzen ausgleichen:
Lastenausgleich in Microservices
Die Microservice-Architektur wird von mehreren Unternehmen wie Netflix und Amazon verwendet, um Geschäftsanwendungen als eine Reihe von lose verbundenen Diensten zu entwickeln. Hyperscale und Continuous Delivery für komplizierte Anwendungen sind nur zwei der Gründe für den Wechsel zu dieser verteilten, lose verbundenen Architektur.
Die Teams dieser Unternehmen haben Agile- und DevOps-Strategien implementiert, um Apps schneller und mit einer geringeren Fehlerrate als mit herkömmlichen Methoden zu erstellen. Sie müssen jedoch ein Gleichgewicht zwischen der Komplexität der verteilten Architektur und den Anforderungen, Skalierungsanforderungen und Markteinführungsbeschränkungen der Anwendung finden.
Seit so vielen Jahren sind Application Delivery Controller (ADCs) entscheidend für die Erfüllung der Service-Level-Anforderungen für Unternehmensanwendungen, die vor Ort oder in der Cloud gehostet werden. Ein Client, der sich mit einer auf Microservices basierenden Anwendung beschäftigt, muss nichts über die Instanzen wissen, die diese bereitstellen, um den Client und die Microservices unabhängig voneinander zu erweitern.
Genau diese Entkopplung bietet ein Reverse Proxy oder ein Load Balancer. Auch hier ist Load Balancing die Lösung, um sicherzustellen, dass Microservices Nachfrage, Sicherheit und Verfügbarkeit bewältigen können.
Wenn Sie den traditionellen Nord-Süd-Lastenausgleich zwischen Client- und Microservice-basierten Anwendungen mit der Ost-West-Bereitstellung für horizontale Skalierbarkeit kombinieren, erhalten Sie einen erheblichen Schub. Ziel ist es, die sichere und regulierte Umgebung aufrechtzuerhalten, die von der IT benötigt wird, ohne die Agilität der Entwicklung zu opfern oder DevOps-Automatisierung Anforderungen.
Benefits
Load Balancing bietet verschiedene Vorteile, indem es die Ressourcenauslastung, Datenbereitstellung und Antwortzeit für stark frequentierte Websites und Apps sowie für Datenbanken verbessert, die eine große Anzahl von Abfragen erhalten. Load Balancing stellt sicher, dass Benutzeranforderungen in Szenarien mit hohem Datenverkehr schnell und korrekt erfüllt werden.
Sie ersparen den Benutzern den Ärger mit trägen Programmen und Ressourcen. Load Balancing trägt auch dazu bei, Ausfallzeiten zu vermeiden und die Sicherheit zu vereinfachen, wodurch das Risiko von Produktivitäts- und Ertragsverlusten für Ihr Unternehmen gesenkt wird.
- Load Balancing bietet die Flexibilität, Server je nach Bedarf hinzuzufügen und zu entfernen, zusätzlich zur Verwaltung des Datenverkehrs für optimale Effizienz. Da der Datenverkehr während der Wartung auf andere Server umgeleitet wird, ist es auch möglich, die Serverwartung durchzuführen, ohne die Benutzer zu stören.
- Load Balancing bietet integrierte Redundanz, indem der Datenverkehr auf eine Reihe von Servern aufgeteilt wird. Sie können die Last sofort auf andere Server umleiten, wenn einer ausfällt, und so die Auswirkungen auf die Benutzer minimieren.
- Wenn die Nutzung einer Anwendung oder Website zunimmt, kann der erhöhte Datenverkehr die Leistung beeinträchtigen, wenn er nicht effektiv gehandhabt wird. Mit Load Balancing können Sie je nach Bedarf einen realen oder virtuellen Server hinzufügen, ohne den Dienst zu unterbrechen. Der Load Balancer erkennt neue Server, sobald sie online gehen, und bindet sie mühelos in den Betrieb ein. Diese Methode ist der Migration einer Website von einem überlasteten Server auf einen neuen vorzuziehen, was häufig mit Ausfallzeiten verbunden ist.
Zusammenfassung
Load Balancing ist eine kritische Komponente moderner, fehlertoleranter Systeme. Wir können einfach Apps erstellen, die Anfragen mithilfe verschiedener Load-Balancing-Ansätze an mehrere Dienstinstanzen verteilen. Unternehmen müssen komplizierte IT-Systeme unterstützen, um Anwendungen sicher bereitzustellen.
Die domänenübergreifende Konfiguration, Bereitstellung und Wartung von Microservices kann fehleranfällig, teuer und zeitaufwändig sein. Die IT sollte Best Practices und Technologien für Automatisierung, Transparenz, Analyse und Orchestrierung verwenden, die mit ihren agilen und DevOps-Prozessen kompatibel sind, um die Einrichtung und Wartung dieser Microservices zu vereinfachen.
Hinterlassen Sie uns einen Kommentar