Was ist Saga-Muster
Verteilte Transaktionen durch Ereignissequenzen
Saga-Muster ist ein Muster zur Verwaltung verteilter Transaktionen durch eine Sequenz lokaler Transaktionen mit kompensierenden Aktionen bei Fehlern.
Das Problem
- Microservices haben eigene Datenbanken
- Klassische ACID-Transaktionen sind unmöglich
- Konsistenz zwischen Diensten erforderlich
Saga-Typen
- Choreographie — Dienste tauschen Ereignisse aus
- Orchestrierung — zentraler Koordinator verwaltet
Choreographie
- Dienste abonnieren gegenseitig Ereignisse
- Jeder Dienst veröffentlicht sein Ergebnis
- Kein Single Point of Failure
- Schwieriger den Zustand zu verfolgen
Orchestrierung
- Saga-Koordinator verwaltet den Ablauf
- Ruft Dienste sequentiell auf
- Einfacher zu verfolgen und debuggen
- Risiko eines Single Point of Failure
Kompensierende Transaktionen
- Rückgängigmachen bereits abgeschlossener Schritte
- Müssen idempotent sein
- Semantisches Rückgängigmachen (kein Rollback)
- Beispiel: Zahlung erstatten statt stornieren