Wann man dazu greift
- Agenten externe Seiteneffekte auslösen.
- Verteilte Transaktionen nicht verfügbar sind.
- Fehlerrücknahme technisch möglich ist.
/pattern/saga-compensation/
Eine lang laufende Transaktion wird in Schritte zerlegt, jeder mit einer kompensierenden Aktion gepaart; schlägt ein späterer Schritt fehl, werden die bereits committeten Schritte in umgekehrter Reihenfolge über ihre Kompensationen rückgängig gemacht, weil eine verteilte Transaktion nicht gleichzeitig über alle Ressourcen sperren kann.
In der PraxisEin Reisebuchungs-Agent bucht einen Flug, dann ein Hotel; wenn der Mietwagen-Schritt fehlschlägt, storniert er automatisch das Hotel und dann den Flug über die jeweiligen Kompensationsaktionen.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Robustere lang laufende Prozesse werden auf Kosten komplexer Kompensationslogik gewonnen.
Ein fehlgeschlagener Schritt löst kompensierende Rollbacks aus.
Der Rückerstattungsschritt schlägt fehl. Das System ist nun halb zurückgerollt: Bestellung storniert, Geld noch nicht zurück. Kompensation wird behandelt, als könnte sie selbst keinen Fehler erzeugen.
Lösung · Jeden Kompensationsschritt als Workflow mit eigenen Wiederholungen und Dead-Letter behandeln. Absicht persistieren, bevor Kompensation versucht wird, damit ein Wiederherstellungsprozess sie zum Abschluss führen kann.
Ein Schritt hat keine mögliche Rückgängig-Funktion — eine gesendete E-Mail, eine abgewickelte Zahlung, eine gepostete Nachricht. Ein späterer Fehler kann ihn nicht zurückrollen, sodass die Saga keinen konsistenten Zustand wiederherstellen kann.
Lösung · Irreversible Schritte zuletzt anordnen (der Pivot), sodass alles davor kompensierbar und alles danach wiederholbar ist; eine echt irreversible Aktion mitten im Ablauf hinter eine menschliche Genehmigung stellen.
Weitermachen
Patterns, Frameworks und Seiten durchsuchen.