6、一致性哈希

126 阅读2分钟

一致性哈希是什么?使用场景?解决了什么问题?

一致性哈希是什么:是一种特殊的哈希算法, 目的是解决分布式缓存问题。在移除或者添加一个服务器时,保证原来分配到的某个节点,现在任然应该分配到那个节点,将数据迁移量降到最低。

使用场景:dobbo的负载均衡、存储数据的节点水平切分、redis集群使用了相关思想

解决了什么问题:主要就是解决当机器减少或者增加的时候,大面积的数据重新哈希的问题。

1、当节点宕机时数据记录会被定位到下一个节点上

这点好理解,当某台机器宕机时,将原机器上的所有数据迁移到下一个节点即可

2、当新增节点时,相关区间内的数据记录就需要重新哈希

新增一个节点时,会将新机器哈希之后放在哈希环上,原先哈希环中,假如有D0、D1、D2三个机器节点,新增的机器D4落在D2、D1之间,那么之前数据哈希到D2、D4之间的数据需要重新哈希并存入到新机器D4上。

clipboard.png

一致性哈希会遇到的问题:

数据倾斜问题:即哈希环上存在的服务节点少,且两个服务节点位置太近,这是会出现大多数数据存储到第一个节点上的现象

解决:虚拟节点:即将每个服务节点通过多次哈希之后放入多个虚拟节点在哈希环上,这样可以削弱甚至避免数据倾斜问题,同时数据定位算法不变,只是多了一步虚拟节点到实际节点的映射。