Hệ thống Dữ liệu Phân tán
19/38
Bài 19 / 38~9 phútPhân mảnh (partitioning)Miễn phí… lượt xem

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

Recap partitioning: range vs hash, consistent hashing & rebalancing, secondary index (local/global), request routing. Cheat sheet, glossary, self-assessment.

TL;DR: Module 3 chia dữ liệu lớn ra nhiều node: range vs hash (phân bố đều ↔ range query), consistent hashing (co giãn ít xáo trộn) + rebalancing, secondary index (local ghi-rẻ vs global đọc-rẻ), và request routing (tìm node, dẫn thẳng tới bài toán consensus). Trang này để bookmark trước khi vào transaction phân tán.

Đã đi qua những gì

Bắt đầu bằng cách chia: key-range giữ thứ tự (range query nhanh, dễ hot spot), hash phân bố đều (chống hot spot, mất range query) — và skew của celebrity key mà cả hai đều dính. Rồi consistent hashing giải bài toán co giãn: thay hash mod N (đổi N xáo gần hết) bằng vòng hash + virtual node, chỉ di chuyển phần kề; rebalancing thực dụng dùng số partition cố định. Rồi secondary index — cùng đánh đổi đọc/ghi nhưng áp lên index: local (ghi rẻ, đọc scatter) vs global (đọc rẻ, ghi đắt + async). Khép bằng request routing: ba cách tìm node, và phần khó là giữ mapping đồng bộ — chính là consensus.

Bon quyet dinh cua module do ve mot cau hoi chung

🗺️ Cheat sheet

Khái niệmCốt lõiPitfall
Key-range partitionDải khoá liền → range query nhanhHot spot (khoá timestamp dồn 1 partition)
Hash partitionBăm → phân bố đềuMất range query (scatter/gather)
Skew / celebrity key1 khoá nóng → 1 partitionHash không chia nhỏ được 1 khoá
hash mod NĐơn giản khi N cố địnhĐổi N → xáo gần hết dữ liệu
Consistent hashingVòng hash, chỉ di chuyển phần kề—
Virtual node1 node = nhiều điểm vòng → cân tải—
RebalancingSố partition cố định, gán lạiTự động tức thì → domino
Local indexIndex theo documentĐọc scatter mọi partition
Global indexIndex theo termGhi nhiều partition, async → index lag
Request routingClient/tier/node-forwardCache mapping không làm mới

📖 Glossary module

Thuật ngữĐịnh nghĩa 1 câu
Partition / shardMột phần dữ liệu đặt trên một node.
Key-range partitionChia theo dải khoá liền nhau, giữ thứ tự.
Hash partitionChia theo giá trị hash của khoá, phân bố đều.
Hot spotMột partition nhận phần lớn tải.
SkewTải/dữ liệu lệch giữa các partition.
Consistent hashingNode + khoá trên một vòng; thêm/bớt chỉ di chuyển phần kề.
Virtual nodeMột node vật lý = nhiều điểm trên vòng.
RebalancingDi chuyển partition khi thêm/bớt node.
Local (document) indexMỗi partition index dữ liệu của mình.
Global (term) indexIndex phân mảnh theo giá trị trường phụ.
Scatter/gatherGửi truy vấn mọi partition rồi gộp.
Request routingĐịnh tuyến request tới node giữ khoá.
Dịch vụ coordinationDịch vụ giữ mapping và thông báo thay đổi.

⚠️ Pitfall tổng hợp

  • Chọn cách chia theo thói quen: hash mọi thứ (range query chậm) hoặc range theo timestamp (hot spot ghi). Đúng: chọn theo pattern truy vấn chi phối.
  • Hash để cứu celebrity key: vô ích, một khoá vẫn về một partition. Đúng: thêm hậu tố tách riêng khoá nóng.
  • hash mod N: thêm node xáo gần hết. Đúng: consistent hashing / số partition cố định.
  • Rebalancing tự động tức thì: nhầm chậm với chết → domino. Đúng: có kiểm soát + giới hạn băng thông.
  • Đọc global index ngay sau ghi: index async chưa khớp. Đúng: biết index có thể trễ.
  • Cache mapping không làm mới: request đi nhầm node sau co giãn. Đúng: nguồn sự thật + watch/notify.

✅ Self-assessment

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

  • So sánh được partition theo key-range vs hash và giải thích hot spot, skew
    • Nếu chưa: đọc lại bài 01 mục 2-4.
  • Giải thích được consistent hashing và rebalancing khi thêm/bớt node
    • Nếu chưa: đọc lại bài 02 mục 2-5.
  • Thiết kế được secondary-index partitioning (local vs global) và request routing
    • Nếu chưa: đọc lại bài 03 mục 2-3 và bài 04 mục 2-3.

🚀 What's next

Replication (Module 2) và partitioning (Module 3) cho ta dữ liệu trên nhiều node. Câu hỏi kế: khi một thao tác cần thay đổi nhiều mảnh dữ liệu ở nhiều node cùng lúc, hoặc-tất-cả-hoặc-không, thì sao? Đó là Module 4 — Transaction phân tán: 2PC, anomaly & serializability, và vì sao thường nên tránh distributed transaction.

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

  • Sách: Designing Data-Intensive Applications (Kleppmann) — Chương 6 "Partitioning".
  • Paper: Karger et al., "Consistent Hashing and Random Trees" (1997) — gốc consistent hashing.
  • Paper: DeCandia et al., "Dynamo" (2007) — consistent hashing + virtual node trong hệ thật.

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.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Module 4 — Transaction phân tán: tổng quan