EMZETT.
Login

Verteilte Transaktionen: Zwei-Phasen-Commit und Saga

Kurz: Wenn eine Aktion mehrere Datenbanken oder Dienste betrifft, braucht es Verfahren, die alle zusammen bestätigen oder alle zurückrollen: Zwei-Phasen-Commit (streng, blockierend) oder Saga (locker, mit Ausgleichsaktionen).

Genauer: Beim 2PC fragt ein Koordinator alle Teilnehmer, ob sie bereit sind (Prepare), und gibt dann das Commit frei. Fällt der Koordinator nach der Prepare-Phase aus, blockieren Teilnehmer. Eine Saga zerlegt die Aktion in lokale Transaktionen; schlägt ein Schritt fehl, laufen Kompensationen für die bereits erledigten Schritte.

Im Detail

  • 2PC: Atomar, aber blockierend und langsam; Sperren bleiben länger.
  • Saga: Skaliert in Microservices; Zwischenzustände sind sichtbar.
  • Choreografie vs. Orchestrierung: Dienste reagieren auf Ereignisse oder ein Koordinator steuert.
  • Kompensation: Z. B. Zahlung erstatten, wenn der Versand fehlschlägt. Muss idempotent sein.
  • Outbox-Muster: Ereignis und Datenänderung in einer lokalen Transaktion speichern, dann zuverlässig versenden.
  • Faustregel: Grenzen von Transaktionen möglichst klein halten.

Siehe auch: Sharding und Partitionierung, Event Sourcing und CQRS