Chủ đề: Partitioning, Sharding, Consistent Hashing, phối hợp với Replication — và bài toán khó nhất: resharding hệ đang chạy.

Luận điểm trung tâm của phần này

Partitioning là câu trả lời cho câu hỏi cuối cùng của scale: khi một node không chứa nổi / phục vụ nổi toàn bộ dữ liệu thì sao? Chia dữ liệu ra N node — nhưng cái giá là mất những gì “một node” cho không: transaction toàn cục, join tùy tiện, thứ tự toàn cục, và sự đơn giản. Vì thế nguyên tắc số một, nhắc lại từ 1.5: sharding là phương án cuối, sau khi index/cache/replica/scale-up đã hết bài — và là phương án gần như không có đường lùi.

Mục lục

Ba khái niệm hay lẫn — phân định một lần

Chia gìGiải bài toán gìVí dụ
Partitioning (trong node)Một bảng → nhiều phần trên cùng nodeQuản trị + quét: DROP partition cũ, prune khi queryPostgreSQL partition theo tháng (5.1 §7)
Sharding (ra nhiều node)Dữ liệu → nhiều node, mỗi node một phầnVượt trần ghi/dung lượng một máyCitus, Vitess, MongoDB sharded (5.3)
ReplicationNhân bản toàn bộ ra nhiều nodeAvailability + scale đọc4.2

Hệ lớn dùng cả ba chồng nhau: bảng partition theo thời gian, nằm trong shard theo tenant, mỗi shard có replica — ba lớp, ba mục đích, đừng để một từ “chia dữ liệu” che mất ba quyết định riêng.

Sợi chỉ đỏ của cả phần

Mọi chương đều xoay quanh một sự thật: sharding đứng trên giả định tải phân bố đều theo key, và thực tế phá giả định đó bằng luật lũy thừa. Hot partition (13.2), celebrity problem, tenant khổng lồ — thiết kế partition tốt không phải thiết kế cho phân bố đều, mà là thiết kế biết trước phân bố sẽ lệch và có sẵn đường xử lý.