余数hash和一致性hash

在分布式系统中,为了将数据均匀的分布到各个节点,保证节点之间的均衡,一般会通过hash的方式将数据分配的到各个节点。今天简单描述两种哈希方式:余数hash和一致性hash。

余数哈希

余数哈希是一般通过对数值取模的方式来获得hash值,比如数据为367,有20个子节点,那么367会根据367%20=7,分配到编号为7的子节点。那么接下来的问题是实际处理的数据基本不是数值,所以需要根据业务场景自定义一个映射关系,将数据(基本)均匀的映射到某个数值空间。
优点:方法简单高效
缺点:容错性和扩展差,即面对节点个数变化(增加节点或者减少节点)时,不能够自适应的调节。

一致性hash

一致性hash是将n个节点从逻辑上连成一个闭环,自定义一个映射f(x),将每个节点都会对应正数区间[0, +∞],同样也会有另外一个映射g(x),将待处理的数据映射到同样的区间。待处理数据被分配到顺时针方向和它最近的节点。如下图,g(待处理数据)会沿顺时针方向,找到和它最近的f(节点2),然后分配到第2个节点处理。
在这里插入图片描述
如果节点2出现异常,那么g(待处理数据)会顺延(顺时针方向)到和它最近的节点。
如果在节点2和节点3之间新增一个节点,那么原来落到节点2和3之间的数据,则会被新增节点分担。
这样一致性hash就解决了余数hash的容错性和兼容性差的问题。

更多内容,欢迎关注“机器爱学习”公众号~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值