In einem Supermarkt haben mehrere Kassen geöffnet und es kaufen sehr viele Kunden ein. Normalerweise verteilen sich die Kunden von selbst an die verschiedenen Kassen, um schneller bezahlen zu können. In der Cloud hingegen passiert das nicht von selbst, sodass ein Load Balancer benötigt wird.
Ein Load Balancer verteilt den eingehenden Datenverkehr auf verschiedene Ziele z.B. Instanzen oder Container, damit keine der Ressourcen überlastet ist. Wenn eine Ressource nicht mehr ansprechbar ist, dann werden die Anfragen an die anderen Ziele weitergeleitet. Dadurch kann Hochverfügbarkeit gewährleistet werden.
Ein Elastic Load Balancing (ELB) verteilt den eingehenden Datenverkehr auf mehrere Ziele wie beispielsweise Amazon EC2-Instanzen, Container oder IP-Adressen, welche in verschiedenen Availability Zones in einer Region liegen können. Der Load Balancer überwacht den Zustand seiner Ziele und leitet den Verkehr nur an die gesunden weiter. Ziele werden als gesund betrachtet, wenn sie beispielsweise binnen eines definierten Zeitraums z.B. 10 Sekunden durch ein bestimmtes Protokoll antworten. Wenn der Datenverkehr sich ändert, kann auch der Load Balancer seine Kapazität automatisch anpassen. Durch das Verteilen über verschiedene Ziele in verschiedenen Availability Zones wird die Verfügbarkeit der Anwendungen erhöht.
Es gibt verschiedene Arten von Load Balancern verschiedene Arten von Load Balancern: Application Load Balancers (ALBs), Network Load Balancers (NLBs), and Classic Load Balancers (CLBs). ALBs nutzen HTTP/HTTPS-Verkehr bzw. Schicht 7 des OSI-Modells. NLBs und CLBs nutzen beide TCP-Verkehr oder Schicht 4 des OSI Modells. Ein ALB unterstützt pfadbasiertes Routing und kann Anfragen an einen oder mehrere Ports von Containern weiterleiten. Im Folgenden wird ein ALB genutzt, um die Anfragen vom Frontend an die Frontend-Container weiterzuleiten, die beide in unterschiedlichen Subnetzen liegen.
Nicht nur Load Balancer helfen die Anwendung hochverfügbar zu machen, sondern auch Datenbanken können hochverfügbar werden. Eine Multi-AZ-Bereitstellung kann dabei helfen in einer Region hochverfügbar zu sein. Multi-AZ bedeutet, dass mindestens eine weitere Standby-Instance der Amazon RDS Datenbank in einer anderen Availability Zone zur Verfügung steht. Die Standby-Instance wird synchron zur primären Datenbankinstanz repliziert. Bei einem Ausfall der primären Instanz, wird ein Failover automatisch initialisiert, wodurch für eine minimale Unterbrechung der Anwendung gesorgt wird.
Aufgabe:
Erstelle einen Application Load Balancer todoApp
. Nutze die Workshop-VPC und die öffentlichen Subnetze A und B. Wähle nur die Workshop-ALB-SG
als einzige Security Group.
Im Abschnitt Listeners and routing
workshop-backend
eingeben. Diese Target Group wird den eingehenden Datenverkehr an das ToDo-API backend weiterleiten.5000
eingeben um den Ziel Port des Backend Containers zu erreichen.Im Dialogfenster der Load Balancer Konfiguration:
workshop-backend
target group auswählen. Eventuell musst du zuerst die Liste der Target Groups mit dem Kreispfeil, rechts neben der Liste, aktualisieren.Da aktuell noch keine Container Instanzen existieren, wird der Load Balancer noch nicht funktionieren. Die Registrierung sowie die De-Registrierung von Container Instanzen wird später der Container Service Amazon ECS automatisch vornehmen.
workshop-frontend
eingeben.Workshop-VPC
auswählen.todoApp
Load Balancer anklicken.workshop-frontend
.Nun fügen wir eine weitere Regel hinzu, um den Verkehr zum Backend zu leiten.
backend-routing
und klicke auf Next./api/*
sein.workshop-backend
auswählen.Mit dieser Konfiguration leitet der Load Balancer nun alle Anfragen an die Target Group workshop-frontend
weiter. Hier läuft später der Frontend Container Service. Beim Einfügen, ändern oder Löschen von Einträgen in der Beispielanwendung werden die Anfragen über den Pfad /api/
an den Backend Container weitergeleitet. Dieser wiederum leitet die Daten an die Amazon RDS Datenbank weiter.
workshop-cluster
.backend-service
eingeben.2
eingeben.Workshop-VPC
ausgewählt.Workshop-PublicA
und Workshop-PublicB
auswählen.Workshop-ECS-Backend-SG
auswählen.todoApp
.80:HTTP
Listener auswählen.workshop-backend
target group im Dropdown auswählen.workshop-cluster
.frontend-service
eingeben.2
eingeben.Workshop-VPC
ausgewählt.Workshop-PublicA
und Workshop-PublicB
auswählen.Workshop-ECS-Frontend-SG
auswählen.todoApp
.80:HTTP
Listener auswählen.workshop-frontend
target group im Dropdown auswählen.Aufgabe:
Teste den Load Balancer und deine Webseite, indem du den DNS Namen des ALBs todoApp
kopierst und in einem neuen Browser Tab öffnest.
Teste nun die Funktionalitäten deiner ToDo-Anwendung:
/api/v1/todos
hinzu. Wenn du diesen öffnest, sollte die Liste leer sein.[]
/api/v1/todos
hinzu. Rufe nun den neuen Link in einem Tab auf. Nun solltest du eine Übersicht ähnlich wie im Bild sehen.completed
als Eigenschaft bei deinen erledigten Aufgaben von false auf true
geändert hat.Die Amazon RDS Instanz hat bereits im Hintergrund eine passive, weitere Instanz, auf die Daten automatisch repliziert werden. Mit dem Multi-AZ Deployment läuft die Datenbank nach einem kurzen Unterbruch in einer anderen Availability Zone weiter, wenn es ein Failover gibt. Der Datenbank Endpunkt für die Applikation (Amazon RDS Endpoint) bleibt dabei identisch. Somit muss die Anwendung nicht umkonfiguriert werden.
workshop-db
öffnen.Herzlichen Glückwunsch! Deine ToDo-App funktioniert nun und du hast ihre Funktionen getestet. Sie ist hochverfügbar und die Front- und Backend Container sind redundant über zwei Availability Zones (AZs) verteilt. Zusätzlich ist die Datenbank ebenfalls redundant konfiguriert (Multi-AZ). Damit wir einen Überblick bekommen, was in unserer Anwendung vor sich geht und wie wir sie sicherer machen können, werden die Themen Monitoring und Backup in den letzten beiden Kapiteln behandelt.