Database
Consistent Hashing
Hash Ring, Virtual Nodes, Distributed Data Partitioning, DynamoDB/Redis/ELB
1. Vấn đề của hashing thông thường
Modular Hashing (cách đơn giản nhất)
Chia data vào N servers bằng phép chia dư:
Vấn đề: Thêm hoặc bớt server → DISASTER
2. Consistent Hashing là gì?
Thay vì dùng %N, consistent hashing sắp xếp cả keys và servers trên một vòng tròn (hash ring):
Bước 1: Đặt servers lên vòng tròn
Bước 2: Đặt keys lên vòng tròn
Bước 3: Mỗi key đi theo CHIỀU KIM ĐỒNG HỒ đến server GẦN NHẤT
Vòng tròn trải thẳng ra (0 → 10000 → quay lại 0):
3. Thêm / Xóa node
Thêm Server-E (vị trí 6000)
Xóa 1 node (Server-C chết)
4. Virtual Nodes — Giải quyết phân bố không đều
Vấn đề: Servers phân bố không đều trên ring
Giải pháp: Virtual Nodes (vnodes)
Mỗi server THẬT tạo ra nhiều điểm ẢO trên vòng tròn:
Server mạnh hơn → nhiều virtual nodes hơn
5. Ví dụ thực tế trong AWS
5.1. DynamoDB — Partition Key
5.2. ElastiCache (Redis Cluster)
5.3. Elastic Load Balancer (Sticky Sessions)
5.4. CloudFront — Cache Distribution
6. So sánh: Hashing thường vs Consistent Hashing
| Tiêu chí | Modular Hashing (%N) | Consistent Hashing |
|---|---|---|
| Thêm/xóa node | ~75-80% data di chuyển | ~1/N data di chuyển |
| Độ phức tạp | Đơn giản (%N) | Phức tạp hơn (hash ring) |
| Cân bằng tải | Tốt (nếu N cố định) | Cần virtual nodes |
| Scale | ❌ Rất khó | ✅ Dễ dàng |
| Use case | Data cố định, ít thay đổi | Distributed systems, caching |
Tóm lại
Consistent Hashing = cách phân data thông minh để KHÔNG phải xáo trộn toàn bộ khi thêm/bớt server. Kết hợp với Virtual Nodes để đảm bảo phân bố đều, đây là thuật toán nền tảng của mọi hệ thống phân tán hiện đại.