分佈式緩存集群N台節點,路由算法hash(key) % N。當節點變動:
N→N-1,近100%鍵值重新映射,緩存雪崩直擊後端DBN→N+1,同理導致大面積失效這是單調性違背:新增節點應盡量保持原有映射不變,僅影響必要範圍。
將哈希值空間[0, 2^32-1]首尾相連成環。
對象object1~4經hash()得到key1~4,順時針分布於環上。
節點A、B、C用IP/主機名哈希得到keyA、keyB、keyC,同樣分布於環上。
從對象key出發順時針,遇到的第一個節點即為歸屬節點。
示例:object1→A、object2、3→C、object4→B。
object4(B逆時針到C間)重映射到Cobject2重映射到D結論:僅影響逆時針方向下一個節點間的對象,完美滿足單調性。
少量物理節點(如2台)在環上分布稀疏,導致對象極不均勻(一台存90%)。
K個虛擬節點(副本數),如K=2時:A1、A2、C1、C2hash("IP#1")、hash("IP#2")效果:虛擬節點越多(典型100-200),負載分佈越均勻,新增/移除節點時數據遷移量越平滑。
150-200,平衡內存佔用與均勻度K=300 vs K=100)一致性哈希是分佈式系統擴縮容平滑、負載均衡、去中心化的基石算法,Redis Cluster、Dynamo、Cassandra、Kubernetes Service Proxy均採用其變體。