Hệ thống Dữ liệu Phân tán/Module 2 — Tổng kết & cheat sheet
13/38
Bài 13 / 38~9 phútNhân bản (replication)Miễn phí lượt xem

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

Recap replication: single/multi-leader/leaderless, replication lag + ba đảm bảo session, quorum, conflict resolution. Cheat sheet, glossary, self-assessment.

TL;DR: Module 2 dựng replication từ đơn giản tới phức tạp: single-leader (một nơi ghi, không xung đột), replication lag và ba đảm bảo sống chung với nó, multi-leader (ghi nhiều nơi, sinh xung đột), leaderless (quorum R+W>N, read repair, anti-entropy), và cách chọn theo workload. Trang này để bookmark trước khi vào partitioning.

Đã đi qua những gì

Bắt đầu bằng single-leader — một leader nhận mọi ghi, phát replication log; điểm căng nằm ở sync vs asyncfailover. Rồi replication lag: async làm follower trễ, sinh eventual consistency và ba nghịch lý cần chặn — read-your-writes, monotonic reads, consistent prefix reads. Multi-leader gỡ ràng buộc một-leader để lấy độ trễ/khả dụng, đổi bằng write conflict (giải bằng LWW/vector clock/CRDT). Leaderless bỏ hẳn leader, dùng quorum R+W>N cùng read repair và anti-entropy. Khép bằng khung bốn câu hỏi để chọn mô hình — và nhận ra một hệ thật thường trộn nhiều mô hình.

flowchart LR
  SL["Single-leader<br/>1 noi ghi, khong xung dot"] --> ML["Multi-leader<br/>nhieu noi ghi -> xung dot"]
  ML --> LL["Leaderless<br/>quorum R+W>N"]
  LL --> C["Chon theo workload<br/>(4 cau hoi)"]

🗺️ Cheat sheet

Khái niệmCốt lõiPitfall
Single-leaderMọi ghi qua leader; follower áp log; đọc bản nào cũng đượcCoi async ack là đã bền
Sync vs asyncSync = an toàn, chậm; async = nhanh, có thể mất ghiDùng async cho dữ liệu không được mất
Semi-syncMột follower đồng bộ (đảm bảo ≥2 bản)
FailoverLeader chết → chọn follower thayMất ghi async + split-brain
Replication lagFollower trễ hơn leaderĐọc từ follower lag ngay sau khi ghi
Read-your-writesThấy chính thứ mình vừa ghiĐẩy mọi đọc sang follower
Monotonic readsKhông lùi thời gian giữa các lần đọcĐọc luân phiên follower lag khác nhau
Consistent prefixKhông thấy hệ quả trước nguyên nhânBỏ qua khi partition
Write conflictHai leader ghi mâu thuẫn song songLWW mặc định (mất dữ liệu)
Quorum R+W>NTập đọc/ghi giao nhau → thấy ghi mớiCoi quorum = linearizability
Read repair / anti-entropySửa lúc đọc / đồng bộ nền (Merkle)Chỉ dựa read repair (bỏ sót dữ liệu lạnh)

📖 Glossary module

Thuật ngữĐịnh nghĩa 1 câu
Leader / followerNode nhận ghi / node chỉ áp lại log và phục vụ đọc.
Replication logDòng thay đổi có thứ tự leader phát cho follower.
Sync / async replicationLeader chờ / không chờ follower ack trước khi báo thành công.
FailoverQuá trình nâng một follower lên làm leader khi leader chết.
Split-brainHai node cùng tin mình là leader → dữ liệu phân kỳ.
Replication lagKhoảng follower trễ hơn leader.
Eventual consistencyNgừng ghi thì các bản cuối cùng hội tụ (không hứa thời gian).
Read-your-writes / monotonic / consistent prefixBa đảm bảo session chống nghịch lý do lag.
Write conflictHai ghi song song mâu thuẫn lên cùng dữ liệu.
LWWLast-write-wins — giữ ghi timestamp lớn nhất, vứt phần còn lại.
Quorum (R, W, N)Số bản đọc / ghi / tổng; R+W>N đảm bảo giao nhau.
Read repair / anti-entropyHàn bản lệch lúc đọc / bằng tiến trình nền.
Sloppy quorum / hinted handoffNhận ghi vào bản tạm khi bản gốc lỗi, chuyển về sau.

⚠️ Pitfall tổng hợp

  • Async ack ≠ đã bền: báo "đã lưu" khi chưa follower nào có bản → mất khi failover. Đúng: sync/semi-sync cho dữ liệu quan trọng.
  • Đọc follower lag ngay sau khi ghi: vi phạm read-your-writes → "lưu không ăn". Đúng: phân loại đọc theo mức nhất quán.
  • LWW mặc định: mất dữ liệu im lặng + phụ thuộc clock skew. Đúng: chọn resolution theo bản chất dữ liệu (gộp/CRDT/để người dùng quyết).
  • Quorum = linearizability: dùng leaderless cho check-and-set → sai. Đúng: thao tác cần đảm bảo tuyệt đối → consensus (Module 6).
  • Một mô hình cho mọi dữ liệu / chọn theo hype: Đúng: bốn câu hỏi cho từng loại dữ liệu; bắt đầu single-leader.

✅ Self-assessment

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

  • So sánh được single-leader, multi-leader, leaderless theo trade-off nhất quán và khả dụng
    • Nếu chưa: đọc lại bài 05 mục 1-2 và bảng so sánh.
  • Giải thích được replication lag và các đảm bảo read-your-writes, monotonic reads, consistent prefix reads
    • Nếu chưa: đọc lại bài 02 mục 2-5.
  • Thiết kế được conflict resolution cho multi-leader và leaderless (LWW, vector clock, read repair)
    • Nếu chưa: đọc lại bài 03 mục 4 và bài 04 mục 4.

🚀 What's next

Replication giữ cùng dữ liệu trên nhiều node. Nhưng khi dữ liệu quá lớn cho một node, ta phải chia nhỏ nó ra — đó là Module 3 — Phân mảnh (Partitioning). Replication và partitioning thường đi cùng nhau: mỗi partition lại được nhân bản. Bạn sẽ thấy consistent hashing (đã học ở track thuật toán) trở thành công cụ chính để quyết dữ liệu nằm ở đâu.

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

  • Sách: Designing Data-Intensive Applications (Kleppmann) — Chương 5 "Replication".
  • Paper: DeCandia et al., "Dynamo: Amazon's Highly Available Key-value Store" (2007) — kiến trúc leaderless.
  • Paper: Shapiro et al., "Conflict-free Replicated Data Types" (2011) — gộp không xung đột cho multi-leader/cộng tác.

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