Compare Two-Phase Commit (2PC) protocol versus Sagas for distributed transaction management.
❓ Interview Prompt: Compare Two-Phase Commit (2PC - Prepare/Commit, atomic, blocking, coordinator SPOF) vs Saga Pattern (Eventual consistency, compensating actions, non-blocking).
Comparing distributed transaction coordination protocols:
| Feature | Two-Phase Commit (2PC) | Saga Pattern |
|---|---|---|
| Consistency | Strong ACID consistency across databases | Eventual Consistency (BASE) |
| Mechanism | Phase 1: Prepare (Lock resources); Phase 2: Commit/Abort | Sequence of local transactions with compensating rollbacks |
| Performance | Slower; holds database locks across network | High performance; non-blocking local transactions |
| Failure Risk | Coordinator node is Single Point of Failure (SPOF); locks hang | Requires writing complex compensating rollback logic |
Code Implementation Example
// 2PC Coordinator Phase 1 (Prepare)
const participants = [db1, db2];
const votes = await Promise.all(participants.map(p => p.prepare(txId)));
const allOk = votes.every(v => v === 'VOTE_COMMIT');
// 2PC Coordinator Phase 2 (Commit or Abort)
await Promise.all(participants.map(p => allOk ? p.commit(txId) : p.abort(txId)));Use 2PC for micro-second strong consistency across SQL databases, and Sagas for long-running microservice workflows.