浅谈一致性hash原理

一致性hash的作用

  • 一致性hash常用于实现负载均衡,并在增加节点的情况,极大降低数据迁移的代价

hash函数的重要性质

1.输入域无穷大,输出域又穷

2.输入一样,输出一定一样

3.输入不一样,输出也可能一样

4.输出在输出域均匀分布

5.输入数据差别很小,输出可能差别巨大

引申特性:可以通过输出域(模)%m,可将输出域缩减到0~(m-1),当然缩减后也是均匀分布


以下以通熟易懂的案例浅析一致性hash

假设有三台后台机器,怎么均分接收到的请求?

如果需要增加一台机器,怎么还保证负载均衡,而且原有数据也均分在四台机器当中?


一致性hash原理

把hash函数输出域当作一个环,利用hash函数计算出三台机器在环上的位置(例如通过机器的ip地址,或者mac地址作为输入)

接收到的每个请求,也进行hash计算,输出会在环上的某个位置,顺时针找到离自己最近的机器(因为输出域是有序排列,可以将每个机器的hash值保存为有序数组进行二分查找,并找到该请求属于哪台机器)

假如key计算出来在machine0-machine1区间,那么就是machine1处理这个区间的请求,存值和取值道理一样


添加机器

这种扩容方式很明显存在问题

机器很少的情况下,很难保证它们掌管的域一样大

解决方案:虚拟节点

每台机器维护1000个虚拟节点,通过任意一个虚拟节点值都能找到真实的物理机器

对这些虚拟节点进行hash计算,这样3台机器就相当于把整个环分成3000份,每台机器几乎均匀分布

增加机器也很容易,同样维护1000个虚拟节点进行计算,并插入环,再进行数据迁移,这样向当于均匀的分担已有三台机器负责的域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值