/pattern/saga-compensation/

04 · ProductionRuntime ArchitectureSaga PatternCompensating ActionTransactional WorkflowException Handling & Recovery

Saga / Compensation.
Jeder Vorwärtsschritt wird mit seiner eigenen Rückgängig-Funktion ausgeliefert.

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

  • Agenten externe Seiteneffekte auslösen.
  • Verteilte Transaktionen nicht verfügbar sind.
  • Fehlerrücknahme technisch möglich ist.

Wann es nach hinten losgeht

  • Aktionen nicht kompensiert werden können.
  • Strenge atomare Konsistenz erforderlich ist.
  • Fehler besser durch vorherige Genehmigung verhindert werden.

Die Abwägung

Robustere lang laufende Prozesse werden auf Kosten komplexer Kompensationslogik gewonnen.

Die Wirkung

Was es tatsächlich tut.

Ein fehlgeschlagener Schritt löst kompensierende Rollbacks aus.

commitrollbackstepstepstep
Fallstricke

Zwei Wege, wie dieses Pattern Probleme verursachen kann.

Kompensation ist selbst ein Seiteneffekt, der fehlschlagen kann

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 nicht kompensierbarer Schritt sitzt in der Mitte

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.

Framework-Unterstützung

Wo Saga / Compensation nativ ist.

AWS StrandsWorkflowNativ
Microsoft Agent FrameworkKompensationsschritteNativ
LangGraphkompensierende KantenNativ

Suche

Patterns, Frameworks und Seiten durchsuchen.