一致性hash理解
一句话解释:当新增或者删除节点时,原有的数据能够保旧的数据能够按照老算法映射到数据所在的服务器,而新的数据能够按照新的散列算法映射到数据所在的服务器。
问题
- 原有的hash算法,当新增或者减少节点时,会导致近乎全局的数据移动。如果用在缓存中,那么大量的缓存会在某个时刻失效,将会导致系统的震荡。
解决
- 一致性hash。
- 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏:
- 平衡性:结果尽可能均匀分布
- 单调性:新增或删除节点不会影响原有的分配
- 分散性:相同内容被hash到不同的节点的严重程度,应尽可能避免
- 负载:对于一个特定的分区可能被不同端映射为不同的内容
引入问题
- 一致性hash能够较好的解决单调性、分散性和负载的问题,但是没有很好的解决平衡性。当其中一台机器挂了,它的数据统一迁移到另一台机器后可能引起另一台机器超负荷,从而导致机器服务的雪崩。
解决
- 可以通过“虚拟节点”解决一致性hash平衡性的问题。
- 虚拟节点的具体实现