Understanding Two-Phase Commit in Microservices
- Vipul Kumar
- Microservices , Distributed transaction , Two phase commit
- November 16, 2024
Table of Contents
🔄 Protocol Overview — The Two-Phase Commit (2PC) protocol is a distributed algorithm used to ensure that a transaction is either committed or aborted across all participating nodes in a distributed system.
1️⃣ Prepare Phase — In this phase, the coordinator sends a prepare request to all participants. Each participant prepares to commit the transaction and logs the changes but does not commit yet. They respond with a vote to commit or abort.
2️⃣ Commit Phase — If all participants vote to commit, the coordinator sends a commit request to all. If any participant votes to abort, the coordinator sends an abort request. Participants then commit or abort based on the coordinator’s decision.
⚖️ Consistency — 2PC ensures strict consistency across services by coordinating a global commit, making it suitable for scenarios requiring atomic transactions.
⚠️ Challenges — The protocol can introduce performance bottlenecks and single points of failure, especially if the coordinator fails during the process.
Protocol Phases
🔍 Prepare Phase — The coordinator sends a prepare request to all participants. Participants prepare the transaction, log changes, and respond with a commit or abort vote.
🔗 Commit Phase — If all votes are to commit, the coordinator sends a commit request. If any vote is to abort, an abort request is sent. Participants act based on the coordinator’s final decision.
🕒 Timing — The protocol requires careful timing and coordination to ensure all participants are ready to commit simultaneously.
📜 Logging — Participants log their actions during the prepare phase to ensure they can commit or abort as instructed.
🔄 Rollback — If any participant votes to abort, the entire transaction is rolled back to maintain consistency.
Advantages and Disadvantages
✅ Advantage - Consistency — 2PC provides strict consistency, ensuring all nodes agree on the transaction outcome.
❌ Disadvantage - Performance — The protocol can cause performance bottlenecks due to the need for coordination and potential delays.
❌ Disadvantage - Single Point of Failure — The coordinator is a single point of failure, which can disrupt the entire transaction process if it fails.
✅ Advantage - Atomicity — Ensures that a transaction is fully completed or not at all, maintaining data integrity.
❌ Disadvantage - Complexity — Implementing 2PC can be complex, requiring careful management of transaction states and logs.
Use Cases
🏦 Bank Transfers — Ensures atomic transfer of funds between accounts in different banking systems.
🗄️ Distributed Databases — Coordinates commits across multiple database nodes to ensure data consistency.
📦 Inventory Management — Synchronizes stock levels across different locations or systems to prevent overselling.
💳 Payment Processing — Ensures all parts of a payment transaction are completed or none at all.
📊 Financial Transactions — Used in scenarios where financial data integrity is critical and must be maintained across systems.
Follow me on: LinkedIn | WhatsApp | Medium | Dev.to | Github