Module 4 — Tổng kết & cheat sheet
Recap transaction phân tán: anomaly & serializability, 2PC (blocking, đắt), và khi nào tránh bằng saga/idempotency. Cheat sheet, glossary, self-assessment.
TL;DR: Module 4 đưa transaction từ một node lên nhiều node: ôn ACID và chỉ ra atomicity/isolation vỡ đâu; anomaly & serializability (lost update, write skew, phantom + chuẩn serializable); 2PC (atomic commit xuyên node, blocking + đắt); và tránh distributed transaction bằng saga + idempotency. Kết luận thực dụng: 2PC là giải pháp cuối, saga là mặc định. Trang này để bookmark trước khi vào "rắc rối phân tán".
Đã đi qua những gì
Bắt đầu bằng ôn ACID: atomicity và isolation trên một node dựa vào một điểm điều phối trung tâm (WAL + lock/MVCC), thứ biến mất khi phân tán. Rồi anomaly & serializability: các cách giao dịch đồng thời phá nhau (lost update, write skew, phantom), serializable là chuẩn vàng, và snapshot isolation không chặn write skew. Rồi 2PC: nghi thức prepare/commit cho atomic xuyên node — mạnh nhưng blocking (coordinator chết → participant treo giữ khoá) và đắt. Khép bằng tránh 2PC: saga (chuỗi giao dịch cục bộ + bù trừ), idempotency (chịu retry), outbox (không mất bước) — đổi isolation lấy khả dụng.

🗺️ Cheat sheet
| Khái niệm | Cốt lõi | Pitfall |
|---|---|---|
| Atomicity xuyên node | Mọi node cùng commit/abort | "BEGIN..COMMIT" 2 node ≠ atomic |
| Lost update | Đọc-sửa-ghi chồng nhau | Mức yếu cho thao tác tính tiền |
| Write skew | Mỗi cái đúng, tổng phá ràng buộc | Snapshot isolation KHÔNG chặn |
| Serializable | Kết quả như chạy tuần tự | Tin cái tên isolation level |
| 2PL vs 2PC | Locking (isolation) vs commit (atomicity) | Nhầm hai "two-phase" |
| 2PC | Prepare → commit/abort | Coordinator chết → treo giữ khoá |
| Saga | Giao dịch cục bộ + bù trừ | Giả định có isolation |
| Idempotency | Chạy lại = một kết quả | Bước không idempotent + retry |
| Outbox | Message cùng txn cục bộ | Gửi message ngoài txn → mất/nhầm |
📖 Glossary module
| Thuật ngữ | Định nghĩa 1 câu |
|---|---|
| Atomicity | Mọi thao tác cùng có hiệu lực hoặc không cái nào. |
| Isolation | Giao dịch đồng thời cho kết quả như chạy tuần tự. |
| Lost update | Hai read-modify-write chồng nhau, mất một cập nhật. |
| Write skew | Mỗi giao dịch đúng theo cái nó đọc nhưng tổng phá ràng buộc. |
| Phantom | Ghi làm đổi tập kết quả truy vấn của giao dịch khác. |
| Serializable | Mức isolation mạnh nhất, tương đương một lịch tuần tự. |
| 2PL | Two-phase locking — đạt serializable bằng khoá. |
| SSI | Serializable snapshot isolation — lạc quan, abort khi xung đột. |
| 2PC | Two-phase commit — atomic commit xuyên node. |
| Coordinator / participant | Node điều phối / node tham gia 2PC. |
| In-doubt | Participant đã "yes", chưa biết kết quả — phải chờ. |
| Saga | Chuỗi giao dịch cục bộ + compensating action. |
| Compensating action | Giao dịch mới đảo ngược hiệu ứng nghiệp vụ. |
| Idempotency | Chạy lại nhiều lần cho cùng kết quả. |
| Outbox | Ghi message cần gửi cùng transaction cục bộ. |
⚠️ Pitfall tổng hợp
- "BEGIN..COMMIT" xuyên node = atomic: không — hai thao tác độc lập, một cái có thể fail. Đúng: 2PC hoặc saga tường minh.
- Tin cái tên isolation "serializable": thường là snapshot → lọt write skew. Đúng: đọc tài liệu, dùng serializable thật/khoá cho ràng buộc cứng.
- Nhầm 2PL với 2PC: locking (isolation) vs commit (atomicity). Đúng: 2P-Commit = atomicity, 2P-Lock = isolation.
- Rải 2PC khắp nơi: chậm + coordinator chết → treo dây chuyền. Đúng: mặc định saga, 2PC khi buộc phải.
- Saga nhưng giả định có isolation / bước không idempotent: lỗi "lúc có lúc không". Đúng: đánh dấu trạng thái trung gian + idempotency key.
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Phân biệt được anomaly (lost update, write skew) và serializability
- Nếu chưa: đọc lại bài 02 mục 2-3.
- Giải thích được two-phase commit (2PC) và vì sao nó blocking và đắt
- Nếu chưa: đọc lại bài 03 mục 2-4.
- Chọn được khi nào tránh distributed transaction bằng saga/idempotency
- Nếu chưa: đọc lại bài 04 mục 2-5.
🚀 What's next
2PC "blocking", các anomaly, và nhu cầu idempotency đều bắt nguồn từ một sự thật khó chịu: trong hệ phân tán, không phân biệt được node chậm với node chết, và mạng/đồng hồ đều không tin cậy. Module 5 — Rắc rối của hệ phân tán mổ đúng những giả định vỡ đó — nền để hiểu vì sao consensus (Module 6) khó và cần thiết.
📚 Tài liệu mở rộng
- Sách: Designing Data-Intensive Applications (Kleppmann) — Chương 7 "Transactions" + Chương 9 (atomic commit).
- Paper: Garcia-Molina & Salem, "Sagas" (1987) — gốc của saga.
- Paper: Cahill et al., "Serializable Isolation for Snapshot Databases" (2008) — SSI (nền Serializable của PostgreSQL).
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Khi nào tránh distributed transaction — saga & idempotency
Bài tiếp Rắc rối của hệ phân tánModule 5 — Rắc rối của hệ phân tán: tổng quan
Thảo luận & góp ý
Hỏi đáp về bài này