一致性hash(利用hash环将key对应node)

本文介绍了分布式系统中一致性Hash的原理及其实现方式。首先解释了一致性Hash的基本概念,包括其数学模型起源及其如何将节点和键值映射到一个32位的环形空间内。接着阐述了该算法在节点加入或移除时如何保持数据分布的一致性和最小变动范围,以及为解决数据倾斜引入虚拟节点的方法。最后提到了在实际应用中使用连接池的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一致性hash

1.一致性hash原理
1)基础:麻省理工大学97年创建的一个数学模型,后被应用到分布式领域.实现了一个hash映射计算,可以将任意的内存数据对象通过hash散列映射到[0,2^32-1] 。
由于结果是32位二进制,0减一变成2^32-1 最大数加一变成0,这个取值区间称谓hash环
2)数据映射计算:
节点收集信息时,每个节点信息作为一个对象映射到这个环上一个整数
key值作为字符串数据也会映射到这个环上一个整数
在这里插入图片描述
3)KEY与节点对应原则
key的整数顺时针寻找最近节点整数做对应关系
在这里插入图片描述
6380:key1,key5
6379:key3,key4,key6,key7
6381:key2

4)扩容缩容时单调性保证
如果集群节点越多,hash环弧线被分配的越短,对应的数据量越小,根据上述的计算逻辑,新节点加入时,影响的数据单调性
范围越小.所以在一个频繁发生扩容缩容的集群中,分布式计算为了保证单调性一致性hash比hash取余更适合
在这里插入图片描述
4)数据平衡性
当节点相互映射的整数挨的比较近,必定会有某些节点对应key值远远大于其他节点,造成严重的数据倾斜,所以需要解
决这个问题,一致性hash计算逻辑中可以引入虚拟节点.
在这里插入图片描述
通过对虚拟节点的个数控制,还可以做到按照比例的(权重)分片数据.在jedis中实现的虚拟节点个数160*weight 其中
weight 默认是1.
5)连接池
在目前阶段不管是单个Jedis对象,还是分片对象ShardedJedis都是一个对象,应用效率不高,在实际应用中,总要从代码中new出来然后用完了要关闭close.应该引入连接池。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值