>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19620 个阅读者 刷新本主题
 * 贴子主题:  一致性哈希算法的理解 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-03-15 20:56:04     消息  查看  搜索  好友  邮件  复制  引用


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

http://blog.codinglabs.org/articles/consistent-hashing.html

http://blog.csdn.net/cywosp/article/details/23397179

总结一下:
  1.   网上博文的例子都将hash值的结果定义在0 - 2<sup>32</sup>-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的压力会减轻,从而使得所有节点负载相对均衡。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
以上是一些总结,如有不对,欢迎指出纠正。



----------------------------
原文链接:https://www.bloghome.com.cn/user/cnn237111

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-16 11:33:52 重新编辑]
  Java面向对象编程-->类的生命周期
  JavaWeb开发-->Servlet技术详解(Ⅱ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->安全网络通信
  精通Spring-->Vue简介
  Vue3开发-->Vue CLI脚手架工具
  64匹马,8个赛道,找出跑得最快的4匹马
  图像基本处理算法的简单实现
  深度学习之图片压缩算法
  基于SQL的数据库算法研究
  Haproxy支持的调度算法
  算法之原码、补码、反码
  令牌桶算法
  无向图的最短路径求解算法之——Dijkstra算法
  ipvsadm及lvs的调度算法
  全排列的六种算法
  面试官问我:什么是消息队列?什么场景需要他?用了会出现什...
  微软面试题:买卖股票的最佳时机
  比较迭代和递归:人理解迭代 ,神理解递归
  分析递归和迭代的区别、优缺点及实例对比
  RSA算法的数学原理
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。