Saga
Eine Saga verbindet mehrere lokale Transaktionen zu einem fachlichen Ablauf. Fehlschläge werden durch ausdrücklich entworfene Kompensationen behandelt.
- Lokaler SchrittJeder Dienst schreibt für sich.
- FehlschlagErgebnis ist ein fachliches Signal.
- KompensationFachlich rückgängig machen.
Einordnung
Warum das wichtig ist
Über mehrere Dienste gibt es keine gemeinsame Transaktion. Scheitert ein Schritt, bleibt der vorherige bestehen, wenn du ihn nicht ausdrücklich rückgängig machst. Die einzelne atomare Grenze ist ein eigener Baustein.
Dieser Baustein erklärt verteilte fachliche Abläufe und Kompensation. Für eine einzelne atomare Grenze siehe Transaktionsgrenzen.
Auf einen Blick · Saga mit Kompensation
Bestellsaga bei Fehlschlag
Variante: Lager und Zahlung laufen als getrennte Dienste, weil unabhängiger Betrieb fachlich begründet wurde. Bestellung koordiniert die Reservierung und den extern angebundenen Zahlungsanbieter.
So liest du das Bild
- Lokaler Schritt Das Lager meldet „Reservierung R-77 gebunden“, die Zahlung „Zahlung belastet“, jeweils für sich.
- Fehlschlag Bei „Zahlung abgelehnt“ zeigt der Zahlungsdienst „keine Belastung“ und die Bestellung bekommt das Signal.
- Kompensation Mit Saga sendet die Bestellung „R-77 freigeben“ und das Lager zeigt „R-77 freigegeben“.
- läuftBestellungAblauf abgeschlossen
- läuftLagerdienstReservierung R-77 gebunden
- läuftZahlungsdienstZahlung belastet
- läuftVersanddienstLieferauftrag angelegt
keineOffene Rückabwicklung
Nutzen & Grenzen
Hilft, wenn
- Mehrere lokale Transaktionen behalten mit einer Saga gemeinsamen Prozessfortschritt und Folgeaktionen.
- Eine fachlich mögliche Kompensation beschreibt, wie eine frühere Wirkung gezielt ausgeglichen wird.
- Ein dauerhafter Prozessstatus ermöglicht Fortsetzung und Klärung über Neustarts hinweg.
Grenzen
- Unumkehrbares, etwa eine versendete Ware, lässt sich nicht kompensieren und braucht einen fachlichen Klärungsprozess.
- Auch Kompensationen können scheitern. Speichere den Zustand der Saga, damit sie wiederholt oder von Hand geklärt werden kann.
- Nicht jeder Ablauf braucht eine Saga: Liegt er in einer atomaren Grenze, genügt eine Transaktion, siehe Transaktionsgrenzen.
In der Praxis
- Lege Schritte, Verantwortliche und dauerhafte Zwischenzustände fest. Jeder Teilnehmer commitet lokal; der Koordinator kann nach Neustart am gespeicherten Fortschritt ansetzen.
- Beschreibe Kompensationen als eigene fachliche Aktionen und prüfe, ob sie zulässig sind. Ein fehlgeschlagener Ausgleich braucht einen sichtbaren Klärungspfad.
- Beobachte Status, Wiederholungen und manuelle Eingriffe je Vorgang. Orchestrierung & Choreografie vertieft Steuerungsformen; Idempotenz behandelt sichere Wiederholung.
Ausführliche Erklärung lesen
Eine Saga koordiniert lokale Transaktionen über mehrere Teilnehmer hinweg. Ein Prozess hält den Fortschritt fest und bestimmt Folgeaktionen. Eine Kompensation ist eine neue fachliche Aktion, die eine frühere Wirkung ausgleicht; der ursprüngliche Vorgang bleibt Teil der Historie.
Orchestrierung speichert die Steuerung zentral, Choreografie verteilt Reaktionen über Ereignisse. Beide brauchen dauerhafte Status, Kennungen und Wiederaufnahme. Kompensation hängt von der fachlichen Konsistenzanforderung ab; für nicht ausgleichbare Wirkungen ist ein Klärungszustand nötig.
Orchestrierung beschreibt, wer den Fortgang steuert; Idempotenz ordnet Wiederholungen derselben lokalen Wirkung zu. Kompensationen bleiben fachliche Entscheidungen.
Der Pivot-Schritt (Point of no return) ist der Schritt, ab dem vorwärts abgeschlossen statt kompensiert wird; im Shop ist das typischerweise die Belastung beim Zahlungsanbieter. Schritte davor sind kompensierbar, Schritte danach wiederholbar, mit Idempotenz. Kompensation heißt auf Englisch Compensating Transaction.
Selbst prüfen
Teste dich in drei Stufen
AblesenIm Bild nachsehen
Was bleibt bei abgelehnter Zahlung ohne Kompensation gebunden?
Lösung mit Begründung ansehen
Die Reservierung R-77 im Lagerdienst.
AnwendenAuf eine neue Lage übertragen
Die Zahlung wird angenommen, aber vorher scheiterte die Reservierung. Was gilt für die Saga?
Lösung mit Begründung ansehen
Es gäbe keine Reservierung zum Zurücknehmen; eine Zahlung dürfte erst gar nicht beauftragt werden, bevor R-77 vorliegt. Im Bild folgt die Zahlung auf die Reservierungsbestätigung.
BewertenEine Alternative abwägen
Wäre eine globale Transaktion über Lager und Zahlung einfacher als eine Saga? Wie wägst du ab?
Lösung mit Begründung ansehen
Sie wäre einfacher zu denken, bindet aber unabhängig betriebene Dienste eng aneinander. Die Saga hält sie getrennt, verlangt dafür Kompensationen wie „R-77 freigeben“.
Vertiefen
Diese Bausteine führen die Gedanken dieser Seite weiter.
Quellen
- microservices.io · Saga (öffnet in neuem Tab)Erklärt lokale Transaktionen und fachliche Kompensationen.
- Microsoft · Saga (öffnet in neuem Tab)Vergleicht Choreografie und Orchestrierung bei verteilten Transaktionen.
- PostgreSQL · Transactions (öffnet in neuem Tab)Erklärt atomare Änderungen, Commit und Rollback.