温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
算法设计一致性哈希设计思想。首先,我们要知道普通的哈希运算存在的使用缺陷。以ddi集群为例,集群当中有多台ddi服务器,当某个key需要去定位或者添加到某一台服务器时,需要经过哈希取模机器数量的运算来具体定位到某一台服务器。那么这个时候如果有一台服务器宕机,就会发生机器数量改变的情况,那么为了保证计算的准确性,就要重新定位所有在集群上的key。那么这样的操作消耗比较高,一致性哈希就是为了解决这个问题,它可以尽可能的降低分布式环境下通过哈希定位运算确认元素位置的集群服务受机器数的影响。我们来看一下它的实现原理。
01:02
也就是避免使用固定值取模进行定位,改为范围定位的方式。Java中哈希的最大值是。Int最大值二的32次方,所以可以将零到二的32次方减一看做成一个圆环,代表所有的哈希值。Di集群进行哈希运算,计算出Di节点具体的哈希值。当某一个key同样经过哈希运算,计算出在圆环上的位置。计算出之后通过顺时针的方式找到离它最近的那台服务器。作为它添加或者查找的服务器,那么这个时候如果有服务器发生宕机,影响的也仅仅是相邻两台节点之间的元素,只需要重新定位这些元素。可以降低整体的影响。最后我们看一下存在的问题和解决的方案。
02:04
比如说分布式节点只有两台,NOTE1和NOTE2,那么顺时针分布的元素,NOTE1上分布的元素比NOTE2要大很多,所以就会导致负载不平衡的现象。那么为了解决这个问题,引入多个虚拟的节点。通过多个虚拟节点的分布来降低数据分布不均匀的情况。那么虚拟虚拟节点也可以成为虚拟主机,是通过哈希IP值井号一到N来进行哈希运算。
我来说两句