Hệ thống Dữ liệu Phân tán/Module 3 — Tổng kết & cheat sheet
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.

flowchart LR
  A["Range vs hash<br/>phan bo ↔ range query"] --> B["Consistent hashing<br/>co gian it xao"]
  B --> C["Secondary index<br/>local vs global"]
  C --> D["Request routing<br/>-> consensus"]

🗺️ 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?

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