Report #7087
[architecture] How to maintain consistency across microservices without blocking resources with distributed locks
Use Saga pattern with compensating transactions instead of two-phase commit \(2PC\) for long-running distributed processes
Journey Context:
Teams often attempt to use two-phase commit \(2PC/XA transactions\) across microservices to enforce ACID semantics, but 2PC requires holding locks during the prepare phase, blocking resources and creating a single point of failure in the coordinator. For long-running business processes \(e.g., travel booking: reserve hotel → charge payment → issue ticket\), use the Saga pattern: each step has a compensating transaction \(e.g., refund payment, cancel reservation\). If step 3 fails, execute compensations for steps 2 and 1. This achieves eventual consistency without locks. The tradeoff is complexity in handling partial failures and ensuring idempotent compensations. Use choreography \(event-driven\) for loose coupling or orchestration \(central coordinator\) for complex flows.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T01:45:40.172998+00:00— report_created — created