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ệm | Cốt lõi | Pitfall |
|---|---|---|
| Key-range partition | Dải khoá liền → range query nhanh | Hot spot (khoá timestamp dồn 1 partition) |
| Hash partition | Băm → phân bố đều | Mất range query (scatter/gather) |
| Skew / celebrity key | 1 khoá nóng → 1 partition | Hash 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 hashing | Vòng hash, chỉ di chuyển phần kề | — |
| Virtual node | 1 node = nhiều điểm vòng → cân tải | — |
| Rebalancing | Số partition cố định, gán lại | Tự động tức thì → domino |
| Local index | Index theo document | Đọc scatter mọi partition |
| Global index | Index theo term | Ghi nhiều partition, async → index lag |
| Request routing | Client/tier/node-forward | Cache mapping không làm mới |
📖 Glossary module
| Thuật ngữ | Định nghĩa 1 câu |
|---|---|
| Partition / shard | Một phần dữ liệu đặt trên một node. |
| Key-range partition | Chia theo dải khoá liền nhau, giữ thứ tự. |
| Hash partition | Chia theo giá trị hash của khoá, phân bố đều. |
| Hot spot | Một partition nhận phần lớn tải. |
| Skew | Tải/dữ liệu lệch giữa các partition. |
| Consistent hashing | Node + khoá trên một vòng; thêm/bớt chỉ di chuyển phần kề. |
| Virtual node | Một node vật lý = nhiều điểm trên vòng. |
| Rebalancing | Di chuyển partition khi thêm/bớt node. |
| Local (document) index | Mỗi partition index dữ liệu của mình. |
| Global (term) index | Index phân mảnh theo giá trị trường phụ. |
| Scatter/gather | Gử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ụ coordination | Dị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
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