Two-Phase Commit Across the Services Versus Saga With Compensating Actions
TradeoffDistributed SystemsMidSeniorUpdated
An order checkout spans cart, payment, inventory, and shipping services, each with its own database.
Short answer: Saga with compensating actions. Two-phase commit (2PC) holds locks in every participant until the coordinator decides, blocks if the coordinator fails mid-protocol, and couples independently deployed services and teams.
The Two Options
A
Two-phase commit across the services
B
Saga with compensating actions
Drill This: Your Pick First
The Better Pick
Option B
Saga with compensating actions
Two-phase commit (2PC) holds locks in every participant until the coordinator decides, blocks if the coordinator fails mid-protocol, and couples independently deployed services and teams. A saga runs each step as a local transaction and undoes completed steps with compensations, so services stay autonomous at the cost of eventual consistency.
When the Other One Wins
Two-phase commit across the services
Inside one trusted boundary, such as shards of one database engine (Spanner) or one app using MySQL XA, 2PC is workable and gives true atomicity. Sagas trade that atomicity for availability and independence.