一致性hash算法,解决负载均衡问题

2019-06-0522:24:42数据结构与算法Comments2,183 views字数 1026阅读模式

一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用一致性hash算法,就能较好的解决该问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

Hash值取模算法存在的问题文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

比如,我们有海量的图片存储在服务器上,假如,现在有4台服务器,我们可以根据图片名称,采用hash算法,决定图片存储在哪台服务器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性hash算法,解决负载均衡问题

如果现在需要增加服务器,那么存取图片的服务器的算法就会发生改变,比如增加一台服务器后,算法变为hash()/5,这时候计算结果不一定还是2,那么图片的位置就要发生改变。同理,减少服务器的话,也会存在相同问题。而且,所有的服务器都会受到影响。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性Hash算法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性Hash算法将哈希值映射的空间表示成一个虚拟圆环,一般可以设置映射值的范围是0----232-1,也就是说,我们得到的hash值要对232取模。该hash环可表示如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性hash算法,解决负载均衡问题

假如我们有四台服务器,我们可以选择服务器的ip或主机名作为关键字进行哈希,然后取模,每台机器就能在hash环上确定固定位置。如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性hash算法,解决负载均衡问题

例如有Object A、Object B、Object C、Object D四个数据,经过哈希运算及取模后,在环空间上的位置如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性hash算法,解决负载均衡问题

从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。也就是说Object A定位到Node A,Object B定位到Node B,Object C定位到Node C,Object D定位到Node D。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

如果Node C这台服务器出现问题宕机,那么Objcet C定位到Node D这台服务器,所以当某台服务器出问题时,只会对顺时针方向的前一台机器产生影响,本例中,只会对Node D有影响。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

同理,如果增加一台服务器Node X,计算后,定位到如下图所示位置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性hash算法,解决负载均衡问题

那么Object C就会定位到Node X,这种情况,只会对顺时针方向的Node C产生影响,不会影响其他服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性Hash的缺点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

当服务器节点比较少的时候会出现一致性hash算法倾斜的问题(大部分数据存在一台服务器上)。在不改变服务器节点个数的前提下,一般解决方案是增加虚拟节点(即对每一个服务器根据一致性hash算法计算多个值,每个计算结果在环上定位一个服务节点),在定位数据时,就可以根据虚拟节点,定位到实际服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

总结文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13458.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/suanfa/13458.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定