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.
flowchart LR A["On ACID<br/>-> phan tan"] --> B["Anomaly &<br/>serializability"] B --> C["2PC<br/>blocking + dat"] C --> D["Tranh: saga +<br/>idempotency"]
🗺️ 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?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên