Hệ thống Dữ liệu Phân tán/Module 5 — Tổng kết & cheat sheet
31/38
Bài 31 / 38~9 phútRắc rối của hệ phân tánMiễn phí lượt xem

Module 5 — Tổng kết & cheat sheet

Recap rắc rối phân tán: mạng & đồng hồ không tin cậy, causal order (vector clock), partial failure & fencing token. Cheat sheet, glossary, self-assessment.

TL;DR: Module 5 gỡ giả định "mạng và máy đều đáng tin" và nhìn thẳng vào cái vỡ khi lên nhiều máy. Mạng không tin cậy: timeout chỉ là phỏng đoán, retry cần idempotency, 8 fallacies. Đồng hồ không tin cậy: clock skew, wall clock nhảy (NTP) khác monotonic, LWW-timestamp mất dữ liệu. Causal order: khi không tin đồng hồ, dùng happened-before và vector clock để suy thứ tự nhân quả. Partial failure: process pause gây split-brain, fencing token (số tăng dần) chặn zombie. Một sợi chỉ xuyên suốt: không phân biệt được node chậm với node chết — gốc của mọi khó khăn, và là lý do Module 6 cần consensus. Trang này để bookmark.

Đã đi qua những gì

Bắt đầu bằng mạng không tin cậy: mạng bất đồng bộ không đảm bảo gì, và khi không có response bạn không phân biệt được node chết, node chậm, hay response bị mất — timeout là cách duy nhất để "đoán" nhưng chỉ là phỏng đoán, và retry an toàn đòi idempotency. Rồi đồng hồ không tin cậy: mỗi node một đồng hồ lệch (skew), wall clock có thể nhảy khi NTP chỉnh (khác monotonic chỉ tăng), nên LWW dựa timestamp có thể vứt nhầm ghi mới hơn. Rồi causal order: đổi câu hỏi từ "lúc mấy giờ" sang "cái gì ảnh hưởng cái gì" — happened-before cho thứ tự bộ phận, Lamport clock cho total order nhưng không phát hiện song song, vector clock thì phát hiện được. Khép bằng partial failure: một phần chết trong khi phần khác sống, process pause khiến node bị coi chết oan, và fencing token chặn zombie một cách cơ học mà không cần biết ai còn sống.

flowchart LR
  A["Mang<br/>khong tin cay"] --> B["Dong ho<br/>khong tin cay"]
  B --> C["Causal order<br/>vector clock"]
  C --> D["Partial failure<br/>fencing token"]
  D --> E["-> Can CONSENSUS<br/>(Module 6)"]

🗺️ Cheat sheet

Khái niệmCốt lõiPitfall
Không phân biệt chậm/chếtKhông tín hiệu trung thực về bên kiaCoi timeout = "chết chắc chắn"
TimeoutPhỏng đoán node chếtNgắn: chết oan + dây chuyền; dài: treo lâu
RetryGửi lại khi timeoutRetry mù thao tác không idempotent → trùng
IdempotencyChạy lại = một kết quảQuên key → trừ tiền/tạo đơn 2 lần
8 fallaciesGiả định máy-đơn sai"Mạng đáng tin, độ trễ 0"
Wall clock"Mấy giờ", NTP đồng bộ, nhảyDùng đo khoảng → duration âm
Monotonic clock"Bao lâu trôi", chỉ tăngSo hai máy (mốc khác nhau)
Clock skewĐồng hồ node lệch nhauSo timestamp 2 node để suy thứ tự
LWW-timestampGiữ ghi timestamp lớn nhấtSkew → vứt nhầm ghi mới hơn
Happened-beforea → b: a có thể ảnh hưởng bTưởng mọi cặp đều so được
ConcurrentKhông a→b lẫn b→aCoi song song = "một cái trước"
Lamport clock1 số, total orderKhông phát hiện song song
Vector clock1 ô/node, phát hiện song songBộ nhớ tỉ lệ số node
Partial failureMột phần chết, phần khác sốngSuy luận như máy đơn all-or-nothing
Process pauseGC/swap đóng băng vô hình"Vừa kiểm tra còn giữ lock"
Split-brainHai node cùng tưởng có quyềnChỉ dựa timeout để cấp lại quyền
Fencing tokenSố tăng dần, storage từ chối cũEnforce ở client (zombie tự cho phép)

📖 Glossary module

Thuật ngữĐịnh nghĩa 1 câu
Mạng bất đồng bộKhông đảm bảo giới hạn trên cho độ trễ; gói có thể trễ/mất/sắp xếp lại.
TimeoutNgưỡng thời gian, quá đó thì coi bên kia đã chết.
IdempotencyChạy lại nhiều lần cho cùng một kết quả.
Idempotency keyĐịnh danh duy nhất cho một ý định, để server khử trùng retry.
8 fallaciesTám giả định sai thường mang từ máy đơn lên hệ phân tán.
Wall clockĐồng hồ "mấy giờ" (time-of-day), đồng bộ NTP, có thể nhảy.
Monotonic clockĐồng hồ chỉ tăng, đo khoảng thời gian trên một máy.
Clock skewĐộ lệch giữa đồng hồ các node.
Clock driftTốc độ đồng hồ chạy nhanh/chậm hơn thời gian thật.
NTPGiao thức đồng bộ đồng hồ qua mạng.
LWWLast-Write-Wins — giữ ghi có timestamp lớn nhất.
Happened-beforeQuan hệ a → b: a có thể ảnh hưởng b.
ConcurrentHai sự kiện không có quan hệ nhân quả nào.
Partial orderThứ tự mà một số cặp không so được.
Lamport clockBộ đếm logic cho total order nhất quán nhân quả.
Vector clockVector đếm mỗi node, phát hiện được quan hệ song song.
Partial failureMột phần hệ hỏng trong khi phần khác chạy.
Process pauseTiến trình bị đóng băng vô hình (GC, swap, VM freeze).
Split-brainHai node cùng tin mình giữ quyền độc nhất.
LeaseLock có hạn, phải gia hạn liên tục.
Fencing tokenSố tăng đơn điệu kèm quyền ghi; storage từ chối token cũ.
ZombieNode bị coi là chết nhưng còn sống, hành động dựa trạng thái cũ.

⚠️ Pitfall tổng hợp

  • Coi timeout = "chết chắc chắn": không — bên kia có thể chỉ chậm hoặc response bị mất. Đúng: xử lý cả nhánh "không biết" (retry idempotent, fencing).
  • Retry mù thao tác đổi trạng thái: trùng giao dịch khi response đầu bị mất. Đúng: idempotency key hoặc thao tác tự idempotent.
  • Dùng wall clock đo khoảng thời gian: NTP kéo lùi → duration âm/sai. Đúng: monotonic cho khoảng, wall clock chỉ để hiển thị/log.
  • Tin LWW-timestamp cho dữ liệu quý: clock skew vứt nhầm ghi mới hơn, mất dữ liệu âm thầm. Đúng: vector clock để phát hiện xung đột và gộp.
  • Dùng Lamport clock để phát hiện xung đột: nó không phân biệt được song song. Đúng: vector clock khi cần biết hai ghi có song song không.
  • "Vừa kiểm tra là mình còn giữ lock" rồi ghi: process pause chen giữa, lock đã đổi chủ. Đúng: fencing token kiểm tại storage lúc ghi.

✅ Self-assessment

Bạn đã đạt module này nếu trả lời được:

  • Giải thích được mạng không tin cậy: timeout, retry, và 8 fallacies of distributed computing
    • Nếu chưa: đọc lại bài 01 mục 2–5.
  • Giải thích được đồng hồ không tin cậy: clock skew, monotonic vs wall clock
    • Nếu chưa: đọc lại bài 02 mục 2–4.
  • Giải thích được causal order qua happened-before và vector clock
    • Nếu chưa: đọc lại bài 03 mục 2–4.
  • Giải thích được partial failure, split-brain và fencing token chống split-brain
    • Nếu chưa: đọc lại bài 04 mục 2–4.

🚀 What's next

Sợi chỉ xuyên suốt module — không phân biệt được node chậm với node chết, không tin được mạng lẫn đồng hồ — đặt ra một câu hỏi lớn: nếu không node nào biết chắc sự thật, làm sao cả hệ đồng ý về một sự thật chung (ai là leader, giá trị nào được commit, thứ tự nào là chính thức)? Module 6 — Consistency & Consensus trả lời: từ linearizability (ảo giác "một bản sao duy nhất") tới consensus (Raft) — cơ chế để đa số node thống nhất dù mạng, đồng hồ và một số node đều không đáng tin. Fencing token của bài 04 chính là một thứ consensus cung cấp.

📚 Tài liệu mở rộng

  • Sách: Designing Data-Intensive Applications (Kleppmann) — Chương 8 "The Trouble with Distributed Systems" (toàn bộ module này); mục "Unreliable Networks", "Unreliable Clocks", "Knowledge, Truth, and Lies".
  • Paper: Leslie Lamport, "Time, Clocks, and the Ordering of Events in a Distributed System" (1978) — gốc của happened-before và logical clock.
  • Paper: Fidge (1988) & Mattern (1988) — vector clock, mở rộng Lamport clock để phát hiện quan hệ song song.
  • Danh sách: 8 fallacies of distributed computing (L. Peter Deutsch và cộng sự, Sun Microsystems) — nền cho tư duy phòng thủ khi thiết kế phân tán.

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