一致性哈希算法的基本原理

题目:

工程师使用服务器集群来设计和实现数据缓存,以下是常见的策略

1、无论是添加、查询还是删除数据,都先将数据的id通过哈希函数转化为一个哈希值,标记为key

2、如果目前机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行

请分析这种缓存策略可能带来的问题,并提出改进的方案

 

潜在问题是添加或删除机器,代价会很高,所有的数据都需要重新计算一下key值,然后对新的机器数取模操作,然后进行大规模数据迁移

为了解决问题,提出一致性哈希算法,哈希值范围是2^32,也就是0-2^32-1数字空间中

 

首先把该数据的id用哈希函数算出哈希值,并映射到环中相应位置,然后顺时针寻找离这个位置最近的机器,那台机器就是该数据的归属如图1所示,图2表示删除机器和增加机器数据还是顺时针找到最近的机器

还存在的问题就是机器负载不均衡,解决办法就是一致性哈希算法引入虚拟节点机制,即对每一台机器通过不同的哈希函数计算出多个哈希值,对多个位置都放置一个服务节点,称为虚拟节点,如图3所示

也就是说我们让每台机器分配数量较多的虚拟节点去抢占哈希环,数量多起来之后,哈希函数的离散性就可以得到很好的体现,然后每台机器就可以按照虚拟节点的比例来分配负载均衡啦,这就是虚拟节点技术。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值