Consistent Hashing
Consistent Hashing (băm nhất quán) là một kỹ thuật phân phối dữ liệu vào nhiều node (shard, cache server, database...) sao cho khi số lượng node thay đổi (thêm hoặc bớt) thì chỉ có một phần nhỏ dữ liệu cần được phân phối lại, thay vì toàn bộ.
🔄 Tại sao cần Consistent Hashing?
Giả sử bạn đang dùng công thức phân shard kiểu cũ:
Với N = 4
, hash("user123") % 4 = 2
. Nếu bạn thêm 1 shard (N = 5), hash("user123") % 5 = 3
. Như vậy:
→ Gần như toàn bộ dữ liệu sẽ được map sang shard khác → gây load, downtime, resharding phức tạp.
🧠 Consistent Hashing hoạt động thế nào?
1. Biểu diễn các node và key trên một vòng tròn ảo (hash ring).
Hash từng node thành một giá trị từ 0 → 2³² rồi xếp lên vòng tròn.
Hash từng key vào vòng tròn → gán key cho node kế tiếp gần nhất theo chiều kim đồng hồ.
2. Khi thêm node mới:
Chỉ key nằm giữa node mới và node trước đó bị ảnh hưởng. → Chỉ cần di chuyển một phần nhỏ dữ liệu, thay vì toàn bộ.
🛠 Ví dụ đơn giản:
Vòng hash có 4 node: A, B, C, D (với các hash như 100, 200, 300, 400).
Key
"user123"
hash = 250 → nằm giữa B(200) và C(300) → gán cho C.Nếu thêm node E tại 260:
"user123"
vẫn hash = 250 → giờ gán cho E.Chỉ key trong đoạn (200, 260] bị thay đổi.
🎯 Lợi ích của Consistent Hashing:
⚖️ Cân bằng tải
Key phân bố đều hơn trên nhiều node
🔄 Dễ mở rộng
Thêm/bớt node ít gây xáo trộn dữ liệu
🔧 Linh hoạt
Dễ tích hợp với các hệ thống phân tán (Redis Cluster, Cassandra, Kafka, ...)
💡 Tối ưu Consistent Hashing: Virtual Nodes
Mỗi node được map thành nhiều "virtual node" trên vòng hash.
Giúp phân phối key đều hơn, tránh tình trạng một node nhận quá nhiều key.
🔚 Kết luận
Consistent Hashing là giải pháp chủ chốt để scale hệ thống mà không phải reshard toàn bộ. Nó giảm thiểu ảnh hưởng khi thêm/bớt server, là nền tảng của rất nhiều hệ thống phân tán lớn hiện nay.
Last updated