一致性哈希

    分布式哈希表是分布式存储系统中常见的一项技术,是哈希表的分布式扩展。一致性哈希是其中的一种。

1、普通哈希分布带来的问题

(1)新增或者减少节点都会引起所有key的失效

(2)分布不均衡,比如数据倾斜(即大部分数据分布到了其中一个哈希节点中)

2、一致性哈希算法

思想:给系统中的每个节点分配一个随机Token,这些Token构成一个哈希环。在执行数据存放操作时,先计算key的哈希值,然后按顺时针方向,将其存放在第一个大于等于该key哈希值的token所在的节点上。

优点:新增或者减少节点只会影响相邻节点,对其它节点则不会有影响,所以只会有部分key失效

具体的原理详见 https://blog.csdn.net/sparkliang/article/details/5279393

3、改进

(1)引入虚拟节点:

   原因:i、机器节点映射到换装结构的位置是随机的,可能会导致机器负载不均衡

              ii、在大规模数据中心中,各个物理机的性能不一定都相同,上述一致性哈希算法将它们平等对待,可能存在在较低配置机器上负载高的情况

   思想:将一个物理节点虚拟成若干虚拟节点,分别映射到一致性哈希的环装结构的不同位置。

(2)每个节点加入路由信息,方便快速查找

        方法有三种:

        i、每一台服务器记录其前后节点的位置信息。空间复杂度为O(1),时间复杂度为O(N)。因为每一次查找都有可能要查找所有服务器

        ii、每台服务器维护一个大小为n的路由表(假设哈希空间大小为0~2n)。假设p为服务器在哈希环中的一个编号,其路由表中第i个元素记录了编号为p+2i-1的后继节点。空间复杂度为O(logn),时间复杂度O(logn)

       iii、每台服务器记录所有节点的位置信息。空间复杂度O(n),时间复杂度O(1)。(工程上一般使用该方法)。

猜你喜欢

转载自www.cnblogs.com/youhongpp/p/8977310.html