一致性hash

分布式环境通过水平扩容,可以有效应对高并发场景,提高系统的吞吐量,负载均衡可以高效利用服务集群的资源。实现负载均衡就是维护一份请求和服务之间均匀映射关系,为了高效映射,通常使用hash映射。当服务数量固定的时候,我们总可以通过不断调整使得请求均匀转发到服务上,当服务减少或者增多时,一则是需要将服务数据进行迁移,比如服务上的缓存,二则,如果不及时调整,可能会导致负载失衡,一致性hash算法可以同时有效解决这两个问题。

传统使用hash函数映射请求和服务器,是将服务器的数量作为hash空间数量,当服务器数量增加或者减少时,需要所有key的映射关系都要变化。一致性hash函数,为了方便水平扩展,hash空间通常远远大于服务器数量,将所有hash空间映射到一hash环上,并且将服务器均匀放在hash环上的不同位置上,每来一个请求,计算key对应hash空间,瞬时间遍历,遇到的第一个服务器就是接受请求服务器。比如下图中,服务器S4挂了之后,只有映射到S3和S4哈希空间的key映射关系发生了变化,也只需要将S4的数据移动到S0上,其余映射都没有发生变化,保证了大多数key的映射与之前映射是一致的。
在这里插入图片描述
应为hash空间远远大于服务器数量,一个服务器下线,就需要将原本这个服务器的负责的hash空间全部转移给另外一个服务器,希望一个服务器下线只有,原本这个服务器负责的服务节点能够尽可能均匀的分配给其余剩余的节点,增加虚拟节点可以解决这个问题,原理如下图。
S4被移除后,原本S4负责的hash空间,现在分给了S0、S1、S3。
在这里插入图片描述
使用一致性hash还可以实现异质性,针对内存大、磁盘大和性能好可以多设置些虚拟节点,增加承载能力。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值