博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一致性哈希算法的理解
阅读量:5986 次
发布时间:2019-06-20

本文共 802 字,大约阅读时间需要 2 分钟。

关于一致性哈希算法,网上有很多博文都有讲解。推荐2个。

总结一下:

  1. 网上博文的例子都将hash值的结果定义在0 - 232-1,实际上也是非必要的,你可以设定的比这个范围小,或者比这个范围大,都是可以的,重要的是它是一个环。

2.一致性哈希并不保证节点被映射的均衡性,假设哈希值是均衡的,那么节点要被均衡的映射,就必须让各个节点之间的距离相等,也就是说各个节点平分环的周长。

3.当存在故障节点后,一致性哈希并不保证故障节点上的值能通过算法恢复(除非已实现主备机制)

4.当故障节点被移除,故障节点的下一个节点的压力会增加(如果各个节点的压力是均衡的,那么压力增加1倍)。

5.当插入新节点,一致性哈希算法并不能避免重新hash步骤,但是不需要把所有的数据都重新hash一遍,只需要hash一部分。这种方式将hash的范围减到最小,仅仅是将新节点的前一个节点的一部分数据,归还给新节点。

6,当哈希算法的值不均衡时,环上的各个节点的压力也是不均衡的。可以采用添加虚拟节点的方式,使平衡。可以在热点节点的后面,插入多个虚拟节点,一旦映射落到虚拟节点上,再通过其他的hash算法,映射到压力较低的节点。采用的算法可以是简单粗暴,比如举个栗子:

如下图,在没有虚拟节点的时候,假设由于hash算法的不均衡性,落在节点4和节点5的hash值特别多,势必造成节点5的压力比较大,而此时如果节点6和节点2的压力有比较小,那么在节点4和节点5之间插入2个虚拟节点(节点a和节点b),根据一致性哈希的算法,节点a和节点5之间的hash值落到节点5上,节点a和节点b的hash值落在节点a上,节点b和节点4之间的hash落在节点b上。但是节点a和节点b是虚拟节点,因此可以强制的让节点a映射到节点6,节点b强制映射到节点2,这样,节点5的压力会减轻,从而使得所有节点负载相对均衡。

以上是一些总结,如有不对,欢迎指出纠正。

转载地址:http://idulx.baihongyu.com/

你可能感兴趣的文章
数据结构-树
查看>>
rdc第二天
查看>>
深入理解Java虚拟机之类加载机制
查看>>
安卓7.0版本及以上 html2canvas 无法获取内部canvas内容
查看>>
一天一个知识点 - 浅谈 JavaScript 作用域
查看>>
小猿圈python知识点分享之tablib模块的使用
查看>>
1.了解web缓存
查看>>
JavaScript进阶系列-偏函数、柯里化
查看>>
k8s分布式存储,使用rancher将jenkins workspace部署在nfs上
查看>>
解决df -h卡死问题
查看>>
如何避免公司以试稿为由盗用设计作品?
查看>>
HTML基础-1
查看>>
我的友情链接
查看>>
CentOS下高并发socket最大连接数所受的各种限制
查看>>
ffmpeg对amr格式编解码
查看>>
前端技术博客&文章记录
查看>>
Android获取联系人
查看>>
国产桌面CPU性能大比拼:龙芯3A3000怒拿第一
查看>>
spark1.3.0__for_hadoop2.4.1编译、安装与初步测试
查看>>
面试8大雷区禁入
查看>>