Hệ thống Dữ liệu Phân tán/Module 4 — Tổng kết & cheat sheet
25/38
Bài 25 / 38~9 phútTransaction phân tánMiễn phí lượt xem

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ệmCốt lõiPitfall
Atomicity xuyên nodeMọi node cùng commit/abort"BEGIN..COMMIT" 2 node ≠ atomic
Lost updateĐọc-sửa-ghi chồng nhauMức yếu cho thao tác tính tiền
Write skewMỗi cái đúng, tổng phá ràng buộcSnapshot isolation KHÔNG chặn
SerializableKết quả như chạy tuần tựTin cái tên isolation level
2PL vs 2PCLocking (isolation) vs commit (atomicity)Nhầm hai "two-phase"
2PCPrepare → commit/abortCoordinator chết → treo giữ khoá
SagaGiao dịch cục bộ + bù trừGiả định có isolation
IdempotencyChạy lại = một kết quảBước không idempotent + retry
OutboxMessage 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
AtomicityMọi thao tác cùng có hiệu lực hoặc không cái nào.
IsolationGiao dịch đồng thời cho kết quả như chạy tuần tự.
Lost updateHai read-modify-write chồng nhau, mất một cập nhật.
Write skewMỗi giao dịch đúng theo cái nó đọc nhưng tổng phá ràng buộc.
PhantomGhi làm đổi tập kết quả truy vấn của giao dịch khác.
SerializableMức isolation mạnh nhất, tương đương một lịch tuần tự.
2PLTwo-phase locking — đạt serializable bằng khoá.
SSISerializable snapshot isolation — lạc quan, abort khi xung đột.
2PCTwo-phase commit — atomic commit xuyên node.
Coordinator / participantNode điều phối / node tham gia 2PC.
In-doubtParticipant đã "yes", chưa biết kết quả — phải chờ.
SagaChuỗi giao dịch cục bộ + compensating action.
Compensating actionGiao dịch mới đảo ngược hiệu ứng nghiệp vụ.
IdempotencyChạy lại nhiều lần cho cùng kết quả.
OutboxGhi 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

Đặt 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