一致性哈希

前言

本人目前大四,积极准备秋招中,这里记录大厂经常问的面试题——一致性哈希算法,学习完大佬的文章
链接: link,记录一下自己的学习总结,方便复习

一致性哈希是解决分布式缓存等问题的一种算法。


一、普通hash算法

原理

现需要将图片资源缓存到3台服务器中,编号为0号服务器,1号服务器,2号服务器,希望能够均匀分配图片到每一个服务器中,使用hash算法,若图片名称是唯一的,则将每张图片的名称作为Key,进行哈希。再对n进行取模,n为服务器的台数,这里n为3。那么结果自然落到0,1,2三台服务器上,这就是使用普通的hash算法进行缓存的原理

hash(图片名称)% n

缺陷

当图片资源增多,3台服务器不够存储,再添一台服务器时,该服务器肯定与原来的编号不同,除数的n由3变成了4,这就会造成所有的缓存位置都发生了改变,也就是说,当服务器数量改变时,所有缓存在一定时间内是全部失效的,造成缓存的雪崩,当应用无法从缓存中获取数据,则会向后端服务器请求数据,后端服务器将会承受巨大的压力,可能会将服务器压垮

二、一致性哈希

原理

一致性哈希就是来解决普通哈希的缺陷的。一致性hash也是一种取模算法,但不同的是普通hash是对服务器的数量进行取模,而一致性hash是对固定值2^32取模

IPv4的地址是4组8位2进制数组成,所以用2^32可以保证每个IP地址会有唯一的映射。

步骤

一、一致性哈希算法将整个哈希值空间按照顺时针方向组合形成一个圆环,称为哈希环
二、接着将服务器进行哈希,具体可以选择IP或者主机名作为Key进行哈希,确定其在哈希环上的位置

hash(服务器的IP)%2^32

三、将数据使用同一套hash函数进行哈希,确定其在哈希环上的位置,然后顺序针查询到第一个服务器即为缓存该数据的服务器

hash(图片的名称)%2^32

优点

前面说的普通hash算法在服务器增减时会造成全部缓存的雪崩,从而很有可能造成系统的奔溃。而一致性哈希就可以很好的解决这个问题,一致性哈希对于增减节点只需要重定向环内的一小部分数据,只有部分缓存会失效,不会所有压力都给到后端服务器上,具有很好的容错性和扩展性

哈希环的倾斜和虚拟节点

当服务器数量较小时,因为节点分布不均匀而造成数据的倾斜,就会有大量的数据缓存到某一个服务器上。
在这里插入图片描述
hash环的倾斜在极端情况下也会引起系统的奔溃,解决办法就是引入虚拟节点,将一个服务器使用多个hash去映射,就可以得到多个节点,每个节点都放置一个该服务器节点,被称为虚拟节点,每个服务器节点都对应了多个虚拟节点,分布在hash环上,虚拟节点越多,缓存被均匀分布的概率越大,数据的映射不变,只是多了一层虚拟节点到世纪节点的映射

总结

以上就是一致性哈希的所有内容,是看完大佬的博客后记录一下我的学习成果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值