Dienste koordinieren und Zustand verwalten

Anwendungen auf AWS entwickeln

Ricardo Sueiras

Principal Technologist

Service-Koordination

 

service coordination

  • Mehrere Dienste arbeiten zusammen, um einen Workflow abzuschließen.
  • Sie brauchen eine Kooperationsstrategie.
  • Zwei Ansätze: Orchestrierung und Choreographie.
Anwendungen auf AWS entwickeln

Orchestrierung

 

orchestration pattern

  • Ein zentraler Orchestrator koordiniert den Workflow.
  • Er steuert die Reihenfolge und entscheidet, welcher Dienst als Nächstes läuft.
  • Nützlich für Retries, Bedingungen und Fehlerbehandlung.
  • Auf AWS: mit Step Functions über Lambda, ECS, DynamoDB.
Anwendungen auf AWS entwickeln

Orchestrierung

 

orchestration pattern

  • Logik des Workflows an einem Ort – Debugging und Monitoring sind einfacher.
  • Trade-off: führt eine zentrale Abhängigkeit ein.
Anwendungen auf AWS entwickeln

Choreographie

  • Kein zentraler Controller.
  • Dienste reagieren unabhängig auf Ereignisse.
  • Jeder Dienst hört auf relevante Events und erledigt seine Aufgabe.
  • Kein Dienst muss den gesamten Workflow kennen.
  • Verbessert lose Kopplung und Skalierbarkeit.

 

choreography

Anwendungen auf AWS entwickeln

Choreographie

  • Auf AWS: EventBridge, SNS, SQS.
  • Hoch skalierbar.
  • Trade-off: wird mit wachsendem Workflow schwerer zu verstehen und zu debuggen.

 

choreography

Anwendungen auf AWS entwickeln

Ereignisgesteuerte Architektur

  • Dienste kommunizieren durch Erzeugen und Konsumieren von Events.
  • Fördert lose Kopplung zwischen Diensten.
  • Fördert hohe Skalierbarkeit.
  • Ermöglicht parallele Verarbeitung von Events.
  • Neue Dienste können abonnieren, ohne bestehende zu ändern.

 

event-driven-arch

Anwendungen auf AWS entwickeln

Ereignisgesteuerte Architektur

 

event-driven-arch

  • Trade-offs bei EDA:
  • Für Eventual Consistency auslegen.
  • Idempotenz umsetzen.
  • Fehlerbehandlung ist komplexer.
Anwendungen auf AWS entwickeln

Idempotenz

 

idempotency

  • Dieselbe Operation liefert bei mehrfacher Ausführung dasselbe Ergebnis.
  • Zentrales Designprinzip in asynchronen und ereignisgesteuerten Systemen.
  • Verteilte Systeme können doppelte Events liefern (Retries, Netzwerkausfälle, Reprocessing).
  • Erhält Korrektheit und Zuverlässigkeit des Systems.
Anwendungen auf AWS entwickeln

Dead-Letter-Queues

 

ltq

  • Handhabt Fehler in asynchroner Kommunikation.
  • Isoliert problematische „Gift"-Nachrichten.
  • Nach wiederholten fehlgeschlagenen Retries wandert die Nachricht in die DLQ.
  • Der Hauptfluss läuft weiter.
Anwendungen auf AWS entwickeln

Dead-Letter-Queues

  • Nutzen, wenn die Nachrichtenreihenfolge nicht kritisch ist.
  • Überspringen für unkritische Systeme, bei denen gelegentlicher Datenverlust akzeptabel ist.
  • Vermeiden, wenn die Reihenfolge erhalten bleiben muss.

 

ltq

Anwendungen auf AWS entwickeln

Zustand verwalten

  • Zustandsverwaltung ist grundlegend für Cloud-native Apps.
  • Zustand ist jede zwischen Interaktionen erhaltene Daten.
  • Lokales Speichern auf dem Server begrenzt Skalierung und Resilienz.

 

managing state

Anwendungen auf AWS entwickeln

Zustand verwalten

  • Zustandsverwaltung hat je nach Anwendungsfall Trade-offs.
  • Externer Zustand erhöht Skalierbarkeit und Resilienz.
  • Kosten: zusätzliche Latenz und Komplexität.
  • Wichtige Punkte: Konsistenz, Caching und Datenzugriffsmuster.

 

managing state

Anwendungen auf AWS entwickeln

Stateful

 

state full design

  • Sitzungsdaten verbleiben auf dem Server.
  • Anfragen müssen zur selben Instanz gehen (Sticky Sessions).
  • Begrenzt die Skalierungsflexibilität.
  • Fällt die Instanz aus, ist die Sitzung weg.
Anwendungen auf AWS entwickeln

Stateless

 

stateless

  • Jede Anfrage wird unabhängig behandelt.
  • Kein Zustand auf dem Server gespeichert.
  • Zustand liegt in externen Systemen.
  • Bevorzugter Ansatz für Cloud-native Apps.
  • Jede Instanz kann jede Anfrage bedienen – horizontale Skalierung ist einfach.
Anwendungen auf AWS entwickeln

Lass uns üben!

Anwendungen auf AWS entwickeln

Preparing Video For Download...