0
0
Microservicessystem_design~12 mins

Two-phase commit (and why to avoid it) in Microservices - Architecture Diagram

Choose your learning style9 modes available
System Overview - Two-phase commit (and why to avoid it)

This system demonstrates a two-phase commit protocol coordinating a transaction across multiple microservices to ensure data consistency. The key requirement is atomicity: either all services commit the transaction or none do, preventing partial updates.

However, two-phase commit can cause delays and blocking issues, making it less ideal for scalable microservices architectures.

Architecture Diagram
User
  |
  v
Load Balancer
  |
  v
Transaction Coordinator (2PC)
  /           \
 /             \
Service A     Service B
  |             |
Database A    Database B
  ^             ^
  |             |
 Cache A      Cache B
Components
User
user
Initiates transaction requests
Load Balancer
load_balancer
Distributes user requests to coordinator
Transaction Coordinator (2PC)
service
Manages two-phase commit protocol across services
Service A
service
Handles part of the transaction and manages Database A
Service B
service
Handles part of the transaction and manages Database B
Database A
database
Stores data for Service A
Database B
database
Stores data for Service B
Cache A
cache
Speeds up reads for Database A
Cache B
cache
Speeds up reads for Database B
Request Flow - 20 Hops
UserLoad Balancer
Load BalancerTransaction Coordinator (2PC)
Transaction Coordinator (2PC)Service A
Service ADatabase A
Database AService A
Service ATransaction Coordinator (2PC)
Transaction Coordinator (2PC)Service B
Service BDatabase B
Database BService B
Service BTransaction Coordinator (2PC)
Transaction Coordinator (2PC)Service A
Service ADatabase A
Database AService A
Service ATransaction Coordinator (2PC)
Transaction Coordinator (2PC)Service B
Service BDatabase B
Database BService B
Service BTransaction Coordinator (2PC)
Transaction Coordinator (2PC)Load Balancer
Load BalancerUser
Failure Scenario
Component Fails:Transaction Coordinator (2PC)
Impact:If the coordinator crashes during commit phase, services may remain locked waiting for commit or rollback, causing blocking and potential deadlocks.
Mitigation:Use coordinator recovery logs to resume or abort transactions; alternatively, avoid 2PC in favor of eventual consistency or saga patterns to reduce blocking.
Architecture Quiz - 3 Questions
Test your understanding
Which component is responsible for coordinating the two-phase commit?
ALoad Balancer
BTransaction Coordinator (2PC)
CService A
DCache A
Design Principle
Two-phase commit ensures strong consistency by coordinating all services to commit or abort together, but it introduces blocking and latency that hurt scalability. Modern microservices often prefer eventual consistency or saga patterns to avoid these issues.