一致性hash一种根据关键字做负载均衡的算法 代码
节点丢失,或者加入的时候,影响的是一小段空间而不是全局数据
一致性hash很难做到完全的负载均衡,都有数据小幅度倾斜
假设有一种算法,可以把节点关键字尽可能的打散均匀的映射到hash空间中,这时候可以完全解决数据倾斜的问题
系统启动的时候负载是做到了均衡,但是当节点丢失,或者新增加节点的时候,一致性hash肯定会再次出现数据倾斜的问题
加虚拟节点(只能降低不能完全解决问题----可以使用上面类似反证法证明)
- 节点丢失的时候,该节点的数据不会完全顺延到下一个节点(使得下一个节点的压力翻倍),可以做到分摊到多个节点上
- 新增加节点的时候,可以分摊多个节点的压力
- 一般多台服务器的处理能力可能不一样,做负载均衡都是会根据处理能力加权的,可以通过控制虚拟节点的个数,来做加权