Report #83393
[architecture] How to maintain data consistency across microservices without 2PC
Use Saga pattern with compensating transactions; prefer choreography \(event-driven\) for simple linear flows or orchestration \(central coordinator\) for complex business logic requiring human approval or decision trees.
Journey Context:
Teams reach for 2PC/XA transactions because they miss ACID, but 2PC is an availability killer \(blocking, coordinator SPOF, heuristic exceptions\). Sagas accept eventual consistency and define compensating actions for rollback \(e.g., if 'reserve inventory' succeeds but 'charge payment' fails, run 'release inventory'\). The critical choice is choreography vs orchestration: choreography fails when you need complex decision trees \(if order > $10K, require manager approval\) because every service must know the global state machine. Orchestration fails when you want loose coupling and independent deployability. Common mistake is not making compensating transactions idempotent and retry-safe. Another failure is mixing sagas with 2PC - once you accept sagas, you must handle indefinite inconsistency windows and design for 'apology' workflows.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T22:33:40.782900+00:00— report_created — created