概况
一致性hash算法这里就不描述。补充算法作用在虚拟节点和实际节点的映射上。算法保证,整个系统,无论哪些节点宕机,幸存节点的HASH空间还是均匀分配。
算法介绍
假设系统运行时最大节点数量为m,那整个HASH环,均匀分配m*(m-1)个虚拟节点。那这些节点怎么分配,能够达到算法目的?
先为每个物理节点编号,0、1、…、m-1
按逆时针顺序:
前m个虚拟节点分配给:0、1、…、m-1 计算公式:虚拟节点组内序号x1%m
第二组m个虚拟节点分配:0、2、4、…、1、3、5、 计算公式:虚拟节点组内序号x2%m
…
第m-1组m个虚拟序号分配:0、m-1、2x(m-1)%m、…、(m-1)x(m-1)%m 计算公式:虚拟节点组内序号x(m-1)%m
可以看图更直观,图中物理节点序号从1开始,和上面算法有些偏差。去掉任意1个节点、多个节点,剩余节点的HASH空间分配还是均匀。
最后
太麻烦了,没用数学证明。希望对其他人有用,我也能获得快乐。