一致性哈希的原理

一致性哈希一般使用在有均衡分配需求上。

解决类似于在一个服务器集群之中,只有其中某几台服务器接受了大量的请求,而剩下的服务器接受的请求寥寥无几的情况。

一致性哈希可以将所有请求大致均匀的分配给所有的服务器,可以解决某几个单独服务器由于请求过多导致的响应变慢的情况。

一致性哈希的核心设计

        将服务器(或者线程等各种需要分配的)视为一个节点分布在一个环上。并为每个节点生成一个哈希值作为标记。当一个请求到来时,就为请求生成一个哈希值。之后比较该哈希值与哪一个节点的哈希值更加接近,将请求分配给与其最接近的那一个服务器。

        但这样依然存在问题。1.是由于节点在环上的位置是依靠哈希值来标定的,如果哈希某一个节点的哈希值与其他节点的哈希值相差过大,那么该节点依然会存在分配不到任务的情况出现。2.哈希值生成的均匀性,如果哈希值生成算法生成的哈希值不够均匀那么就算节点在哈希环上再这么均匀分配,在分配任务时依然不会是均匀分配的。

        为了解决问题1,一般采用的是使用虚拟节点的解决方案,就是为每一个真实节点生成1个或者多个(根据自身的使用场景来确定个数),虚拟节点。虚拟节点也是分配在哈希环上,但是其接收到的请求是其实交给其绑定的真实节点处理。这样只要虚拟节点的数量足够那么在哈希环上每一个节点之间的的哈希值也是均匀的,那么每个节点接收到请求的机会也就是均等的。就像下图一样,我们将与真实节点1接近的虚拟节点1作为真实节点1 的绑定节点,真实节点2作为虚拟节点2的绑定节点以此类推。(也不一定每一个节点都只绑定一个节点,还是根据自身的绑定算法来作为实际)

        解决问题2,使用可以生成足够离散的哈希值的哈希值生成算法,当每一个哈希值之间的值足够离散,那么为它们分配的服务节点也就会足够的离散,所有的请求的分配也就足够的平均。

一致性哈希应用步骤

1.创建哈希环

根据需求确定哈希环的节点数,如果服务器为4台,那么我们将生成4个节点,并且配套若干个虚拟节点,为所有的节点与虚拟节点都生成哈希值,并且将虚拟节点也指向真实节点。

2.接受并分配请求

当出现请求时,将先生成出请求的哈希值,将该哈希值与哈希环上的所有节点的哈希值进行比较,取与自己最接近的节点作为请求处理节点。

确定节点之后,就将该请求发往该服务器进行处理。

注:实际的一致性哈希的完整使用代码已经在

https://blog.csdn.net/clh01s/article/details/88556629

这篇博客中贴出,如有需要请自行查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值