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