一致性hash算法

一致性hash算法
出现原因
  • 分布式集群中,通过key 求 hash 取余节点数 决定 访问位置,实现数据分片

  • 当节点数变化时(新增节点,节点出错),需要全部重新计算迁移

一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:
  • 平衡性(Balance) : 均匀分布,平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。
  • 单调性(Monotonicity):节点发生变化时,尽量不影响原有数据的保存位置,尽可能减少因为节点变化导致原有数据的存储位置的变化。
  • **分散性(Spread):**在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。
  • 负载(Load):
原理
  • 一致性hash是对2^32取模, 假设有一个圆环:
    • 对2 ^32取余是有依据的IPV4最大数量就是2^32,所以这样就能保证所有的ip的地址进行取余时不会重复—对应hash环上面的正数。
    • Alt text
  • 服务器位置确定(假定3台服务器ABC):
    • 用服务器IP地址进行hash计算,使用hash后的结果改过对2^32取模,落在环上
    • Alt text
  • 从哪台服务器获取或者保持数据?
    • hash(key) % 2 ^ 32 落在环上
    • Alt text
    • 沿着顺时针方向遇到的第一个服务器就是A服务器,所以会被缓存到A服务器上
一致性hash算法的优点
  • 当服务器节点数量变化的时候只有一部分数据失效
hash环偏斜问题
  • 集群集中在环的一部分,分布不均匀
虚拟节点
  • 将一个实际服务器节点映射在环上的多个虚拟节点

  • 虚拟节点”的hash计算可以采用对应节点的IP地址加数字后缀的方式

    • Hash(“192.168.1.100#1”); // NODE1-1
  • 虚拟节点越多,hash环上的节点就越多,缓存均匀分布的概率就越大
使用一致性hash算法框架
  • cassandra 集群
  • redis集群

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值