一致性哈希算法的理解与应用

开始

很多场景下都用hash来解决问题,避免了重复的检索.但是会出现一个问题,当服务器数量出现变动时(+&-),所有的位置都会发生改变.例如:redis的缓存等,这样会造成一段时间所有数据都失效,缓存雪崩随之发生.

过程

一致性Hash算法也是使用取模的方法,但不是对服务器的数量进行取模,而一致性Hash算法是对2^32取模.简单说,就是一致性hash算法将整个哈希值空间组织成一个虚拟的圆环,画图说话:


start.png

整个空间按照顺时针方向组织,圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到232-1,也就是说0点左侧的第一个点代表232-1, 0和232-1在零点中方向重合,我们把这个由232个点组成的圆环称为Hash环
下一步将各个服务器使用Hash进行一个哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,这样每台机器就能确定其在哈希环上的位置,这里假设将上文中四台服务器使用IP地址哈希后在环空间的位置如下:

process_1.png

接下来使用如下算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器!
例如我们有Object A,Object B,Object C,Object D四个数据对象,经过哈希计算后,在环空间上的位置如下:


process_2.png

根据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上.

TODO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容