2PC là giao thức để nhiều node commit một transaction phân tán một cách atomic — hoặc tất cả commit, hoặc tất cả abort. Có một coordinator điều phối các participant:
1. Phase 1 — Prepare (bỏ phiếu): coordinator hỏi mọi participant "sẵn sàng commit chưa?". Mỗi participant làm phần việc, ghi bền để chắc chắn có thể commit, rồi bỏ phiếu Yes (hoặc No nếu gặp lỗi). Sau khi vote Yes, nó phải giữ khoá và chờ quyết định.
2. Phase 2 — Commit/Abort: nếu tất cả vote Yes → coordinator ra lệnh commit; chỉ cần một No → ra lệnh abort. Participant thực thi rồi báo lại.
Vì sao né ở quy mô lớn:
- Blocking: nếu coordinator chết sau khi các participant đã vote Yes, chúng bị kẹt giữ khoá chờ quyết định — tài nguyên bị khoá, giảm khả dụng.
- Đồng bộ + độ trễ cao: phải chờ vòng nhắn tin qua mọi node; một node chậm kéo cả transaction.
- Xét theo CAP: 2PC nghiêng về nhất quán nhưng hy sinh tính sẵn sàng khi có sự cố.
Hệ phân tán quy mô lớn thường thay bằng saga (chuỗi transaction cục bộ + hành động bù trừ) hoặc transactional outbox + eventual consistency để tránh khoá phân tán.