一致性Hash原理

一致性hash的特性
单调性(Monotonicity),单调性是指如果已经有一些请求通过哈希分派到了相应的服务器进行处理,又有新的服务器加入到系统中时候,应保证原有的请求可以被映射到原有的或者新的服务器中去,而不会被映射到原来的其它服务器上去。

分散性(Spread):分布式环境中,客户端请求时候可能不知道所有服务器的存在,可能只知道其中一部分服务器,在客户端看来他看到的部分服务器会形成一个完整的hash环。如果多个客户端都把部分服务器作为一个完整hash环,那么可能会导致,同一个用户的请求被路由到不同的服务器进行处理。这种情况显然是应该避免的,因为它不能保证同一个用户的请求落到同一个服务器。所谓分散性是指上述情况发生的严重程度。好的哈希算法应尽量避免尽量降低分散性。 一致性hash具有很低的分散性

平衡性(Balance):平衡性也就是说负载均衡,是指客户端hash后的请求应该能够分散到不同的服务器上去。一致性hash可以做到每个服务器都进行处理请求,但是不能保证每个服务器处理的请求的数量大致相同

虚拟节点
当服务器节点比较少的时候会出现上节所说的一致性hash倾斜的问题,一个解决方法是多加机器,但是加机器是有成本的,那么就加虚拟节点

有时候使用虚拟节点后的图会使得比较均衡,但是如果生成虚拟节点的算法不够好很可能会得不均匀的一致性hash环
可知每个服务节点引入1个虚拟节点后,情况相比没有引入前均衡性有所改善,但是并不均衡。
均匀一致性hash的目标是如果服务器有N台,客户端的hash值有M个,那么每个服务器应该处理大概M/N个用户的。也就是每台服务器负载尽量均衡
简书一致性Hash原理
CSDN一致性hash

一致性hash的缺点:
现在我们来讨论一致性哈希在池中只有少节点情况下的问题:

如果我们设置了五个节点,而我们执行了3轮(每轮分配5次)一共分配15次,被使用的节点只有0、1、2、3号4个节点。而4号节点一次都没有分配出去,如果是在需要服务器负载调整的情况下,那么4号节点的服务器将处于完全空闲的状态(因为一次都没有被分配到任务)。

但是我们相信只要执行的次数够多,总的负载最终都会均衡。

由此我们可以得出结论一致性哈希在大批量的负载请求的情况下效果很好,但是在短期,少量的负载请求的情况下,会出现单位时间内某个节点完全空闲的情况出现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值