2PC là giao thức để nhiều node commit một transaction phân tán một cách nguyên tử — 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ữ khóa 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ữ khóa chờ quyết định — tài nguyên bị khóa, 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.
- Tương phản với 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 khóa phân tán.