Two-phase commit (2PC) là gì?
Last updated: March 21, 2026 Xem trên toàn màn hình
- 01 May 2021
Unit Test là gì? 94/469 - 01 Feb 2023
Information Radiator là gì? 64/912 - 20 Feb 2025
Zachman Framework là gì? 57/72 - 03 May 2019
Business Rule là gì? 53/1281 - 30 Aug 2022
Kỹ thuật "Hollow" là gì? 50/140 - 30 Apr 2024
Web3 là gì? Tại sao nói Web3 là nền tảng để Blockchain thay đổi Internet? 47/124 - 29 May 2022
Templafy là gì? Tại sao nói Templafy là nền tảng tài liệu thế hệ mới? 44/466 - 11 Mar 2024
Các trục liên thông LGSP và NGSP là gì? Lợi ích của LGSP và NGSP? 42/74 - 08 Aug 2023
"Denormalized Table" là gì? 38/242 - 14 Aug 2024
Eventual Consistency và Strong Consistency trong Cơ sở dữ liệu phân tán 35/231 - 09 Aug 2024
Latency (độ trễ) là gì? 35/213 - 15 May 2025
Hiệu quả năng lượng trong phần mềm (Energy Efficiency in Software) là gì? 33/122 - 01 Nov 2022
MVF (Minimum Viable Features): Tối ưu tính năng trong giới hạn nguồn lực 33/117 - 01 Apr 2025
CTO ra quyết định như thế nào? 29/84 - 13 Sep 2024
Cấp quyền và Hủy quyền người dùng (User Provisioning & Deprovisioning) là gì? 29/141 - 01 Jun 2025
Thiết Kế Hướng Miền (Domain-Driven Design) hình thành như thế nào trong kiến trúc Lưới Dữ Liệu (Data Mesh)? 28/110
Two-Phase Commit (2PC) là gì?
Two-Phase Commit (2PC) là một giao thức (protocol) trong hệ thống phân tán nhằm đảm bảo tính toàn vẹn của dữ liệu thông qua nguyên tắc Atomic (nguyên tử): hoặc là tất cả các thành phần liên quan đều thực hiện thay đổi, hoặc là không có thành phần nào thực hiện cả.
Trong một hệ thống mà dữ liệu nằm ở nhiều database hoặc service khác nhau, 2PC giúp giải quyết bài toán: Làm sao để chắc chắn mọi node đều đồng thuận lưu dữ liệu thành công?
1. Các thành phần tham gia
Giao thức này chia các node thành hai vai trò chính:
- Coordinator (Điều phối viên): Thành phần trung tâm quản lý quá trình giao dịch.
- Participants (Người tham gia): Các database hoặc service lưu trữ dữ liệu thực tế.
2. Quy trình 2 giai đoạn
Giai đoạn 1: Prepare Phase (Giai đoạn chuẩn bị)
Đây là lúc Coordinator "hỏi ý kiến" các Participant:
-
Coordinator gửi thông điệp "Prepare" tới tất cả các Participant.
-
Mỗi Participant thực hiện các thao tác kiểm tra (lock tài nguyên, ghi log dự phòng) để xem mình có thể commit được không.
-
Bình chọn (Vote):
- Nếu sẵn sàng, Participant trả lời "Yes".
- Nếu gặp lỗi hoặc không thể thực hiện, Participant trả lời "No".
Giai đoạn 2: Commit Phase (Giai đoạn hoàn tất)
Dựa trên kết quả bỏ phiếu ở giai đoạn 1, Coordinator sẽ ra quyết định cuối cùng:
- Trường hợp 1 (Tất cả đồng ý): Coordinator gửi lệnh "Commit" cho tất cả các Participant. Các node thực hiện lưu dữ liệu vĩnh viễn và giải phóng tài nguyên.
- Trường hợp 2 (Có ít nhất một node từ chối): Coordinator gửi lệnh "Rollback" (hoặc Abort). Tất cả các node hủy bỏ thay đổi và quay lại trạng thái trước đó.
3. Ưu điểm và Nhược điểm
| Đặc điểm | Chi tiết |
| Ưu điểm | Đảm bảo tính nhất quán (Consistency) tuyệt đối giữa các node. Rất mạnh về tính nguyên tử (Atomicity). |
| Nhược điểm | Hiệu năng thấp: Các tài nguyên bị khóa (lock) cho đến khi hoàn tất giai đoạn 2. |
| Rủi ro | Single Point of Failure: Nếu Coordinator "chết" giữa chừng, các Participant có thể bị treo trong trạng thái chờ đợi. |
4. Khi nào nên dùng?
2PC thường được dùng trong các hệ thống đòi hỏi tính chính xác cực cao về mặt tài chính hoặc giao dịch quan trọng, nơi mà sự không đồng nhất dữ liệu giữa các database là không thể chấp nhận được.
Tuy nhiên, trong các hệ thống Microservices hiện đại yêu cầu khả năng mở rộng (scalability) cao, người ta thường chuyển sang dùng Saga Pattern (Eventual Consistency) để tránh việc bị treo hệ thống do cơ chế khóa của 2PC.









Link copied!
Mới cập nhật