Application Load Balancer (ALB) bieten eine intelligente Möglichkeit, die Skalierbarkeit, Leistungsfähigkeit und Verfügbarkeit Ihrer Anwendungen zu gewährleisten. Sie verhindern eine Überlastung Ihrer Server und stellen sicher, dass diese auch bei starken Lastspitzen reibungslos funktionieren.
In der Sicherheitsarchitektur moderner IT-Infrastrukturen sind Load Balancer unverzichtbar. Sie garantieren, dass Ihre Applikation den anfallenden Datenverkehr effizient verarbeiten kann. Dieser Artikel beleuchtet den Application Load Balancer auf AWS detailliert.
Was ist ein Application Load Balancer?
Ein Application Load Balancer (ALB) ist ein Elastic Load Balancer (ELB) auf AWS und agiert auf der Anwendungsschicht (Schicht 7) des OSI-Modells.
ALBs bestehen aus drei Kernkomponenten: Listener, Load Balancer selbst und die Zielgruppen. Bei einer eingehenden Anfrage prüft der Load Balancer die definierten Listener-Regeln gemäß ihrer Priorität. Die Regel mit der höchsten Priorität, die zur Anfrage passt, wird ausgeführt. Anschließend wählt der Load Balancer ein Ziel aus der Zielgruppe aus, die dieser Regel zugeordnet ist.
Sie können Regeln konfigurieren, um Anfragen basierend auf dem Inhalt des Anwendungsdatenverkehrs an verschiedene Zielgruppen weiterzuleiten. Der standardmäßig verwendete Routing-Algorithmus ist Round Robin, Sie haben jedoch die Möglichkeit, auch eine Routing-Technik zu wählen, die sich nach der Anzahl der ausstehenden Anfragen richtet.
Wenn sich Ihre Anforderungen ändern, können Sie Ziele Ihrem Load Balancer hinzufügen oder daraus entfernen, ohne den Gesamtablauf der Anfragen an Ihre Anwendung zu beeinträchtigen.
Durch Elastic Load Balancing (ELB) ist Ihr Load Balancer in der Lage, sich an die schwankende Traffic-Last Ihrer Anwendung anzupassen. Alle Elastic Load Balancer skalieren automatisch, um auch umfangreiche Workloads zu bewältigen.
Sie können zudem Integritätsprüfungen definieren, um den Status Ihrer Anwendung auf den registrierten Zielen zu überwachen. Der Load Balancer leitet Anfragen dann ausschließlich an die fehlerfreien Ziele weiter.
Funktionsumfang der Application Load Balancer
Load Balancing auf Schicht 7
ALBs erlauben die Verteilung von HTTP/HTTPS- und gRPC-Datenverkehr auf Amazon EC2-Instanzen, ECS-Container, AWS Lambda-Funktionen, Server von Drittanbietern und auch lokale Server basierend auf den Attributen der Anfrage.
Sicherheitsmerkmale
ALB bietet einen Desynchronisationsschutz basierend auf der HTTP-Desync-Guardian-Bibliothek. Diese Funktion schützt die Anwendungen Ihrer Kunden vor HTTP-Schwachstellen, die durch Desynchronisation entstehen können, ohne die Verfügbarkeit oder Latenz zu beeinträchtigen. Sie können auch Ihre Toleranz für verdächtige Anfragen an die Architektur Ihrer Anwendung anpassen.
Unterstützung für Outposts
AWS Outposts bietet eine vollständig verwaltete Lösung, mit der Sie AWS-Infrastruktur, -Services und -Tools in Ihr Rechenzentrum, Ihren Co-Location-Bereich oder jede andere lokale Einrichtung bringen können, um ein einheitliches hybrides Erlebnis zu schaffen. Mit AWS Outposts können Sie auch Application Load Balancer nutzen. ALBs können auf den unterstützten Instanztypen bereitgestellt werden und skalieren automatisch gemäß der Rack-Kapazität, um unterschiedliche Anwendungs-Workloads zu bewältigen, ohne dass ein manueller Eingriff notwendig ist.
Darüber hinaus können Sie die Konfiguration von ALBs so einstellen, dass Benachrichtigungen/Warnungen versendet werden, die Ihnen bei der Anpassung Ihrer Lastausgleichskapazität helfen. Die Bereitstellung und Verwaltung von ALBs auf Outposts erfolgt über dieselbe AWS-Konsole, CLI und APIs, die Sie auch für ALBs in AWS-Regionen nutzen.
HTTPS-Terminierung
Ein Application Load Balancer (ALB) unterstützt die HTTPS-Terminierung zwischen Client und Load Balancer. Das bedeutet, dass die Verbindung zwischen dem Client und ALB HTTPS-verschlüsselt ist, die Verbindung zwischen ALB und den Anwendungsservern (EC2, ECS usw.) jedoch als HTTP-Verbindung abgewickelt wird. Da die Verbindung zwischen ALB und den Anwendungsservern innerhalb Ihrer VPC erfolgt, ist sie standardmäßig vor externen Zugriffen geschützt. ALBs können SSL-Zertifikate mit dem AWS Certificate Manager verwalten und vordefinierte Sicherheitsrichtlinien sowie AWS Identity and Access Management (IAM) nutzen.
HTTP/2- und gRPC-Unterstützung
HTTP/2 ist eine neuere HTTP-Version, die es ermöglicht, viele Anfragen über eine einzige Multiplex-Verbindung zu übertragen. Darüber hinaus werden SSL-Verbindungen zu Clients unterstützt und Header-Daten vor dem Versand im Binärformat komprimiert.
gRPC-Datenverkehr kann mittels Application Load Balancer geroutet und per Load Balancing zwischen Microservices oder gRPC-fähigen Clients und Diensten verteilt werden. Das erlaubt die nahtlose Integration von gRPC-Verkehrsmanagement in Architekturen, ohne dass Änderungen an der Infrastruktur auf Client- oder Serverseite notwendig sind.
gRPC ist das Protokoll der Wahl für die Kommunikation zwischen Diensten in Microservice-Architekturen und nutzt HTTP/2 für den Datentransport. Zu seinen Vorteilen zählen die effiziente binäre Serialisierung, die Unterstützung vieler verschiedener Sprachen und die inhärenten Vorteile von HTTP/2, wie etwa die Reduzierung des Netzwerkbedarfs, Komprimierung und bidirektionales Streaming. All das macht gRPC den älteren Protokollen wie REST überlegen.
Sticky Sessions
Sticky Sessions sorgen dafür, dass Anfragen von demselben Client mittels Cookies an dasselbe Ziel geleitet werden. Sticky Sessions lassen sich in den ALB-Attributen einfach aktivieren. ALBs unterstützen sowohl dauerbasierte als auch anwendungsbasierte Cookies.
Die Dauer der Sticky Sessions ist ausschlaggebend. Sie können eine Kombination aus dauerbasierter, anwendungsbasierter und keiner Session-Klebrigkeit für verschiedene Zielgruppen definieren. Die Konfiguration der Sticky Sessions erfolgt auf Zielgruppenebene.
Native IPv6-Unterstützung
Application Load Balancer unterstützen das Internet Protocol Version 6 (IPv6) nativ innerhalb einer VPC. Clients können somit über IPv4 oder IPv6 eine Verbindung zum Load Balancer aufbauen.
Anforderungs-Tracing
Bei jeder Anfrage, die den Load Balancer erreicht, fügt der ALB einen neuen benutzerdefinierten HTTP-Header „X-Amzn-Trace-Id“ hinzu. Mit diesem Header können Sie den Fortschritt einer Anfrage durch verschiedene AWS-Services verfolgen, indem Sie die eindeutige ID verwenden. Anforderungs-Tracing ist nützlich, um Leistungsengpässe in Ihrer Anwendungsarchitektur zu finden.
Weiterleitungen
Ein ALB kann eingehende Anfragen von einer URL zu einer anderen umleiten. Sie können beispielsweise HTTP-Anfragen auf HTTPS umleiten, um die Compliance-Vorgaben für sicheres Surfen zu erfüllen und gleichzeitig das Suchmaschinenranking und den SSL/TLS-Score Ihrer Webseite zu verbessern. Umleitungen können Benutzer auch von einer älteren zu einer neueren Version einer Anwendung lenken.
Feste Antwort
ALBs können steuern, welche Client-Anfragen von Ihrer Anwendung bedient werden. Sie können auf eingehende Anfragen direkt vom Load Balancer mit HTTP-Fehlerantwortcodes und benutzerdefinierten Fehlermeldungen antworten, ohne die Anfrage an die Anwendung weiterzuleiten.
WebSockets-Unterstützung
Application Load Balancer unterstützen WebSockets. WebSockets ermöglichen dem Server, Echtzeitnachrichten an Endbenutzer zu senden, ohne dass diese eine Aktualisierung anfordern müssen. Das WebSockets-Protokoll ermöglicht bidirektionale Kommunikationskanäle zwischen Client und Server über eine TCP-Verbindung.
Server Name Indication (SNI)
SNI (Server Name Indication) ist eine TLS-Protokollerweiterung, bei der ein Client während des TLS-Handshakes den Hostnamen angibt, mit dem er eine Verbindung aufbauen möchte. Der Load Balancer kann mehrere Zertifikate über einen einzelnen sicheren Listener bereitstellen, wodurch mehrere sichere Websites mit nur einem sicheren Listener unterstützt werden können.
Mithilfe von SNI verwenden ALBs einen intelligenten Zertifikatsauswahlprozess, um den Hostnamen in der Anfrage mit dem passenden SSL-Zertifikat abzugleichen. Wenn mehrere Zertifikate zu einem Hostnamen passen, wählt der Load Balancer das optimale Zertifikat basierend auf verschiedenen Kriterien wie den Fähigkeiten des Clients.
IP-Adressen als Ziele
Indem Sie die IP-Adressen von Anwendungs-Backends als Ziele verwenden, können ALBs für den Lastausgleich von Anwendungen genutzt werden, die auf AWS, lokal oder bei anderen Cloud-Anbietern gehostet werden. Das ermöglicht Lastausgleich zu jeder IP-Adresse und Schnittstelle eines Anwendungs-Backends.
IP-Adressen können auch als Ziele für lokale Load-Balancing-Anwendungen (über Direct Connect oder VPN), Peering-VPCs und EC2-Classic (mit ClassicLink) verwendet werden. Sie können in die Cloud migrieren, die Cloud für Lastspitzen nutzen oder zwischen lokalen Ressourcen und AWS umschalten und dabei Lasten verteilen.
Lambda-Funktionen als Ziele
Dank der Unterstützung von Application Load Balancern für die Ausführung von Lambda-Funktionen für HTTP(S)-Anfragen können Benutzer über jeden HTTP-Client auf serverlose Anwendungen zugreifen. Sie können inhaltsbasierte Weiterleitungsregeln nutzen, um Anfragen an bestimmte Lambda-Funktionen weiterzuleiten, indem Sie Lambda-Funktionen als Load Balancer-Ziele registrieren.
Ein Application Load Balancer kann als Standard-HTTP-Endpunkt für Apps dienen, die Server und Serverless-Computing nutzen. Für die Entwicklung von Anwendungen können Sie Lambda-Funktionen nutzen, um eine komplette Website zu erstellen oder diese mit EC2-Instanzen, Containern und lokalen Servern kombinieren.
Inhaltsbasiertes Routing
Wenn Ihre Anwendung aus mehreren unabhängigen Diensten besteht, kann ein Application Load Balancer eine Anfrage basierend auf dem Inhalt der Anfrage, wie etwa dem Hostfeld, dem Pfad der URL, dem HTTP-Header, der HTTP-Methode, der Abfragezeichenfolge oder der Quell-IP-Adresse, an einen bestimmten Dienst weiterleiten.
Host-basiertes Routing: Mittels Host-Feld im HTTP-Header kann ein ALB eine Client-Anfrage von demselben Load Balancer an verschiedene Domains weiterleiten.
Pfad-basiertes Routing: Der URL-Pfad im HTTP-Header kann für die Weiterleitung einer Client-Anfrage verwendet werden.
HTTP-Header-basiertes Routing: Beliebige standardmäßige oder benutzerdefinierte HTTP-Header-Werte können zur Weiterleitung einer Client-Anforderung genutzt werden.
Methoden-basiertes HTTP-Routing: Beliebige Standard- oder benutzerdefinierte HTTP-Methoden können zur Weiterleitung einer Client-Anforderung verwendet werden.
Parameter-basiertes Routing für Abfragezeichenfolgen: Eine Client-Anfrage kann basierend auf der Abfragezeichenfolge oder den Parametern weitergeleitet werden.
CIDR-basiertes Routing der Quell-IP-Adresse: Eine Client-Anfrage kann basierend auf dem CIDR der Quell-IP-Adresse weitergeleitet werden.
Unterstützung containerisierter Anwendungen
Application Load Balancer verbessern die Unterstützung von Containern, indem die Last auf mehrere Ports auf einer einzigen Amazon EC2-Instanz verteilt wird (dynamische Portzuweisung). In der ECS-Aufgabendefinition können Sie einen dynamischen Port angeben, der dem Container einen ungenutzten Port zuweist, wenn er auf der EC2-Instanz gestartet wird. Dieser Port wird vom ECS-Scheduler genutzt, um die Aufgabe dem Load Balancer hinzuzufügen.
ALB mit Web Application Firewall
Mit AWS WAF können Sie Ihre Web-Apps auf Ihren Application Load Balancern schützen. AWS WAF schützt Ihre Webanwendungen vor gängigen Web-Exploits, die zu Anwendungsausfällen, Sicherheitslücken oder einem übermäßigen Ressourcenverbrauch führen können.
Langsamer Startmodus mit Load-Balancing-Algorithmus
Application Load Balancer (ALB) unterstützen den Round-Robin-Algorithmus für das Load Balancing. Der Round-Robin-Mechanismus in ALB enthält zudem einen verzögerten Startmodus, der es Ihnen erlaubt, neue Ziele hinzuzufügen, ohne diese gleich mit Anfragen zu überlasten. Die Option für den langsamen Start ermöglicht es den Zielen, sich aufzuwärmen, bevor sie ihren fairen Anteil an Anfragen während der Anlaufphase übernehmen. Der langsame Start eignet sich besonders gut für Apps, die auf Caching angewiesen sind und eine Aufwärmphase benötigen, bevor sie optimal auf Anfragen reagieren können.
Benutzerauthentifizierung
Sie können Application Load Balancer nutzen, um den Authentifizierungsmechanismus Ihrer Apps auszulagern. Wenn Benutzer auf Cloud-Anwendungen zugreifen, werden sie vom ALB authentifiziert. Dank der nahtlosen Integration von ALBs mit Amazon Cognito können sich Endbenutzer über Social-Identity-Provider wie Google, Facebook und Amazon sowie Unternehmens-Identity-Provider wie Microsoft Active Directory über SAML oder jeden OpenID Connect-kompatiblen Identitätsanbieter authentifizieren.
ALBs können auch Unternehmensbenutzer authentifizieren, indem sie sich direkt mit Ihrem Identitätsanbieter verbinden, sofern Sie eine maßgeschneiderte IdP-Lösung verwenden, die OpenID Connect unterstützt.
Vorteile des Wechsels von einem Classic Load Balancer (CLB) zu einem Application Load Balancer (ALB)
Klassische Load Balancer waren die ersten Load Balancer von AWS. Obwohl sie leistungsstark sind, werden sie mit der Einführung von ALBs und NLBs zunehmend von diesen ersetzt. Viele Funktionen, die nun von neueren Load Balancern unterstützt werden, sind in Classic Load Balancern nicht verfügbar.
- Unterstützung für Pfadbedingungen: Sie können Ihren Listener mit Regeln konfigurieren, die Anfragen basierend auf der URL in der Anfrage weiterleiten. So können Sie Ihre Anwendung in kleinere Dienste (Microservices) aufteilen und Anfragen basierend auf dem Inhalt der URL an den passenden Dienst weiterleiten.
- Unterstützung für Hostbedingungen: Sie können Ihren Listener mit Regeln konfigurieren, die Anfragen basierend auf dem Host-Feld im HTTP-Header weiterleiten. So können Sie Anfragen mit einem einzigen Load Balancer an viele Domains weiterleiten.
- Routing wird basierend auf Anforderungsinformationen wie HTTP-Header-Bedingungen und -Methoden, Abfrageparametern und Quell-IP-Adressen unterstützt.
- Sie können Routing-Anfragen an verschiedene Anwendungen auf einem einzigen EC2-Server senden.
- Eine Instanz oder IP-Adresse kann mit zahlreichen Zielgruppen auf einem separaten Port registriert werden.
- Sie können Anfragen von einer URL zu einer anderen umleiten.
- Die Rückgabe einer benutzerdefinierten HTTP-Antwort ist möglich.
- Unterstützung für die Registrierung von Zielen für den Load Balancer per IP-Adresse, einschließlich Zielen außerhalb der VPC.
- Lambda-Funktionen können als Ziele registriert werden.
- Vor der Weiterleitung von Anfragen kann der Load Balancer Benutzer Ihrer Anwendungen anhand ihrer Unternehmens- oder Social-Media-Identitäten authentifizieren.
- Containerisierte Apps werden unterstützt. Beim Planen einer Aufgabe kann Amazon Elastic Container Service (Amazon ECS) einen freien Port auswählen und diesen nutzen, um die Aufgabe bei einer Zielgruppe zu registrieren. So holen Sie das Beste aus Ihren Clustern heraus.
- Da Zustandsprüfungen auf Zielgruppenebene definiert und CloudWatch-Metriken auf Zielgruppenebene veröffentlicht werden, gibt es eine separate Überwachung des Zustands jedes Dienstes. Wenn Sie eine Zielgruppe zu einer Auto Scaling-Gruppe hinzufügen, können Sie jeden Dienst basierend auf der Nachfrage dynamisch skalieren.
- Zusätzliche Informationen werden in komprimierter Form in Zugriffsprotokollen aufgezeichnet.
Zusammenfassung
Application Load Balancer sind Load Balancer der neuesten Generation, die elastisch und skalierbar sind und viele Funktionen für die Anforderungen von Webanwendungen bieten. Eventuell müssen Sie Classic Load Balancer einsetzen, wenn Sie Legacy-Anwendungen haben, die im EC2 Classic-Netzwerk gehostet werden, doch für alle neueren Workloads stellen ALBs eine ausgezeichnete Wahl dar.