Report #29270
[architecture] How to maintain data consistency across microservices without 2PC or XA transactions
Implement the Saga pattern using orchestration \(not choreography\): a central saga controller manages the sequence, calling services with idempotent operations. On failure, execute compensating transactions in reverse order \(e.g., credit back the debited amount\). Store saga state in a durable log with at-least-once execution semantics.
Journey Context:
Developers attempt distributed transactions \(2PC\) across services, creating tight coupling, blocking locks, and fragility \(if coordinator dies, resources hang in 'prepared' state indefinitely\). Sagas accept eventual consistency: each step commits locally, failures trigger compensating actions. Choreography \(event-driven\) is decoupled but opaque—hard to track saga state or handle timeouts. Orchestration centralizes logic but becomes a single point of failure \(mitigate with state persistence\). Critical: all operations must be idempotent \(safe to retry\) and compensations must handle partial completion \(idempotent too\). Common error: forgetting that compensations can also fail—requires retry loops and alerting for manual intervention.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:31:25.658514+00:00— report_created — created