这里默认读者已经知道了一致性hash算法的原理。

1、 为什么在某台机器宕机之后consistent hash算法能够避免所有或者大部分key重新hash?

首先需要弄清的是,如果某一台机器宕机之后,在没有冗余备份的情况下,必定有一部分数据会丢失的。所丢失的这部分数据正是缓存在这台机器上面的。其他数据不会受到影响。其他的数据只需要按照原来的方式hash,顺势正便可寻找到对应的机器。如果使用的是普通的hash算法,当某台主机宕机之后,基本上所有数据所哈希的结果都会发生改变,从而寻找不到数据所对应的主机,这时候,如果使用在内存缓存集群上面,基本上所有的数据读取请求都会转向硬盘,导致严重的集群IO压力和时间延迟。

2、为什么在增加一台机器之后整个集群中内容不需要重新hash?

在没有虚拟节点的情况下,如果增加了一台新的节点,受影响的数据也只是现在能够hash映射到这个节点上面的数据。而其他的数据是不受到影响的。如果存在虚拟节点,同样的道理,受到影响的数据也只是现在能够hash映射到这些虚拟节点上面的数据。如果这个集群是一个内存缓存系统,那么整个集群受到的影响可以忽略不计。

3、consistent hash算法是如何避免很多数据hash到某台机器,而其他机器却是空闲的?也就是集群具备有一定的负载均衡的能力。

consistent hash算法的负载均衡能力是相对的,因为它是通过增加虚拟节点来实现的,而相邻的两个虚拟节点之间还是可能存在负载不均衡的情况,只是从整个集群的角度来衡量的话,它大致是负载均衡的。

consistent hash算法容许整个集群的节点发生变化的时候可以有微小的变动。比如某台机器宕机之后其他机器上面的数据不会受到影戏,新增一台机器后所受到影响的数据也只是小部分。这些微小的牺牲所换来的好处却是巨大的,首先,使用consistent hash算法使得整个集群不同节点之间的关系变得很简单,关系逻辑很简单,不需要额外的master节点,所有的节点都是平等的,这减轻了很大的系统开销。其次,consistent hash算法本身保留了普通hash算法的优点,能够快速定位数据对应的主机节点。可以所consistent hash算法是短小精悍简单粗暴的。在consistent hash算法的基础之上,我们可以私人定制一些特殊的功能,从而满足特定的需求,比如可以在此基础之上增加集群冗余备份的能力。

一个关于改进consistent hash算法的思考:

  • 问题:一个使用了consistent hash算法的集群中的各个主机节点的计算能力是不一样的,有可能差别比较大。如果某一个节点的计算能力比较低,那么,如果依然按照原来的consistent hash算法,所造成的结果便是所有的计算量被均匀分摊给每一个节点。而合理的情况应该是,拥有不同计算能力的节点应该分摊到不同的计算量,能者多劳。针对这个问题,本人提出了下面的改进方案!
  • 改进方案:根据每一个主机节点的计算能力划分权重,计算能力越强权重越大。权重越大所划分的虚拟节点的个数也就越多。如果所有的虚拟节点能够均匀地分布在0~2^23-1的环上面,那么对应虚拟节点越多的主机所分摊的实际数据量也就会越多。这样的话,就解决了上面所述的问题。这样的话,问题的难点就落在:1、如何评判一个主机节点的计算能力?2、如何把所有的虚拟节点均匀地映射在圆环上面(这里没有必要绝对均匀)?对于第一点是比较容易解决的,可以根据该主机节点的内存、CPU信息、IO信息等评判;对于第二点,我们只需要做到相对均匀,但是时间复杂度必须是0(1),否则就失去了改进的价值。

关于consistent hash的思考及改进方案相关推荐

  1. 【思考进步】2022年1月读书思考和改进方案

    一.进度总结 先给出结论,按之前预想的进度来说,是失败的. 再次基础上,我经过反思得出一些结论和后续建设性的改进方案,希望给自己和想读书的各位一些启发. 二.理想进度和实际进度的差别 首先是进度上的严 ...

  2. 图像检索:图像拷贝检索PHash改进方案

    感知哈希是用来做图像拷贝检索(Copy Detection)最容易操作的一种方法,实际上除了感知哈希.均值哈希,还有很多的从图像本身出发计算出来的图像哈希值,在OpenCV 3.3及其以后的版本中,包 ...

  3. iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用

    1.0 iOS模块化中的问题 前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下. 在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作. 模块化工作的想法是很美好的,可是执 ...

  4. iOS应用模块化的思考及落地方案(一)模块的划分及模块化工作流程

    1.0 什么是模块化 很多关于重构及设计模式的介绍中,经常提到的几个词语是复用及解耦. 模块化之所以被提出,也更多是为了解决这几个问题. 复用可以减少重复造轮子的情况,很容易理解的是,我们经常使用的g ...

  5. 聊聊jump consistent hash

    序 本文主要简介一下jump Consistent hash. jump consistent hash jump consistent hash是一致性哈希的一种实现,论文见A Fast, Mini ...

  6. [分享]技术改进方案模板

    来自: http://www.cnblogs.com/raol/archive/2013/04/25/program_template.html 关于XX改进方案 现状描述: 不满意的地方: 1. 2 ...

  7. 主从mysql replication 集群的sharding memcache集群使用consistent hash

    sharding 实现跨越DB的分区与扩展功能 consistent hash 一致哈希实现memcache的扩展 http://cache.baidu.com/c?m=9f65cb4a8c8507e ...

  8. haproxy Consistent Hash浅析

    http://blog.sina.com.cn/s/blog_502c8cc40100kfz2.html Haproxy实现了Map-based 和consistent hash算法,来完成通过哈希值 ...

  9. 十大经典排序算法(附代码、动画及改进方案)

    前言说明 十大排序算法可以说是每个程序员最早接触的也是最重要的算法,这一块必须要非常熟练的掌握,应该要理解每种排序的思想,对各个排序的性能的了解也是基础且重要的.为了方便自己和大家学习,决定整合成一篇 ...

最新文章

  1. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
  2. bash 的相关配置
  3. (39)FPGA四种常用逻辑门(与非门)
  4. 两种方式实现节流函数
  5. 统计学作业4 概念
  6. 管理感悟:出了事故,关键是想想自己哪里能改进
  7. 锐捷自动定时启动,开机自动认证校园网 教程
  8. AVI视频格式的Dvix和Xvid两种不同编码的区别
  9. 阿里网盘阿里云盘----手机端PC端
  10. 可正常访问的 高校2.5D 地图
  11. 安卓手机如何投屏到电视上_孩子在家上课,如何把手机投屏到电视上
  12. 今天发现一个好的修图软件
  13. 基于微信小程序的todo番茄钟设计与实现源码
  14. 微信小程序获取手机号,TP6 后端电话短信验证
  15. Oracle ADG状态查看与相关视图
  16. 技术部负责人的爱恨情仇
  17. 一个初学者的留言板(登录和注册)
  18. R语言绘图中图片的组合(cowplot、patchwork宏包、layout、par()、gridExtra)
  19. 使用Rational Performance Tester实现DB2 性能测试和监控
  20. 航天安网高清视频无损压缩解决方案—IDC机房监控系统案例

热门文章

  1. redis 亿级查询速度_Redis 性能优化的 13 条军规!史上最全
  2. 【c语言】符号常量的使用
  3. 刘光瑞php,PHP Markdown 解析器 HyperDown
  4. python计算概率密度最大的值_Python机器学习(六十四)SciPy 统计
  5. 新款Linux版Skype迎来首次更新:提升稳定性,UX微调
  6. MyEclipse图表工具Birt的使用技巧(三)--连接webservice数据源
  7. ORACLE 12C CDB中PDB参数管理机制
  8. SQL中游标的使用(转)
  9. 字符串字符数组和基本类型的相互转换
  10. OCP读书笔记(5) - 使用RMAN创建备份