2.2.1.2 一致性哈希分区(Consistent hashing)
原理
- 环形 hash 空间
按常用 hash 算法,将对应的 key hash到一个具有 2^32个桶的空间,即(0 ~ 2^32 - 1)的数字空间中。
将这些数字头尾相连,想象成一个闭合环形:
- 把数据通过一定的 hash 算法映射到环上
- 将机器通过一定的 hash 算法映射到环上
- 节点按顺时针转动,遇到的第一个机器,就把数据放在该机器
- 把对象映射到hash空间
把cache映射到hash空间
基本思想就是将对象和cache都映射到同一个hash数值空间中, 并且使用相同的hash算法
hash(cache A) = key A; hash(cache C) = key C;
在移除 or 添加一个 cache 时,能够尽可能小的改变已存在的 key 映射关系
Consistent hashing 一致性算法
移除 Cache
- 删除CacheB后,橙色区为被影响范围
添加Cache
- 理想的分布式
现实却很拥挤-即倾斜性:
Hash倾斜性
为解决该问题,引入虚拟节点
- 虚拟节点
命中率计算公式:服务器台数n,新增服务器数m
(1 - n/(n + m) ) * 100%