Ressourcenintensive Workloads per Loadbalancing auf mehrere Server zu verteilen, sichert heute in zahlreichen IT-Infrastrukturen die Verfügbarkeit wichtiger Dienste für Kunden und Mitarbeiter. Doch mehr und mehr Applikationen wandern in die Cloud und es stellt sich die Frage, wie sich dort ein Lastenausgleich erreichen lässt. Unser Einkaufsführer zeigt, worauf zu achten ist und warum Cloud-Loadbalancer auch im lokalen Einsatz einen Mehrwert bieten können.
Viele Anwendungen werden heutzutage direkt auf einer Cloudplattform entwickelt oder dorthin migriert, um sie skalierbarer oder ausfallsicherer zu machen. Dabei gilt es, die auftretenden Arbeitslasten so auf die Ressourcen zu verteilen, dass Server und Clouddienste optimal ausgelastet sind. Diese Aufgabe übernimmt ein Loadbalancer. Er ist immer dann nötig, wenn eine Applikation gleichzeitig mehr Anfragen erhält oder mehr Inhalte ausliefern muss, als ein einzelner Server zu leisten imstande ist. Sobald mehrere Server im Einsatz sind, fungiert der Loadbalancer als Gateway für die Applikation, nimmt die Anfragen der Clients entgegen und verteilt sie dann an die einzelnen Rechner der Serverfarm. Die Ergebnisse landen dann wiederum über den Loadbalancer beim Client.
Einsatzzwecke eines Loadbalancer
Hauptziel des Loadbalancings ist, die Menge der eingehenden Anfragen so auf die vorhandenen Server zu verteilen, dass einzelne nicht überlastet werden und dem Nutzer möglichst kurze Wartezeiten entstehen. Um eine angemessene Lastverteilung zu garantieren, sind Informationen zur Applikation sowie über die Auslastung der einzelnen Server im Pool nötig.
Daneben gilt es, die Verfügbarkeit des Gesamtsystems zu erhöhen, indem der Loadbalancer regelmäßig die einzelnen Server im Pool auf korrekte Funktion testet (Health Checks). Antwortet ein Server oder die auf ihm installierte Anwendung nicht oder fehlerhaft, so werden diese als defekt markiert und aus der Lastverteilung ausgeschlossen. Dadurch steht zwar nur noch eine geringere Gesamtkapazität zur Verfügung, dafür kann aber das Gesamtsystem trotz defekter Komponenten weiter funktionieren. Dazu muss auch der Loadbalancer selbst hochverfügbar sein.
Viele Anwendungen werden heutzutage direkt auf einer Cloudplattform entwickelt oder dorthin migriert, um sie skalierbarer oder ausfallsicherer zu machen. Dabei gilt es, die auftretenden Arbeitslasten so auf die Ressourcen zu verteilen, dass Server und Clouddienste optimal ausgelastet sind. Diese Aufgabe übernimmt ein Loadbalancer. Er ist immer dann nötig, wenn eine Applikation gleichzeitig mehr Anfragen erhält oder mehr Inhalte ausliefern muss, als ein einzelner Server zu leisten imstande ist. Sobald mehrere Server im Einsatz sind, fungiert der Loadbalancer als Gateway für die Applikation, nimmt die Anfragen der Clients entgegen und verteilt sie dann an die einzelnen Rechner der Serverfarm. Die Ergebnisse landen dann wiederum über den Loadbalancer beim Client.
Einsatzzwecke eines Loadbalancer
Hauptziel des Loadbalancings ist, die Menge der eingehenden Anfragen so auf die vorhandenen Server zu verteilen, dass einzelne nicht überlastet werden und dem Nutzer möglichst kurze Wartezeiten entstehen. Um eine angemessene Lastverteilung zu garantieren, sind Informationen zur Applikation sowie über die Auslastung der einzelnen Server im Pool nötig.
Daneben gilt es, die Verfügbarkeit des Gesamtsystems zu erhöhen, indem der Loadbalancer regelmäßig die einzelnen Server im Pool auf korrekte Funktion testet (Health Checks). Antwortet ein Server oder die auf ihm installierte Anwendung nicht oder fehlerhaft, so werden diese als defekt markiert und aus der Lastverteilung ausgeschlossen. Dadurch steht zwar nur noch eine geringere Gesamtkapazität zur Verfügung, dafür kann aber das Gesamtsystem trotz defekter Komponenten weiter funktionieren. Dazu muss auch der Loadbalancer selbst hochverfügbar sein.
Ein weiterer Aspekt ist die Absicherung interner IT-Ressourcen. So bieten Loadbalancer zum Teil eigene Sicherheitsfunktionen an oder werden mit Firewalls oder Web Application Firewalls (WAFs) kombiniert. Manche Produkte ermöglichen auch, Benutzer zu authentifizieren. Davon profitieren insbesondere interne Webapplikationen in Unternehmen. Eine Voraussetzung dafür ist aber der verschlüsselte Datenaustausch mit den Clients und die Unterstützung von HTTPS/TLS. Als kritische IT-Komponente sollte ein Loadbalancer das IT-Management mit operativen Metriken unterstützen, etwa die Anzahl der Anfragen pro Sekunde erfassen oder die eingehenden Anfragen protokollieren.
Ebenen des Lastausgleichs
Die Ansätze einer Lastverteilung unterscheiden sich danach, wo sie im OSI-Referenzmodell platziert sind. Davon hängt ab, welche Funktionen sie erfüllen können: Application Loadbalancer (ALB) arbeiten auf Layer 7 des OSI-Referenzmodells. Sie unterstützen HTTP(S)- und WebSockets-Protokolle. Dadurch können sie auch komplexere Routing-Entscheidungen treffen. So sind Layer-7-Loadbalancer in der Lage, Anfragen mit bestimmten Pfaden in URLs oder mit HTTP-Headern an einzelne Gruppen von Servern zu routen. Darauf aufbauend lassen sich etwa unterschiedliche Applikationen hinter einem Gateway platzieren, wobei dann verschiedene Serverpools die Anwendungen unabhängig voneinander bereitstellen können. Auch ist es möglich, alle Anfragen einer bestimmten Sitzung oder eines Nutzers immer an den gleichen Server weiterzuleiten.
Network Loadbalancer (NLB) arbeiten auf der Transportschicht, also Layer 4 des OSI-Referenzmodells. Auf einem niedrigeren OSI-Level angesiedelt als der ALB, kommunizieren sie nur auf der TCP- oder UDP-Protokollebene. Dadurch sind die Möglichkeiten von Health Checks deutlich eingeschränkt und ein Routing anhand von URLs oder Headern nicht möglich. Dafür können NLB nicht nur HTTP(S)-basierte Anwendungen bereitstellen, sondern alle Applikationen, die auf einem beliebigen TCP- oder UDP-basierten Protokoll basieren. Durch die geringere Komplexität können typische NLB eine höhere Last tragen und beantworten mehr gleichzeitige Anfragen mit geringerer Latenz als ein ALB.
Basieren Applikationen auf HTTP(S) – wie viele Mobil-, Kommunikations- oder IoT-Anwendungen – sind ALB die bessere Wahl. Sie bieten umfangreichere Funktionalitäten wie den Einsatz von Health Checks und erweiterte Routing-Funktionen, die HTTP-Header oder Query Strings zum Routing der Anfragen heranziehen. Beim Einsatz beliebiger TCP- oder UDP-basierter Protokolle kommt ein NLB zum Zuge, was einen reduzierten Funktionsumfang, aber auch einen höheren Durchsatz bedeutet. Aus diesem Grund werden bisweilen auch für HTTP-Anwendungen NLB eingesetzt.
Lastausgleich in der Cloud
In einem selbst betriebenen Rechenzentrum werden entweder Hardware-Appliances oder Software-Loadbalancer eingesetzt. Deren Redundanz erhöht die Ausfallsicherheit innerhalb eines Rechenzentrums. Solche Infrastrukturen sind aber eher statisch und lassen sich nicht ohne größeren Aufwand erweitern.
Applikationen werden daher in die Cloud migriert oder entwickelt, um sie dynamisch horizontal zu skalieren. Dies erfolgt durch Hinzufügen oder Stilllegen von Anwendungsservern (Auto Scaling). Neben geringeren Kosten sind hier Verfügbarkeit und Sicherheit maßgebend. Viele Cloud-Service-Provider (CSPs) bieten daher Loadbalancing-Dienste an.
Der schematische Aufbau eines Application Loadbalancer in einer Cloudinfrastruktur (Quelle: AWS).
Einsatz von Software-Appliances aus dem Marktplatz
Viele Cloudanbieter betreiben Marktplätze, über die sich Dienste für den Lastausgleich als Software-Appliances beziehen lassen. Je nach Anbieter kann auch nutzungs- oder zumindest zeitbasiert abgerechnet werden, sodass dies günstiger als der Einsatz von Hardware ist. Gleichzeitig sind für einzelne Projekte, Entwicklungs- oder Testumgebungen die gleichen Werkzeuge wie im Produktivbetrieb verfügbar, ohne dass Investitionen in Hardware nötig sind. Dadurch lässt sich der Durchsatz der Lastverteiler flexibler anpassen.
Bietet ein Cloudanbieter mehrere Verfügbarkeitszonen in einer Region an, lässt sich die Ausfallsicherheit der Loadbalancer erhöhen, indem der IT-Verantwortliche mehrere Software-Appliances über verschiedene Verfügbarkeitszonen verteilt. Selbst wenn ein ganzes Rechenzentrum ausfällt, kann die Software-Appliance und damit auch die Anwendung weiter erreichbar bleiben. Legt ein Hardwaredefekt die Software-Appliance lahm, lässt sich dieser Defekt mit ihrem Neustart umgehen, wodurch die betroffene Appliance einfach auf eine neue Hardware umzieht.
Leider ist oft keine tiefgreifende Integration des Loadbalancings mit anderen Clouddiensten vorhanden. Daher ist es ähnlich umständlich, neue Webserver, die durch Autoscaling automatisch angelegt werden, im Loadbalancer zu registrieren und an die Monitoring- oder Security-Dienste der Cloudplattform anzubinden.
Auch eine Skalierung des Loadbalancers selbst, um höhere Anfrageraten abdecken zu können, ist nur mit Einschränkungen möglich und mit hohen Kosten verbunden. Denn hier kommen oft die gleichen statischen Lizenzmodelle zum Einsatz wie bei On-Premises-Applikationen. Deshalb arbeiten solche Software-Appliances eher wie klassische Loadbalancer als Paar, das die Lastverteilung und weitere Traffic-Management-Funktionen für verschiedene Anwendungen übernimmt und das ein zentrales Team verwaltet.
Software-Loadbalancer in Eigenregie betreiben
Neben diesen vorgefertigten Appliances lassen sich auch selbstverwaltete Software-Loadbalancer in virtuellen Maschinen in der Cloud betreiben. Dabei übernimmt der Cloudnutzer die Installation und das weitere Management der Software. Meist kommt in diesem Fall Open-Source-Software zum Einsatz. Bei vorhandener Expertise mit einem bestimmten Software-
Loadbalancer bietet dieser Ansatz zahlreiche Möglichkeiten. Allerdings ist der operative Aufwand ähnlich hoch wie beim Betrieb im eigenen Rechenzentrum. Der Aufwand, Auto-Scaling-Dienste für die Registrierung neuer Server zu integrieren, ist nicht zu unterschätzen.
Nicht zuletzt muss der Nutzer die initiale Lastverteilung der eingehenden Anfragen über die Software-Loadbalancer meist per DNS-Lastenausgleich sicherstellen. Für die Implementierung in der Cloud – anstatt im eigenen Rechenzentrum – spricht der kostengünstigere Serverbetrieb und die automatische Skalierbarkeit der gesamten Infrastruktur. Mit einer gewissen Investition in die Automatisierung lassen sich auch größere Mengen an Instanzen für die Lastenverteilung automatisch anlegen und weitgehend verwalten. Wenn keine hohen Lizenzkosten für die Software anfallen und der Automatisierungsgrad hoch genug ist, kommt diese Lösung für einen dezentralen Betrieb infrage: Hier sind dann verschiedene Teams in der Lage, die von ihren Services benötigten Instanzen der Loadbalancer selbst automatisiert hochzufahren. Letztendlich steht und fällt dieser Ansatz jedoch damit, wie viel in die nötige Automatisierung dieser Software-Loadbalancer-Instanzen investiert wird.
Loadbalancing als Dienst einsetzen
Für die meisten Anwender sind Loadbalancing-Dienste, die ein Cloudprovider betreibt, die bessere Wahl. Nachdem die Dienste konfiguriert sind, erfolgt der Betrieb automatisiert. Loadbalancer-"as-a-Service" lassen sich mit einem API-Aufruf oder über ein Infrastructure-as-Code-Tool wie Terraform oder AWS CloudFormation automatisch anlegen. Nachdem nutzungsbasiert abgerechnet wird, steht diese Option auch einzelnen Teams im Unternehmen zur Verfügung, die je nach ihrem Bedarf die Lastverteilung für ihre Anwendungen nutzen können. Die größten Vorteile dieser Dienste gegenüber den anderen Ansätzen ergeben sich durch die tiefe Integration mit anderen Clouddiensten wie automatischer Skalierung, Überwachung, Zugriff und Sicherheit. Zudem muss der Nutzer sich kaum noch mit dem Betrieb der Loadbalancer beschäftigen.
Die Dienste skalieren automatisch, ein Kapazitätsmanagement ist daher nicht nötig: Falls die Anwendung auch horizontal skaliert, können bei einer steigenden Anzahl von Anfragen die neuen
Anwendungsserver per Auto Scaling automatisch erzeugt und mit dem Loadbalancer registriert werden. Ein Dienst wie "Amazon Elastic Load Balancing" nutzt die vorhandene Infrastruktur optimal aus, ohne dass der IT-Verantwortliche eingreifen muss. Dabei werden die einzelnen Knoten für den Lastausgleich auf die gewünschten Verfügbarkeitszonen verteilt. Auf Netzwerk- und Hardwarefehler wird automatisch reagiert, ebenso wie auch Änderungen an Software und Betriebssystem vorgenommen werden. Falls der Dienst beim Anwendungsserver Fehler feststellt, greift er auf andere Systeme auch in anderen Zonen zu. Sind keine Ersatzserver verfügbar, so lassen sich per Auto Scaling neue virtuelle Maschinen für das Hosting der Anwendung erzeugen. Die Fähigkeit des Dienstes, auf eine Vielzahl von möglichen Fehlern selbst reagieren zu können, erhöht die Verfügbarkeit.
Daneben bieten Application-Loadbalancer-Dienste viele Funktionen, die bereits von Appliance-basierten Lastverteilern bekannt sind, beispielsweise:
- Steuerung des Routings basierend auf HTTP-Headern und URI-Parametern
- Zusammenfassung von verschiedenen Anwendungsserver-Gruppen, um Anfragen je nach Routing-Regeln an verschiedene Server, Container-Instanzen, AWS-Lambda-Funktionen in der Cloud oder auch an beliebige IP-Adressen im eigenen Rechenzentrum weiterzugeben
- Entlastung der Anwendungsserver, indem HTTPS-Verbindungen direkt vom Loadbalancer terminiert werden
- Authentifizierung von Benutzern
- Konfigurierbare Health Checks
- Unterstützung von Legacy-Anwendungen per Sticky Sessions
- Unterstützung verschiedener Protokolle wie HTTP/1.1, HTTP/2, WebSockets, IPv6 und IPv4
- Durchführen von HTTP Redirects, Ausliefern von statischen Fallback-Seiten
Fortgeschrittene Teams bauen ihre gesamte Infrastruktur als Code auf und erzeugen beziehungsweise ändern diese bei jedem Ausrollen einer Anwendung gegebenenfalls neu. So können Entwickler auch verschiedene Konfigurationsoptionen testen. Sie definieren dabei, welche Mitarbeiter im Team wie auf die Loadbalancer zugreifen dürfen.
Die Sicherheit darf dabei nicht zu kurz kommen. Durch die Integration in die Sicherheitsmechanismen der Virtual Private Cloud (VPC) wird nicht nur der Loadbalancer mit einer Firewall umgeben. Es lässt sich außerdem genau steuern, auf welche Gruppen von virtuellen Servern oder Containern ein Loadbalancer zugreifen darf, auch wenn deren genaue Zahl und IP-Adressen noch nicht genau bekannt sind. Für weiteren Schutz und Layer-7-Firewall-Schutzfunktionen kann der ALB hinter einem Dienst wie der Web Application Firewall (AWS WAF) genutzt werden.
Fazit
Loadbalancing erhöht als wesentlicher Bestandteil von Web- und Mobilapplikationen die Ausfallsicherheit von Anwendungen und den Durchsatz an Anfragen. Dadurch kommt ihm eine hohe Bedeutung zu. Da Fehler im Lastverteiler große Konsequenzen haben können, ist es entscheidend, dass auch die eingesetzten Produkte selbst skalierbar, zuverlässig und möglichst wartungsfrei arbeiten. Zugleich sollten IT-Abteilungen in Unternehmen nicht unnötig mit Aufgaben wie dem Betrieb eines oder mehrerer Loadbalancer belastet werden. Die Automatisierung der anfallenden Aufgaben in der Cloud schafft hier Abhilfe. Aus diesem Grund empfiehlt es sich, die verschiedenen Möglichkeiten für eine Lastverteilung in der Cloud zu prüfen.
(jp)
Michael Hanisch ist Head of Technology bei AWS in Deutschland.