一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。(来自百度百科)

现在一致性哈希算法广泛的运用于分布式系统中,它不仅有良好的平衡性,而且有很好的单调性;这样它让分布式系统能够平摊所有的计算,并且在增加和减少集群中的机器是也不会产生太大的负荷影响其它服务器。

一致性 Hash 的特性

良好的分布式集群系统中,一致性 Hash 算法应该满足 4 个适应条件:均衡性

单调性

分散性

负载

原理

环形 Hash 空间

用 Hash 算法将对应计算出来的 Key 映射到 32 位的值中,即0 到 (2^32 - 1)的数字空间。我们可以把它想象成这些数字首尾相连的封闭环形。

consistent-hashing-ring.png

把对象映射到环形 Hash 空间

我们可以将 obj1、obj2、obj3、obj4、obj5、obj6 六个对象通过 Hash 算法计算出来的 key 值映射到环形 Hash 空间。Hash(obj1) = key1;

Hash(obj2) = key2;

Hash(obj3) = key3;

Hash(obj4) = key4;

Hash(obj5) = key5;

Hash(obj6) = key6;

consistent-hashing-object.png

将集群的机器映射到环形 Hash 空间

同样我们将三台机器 NODE1、NODE2、NODE3 三台机器 通过 Hash 算法计算出来的 KEY 值映射到环形 Hash 空间。Hash(NODE1) = KEY1;

Hash(NODE2) = KEY2;

Hash(NODE3) = KEY3;

consistent-hashing-node.png

将对象存储到机器

现在在环形 Hash 空间中既有对象也有机器,接下来我们将对象存储到机器:通常我们会将在某个 object 存储在它沿着这个环形空间顺时针方向最近的一个 NODE 上。这样以来我们就可以将所有的对象存储到相应的机器上了,当然去获取该对象也是采用同样的原理找到该机器然后去获取。

删除节点

如果要去除分布式集群的某一台机器 NODE3,此时只会影响到沿着节点 NODE3 逆时针遍历到节点 NODE1 之间的对象,也就是本来映射到 NODE3 的所有对象,并且这些对象将直接映射到 NODE2。

consistent-hashing-delete.png

增加节点

如果要在分布式集群中增加一台机器 NODE4,假设此节点被映射到对象 obj2 和 obj5 之间,此时会影响节点 NODE4 逆时针便利到节点 NODE3 之间的对象,它们会被重新映射到 NODE4。

consistent-hashing-add.png

虚拟节点

我们看前面的将对象映射到节点的图,其中节点 NODE1 中存储了 obj1、obj6、obj3;节点 NODE2 存储了obj5、obj2;节点 NODE3 只存储了 obj4,这看起来是非常不均匀的,并不符合平衡性。此时我们引入虚拟节点,假设我们将节点都复制一个出来,意味这我们将会有 6 个节点,如果在一个比较理想的情况下,保证所有节点都均匀的分配所有对象,就像下图一样:最终 NODE1 存储obj1 和 obj 3,NODE2 存储 obj5 和 obj2,NODE3 存储 obj4 和 obj6。

consistent-hashing-vnode.png

一致性hash算法虚拟节点_一致性 Hash 算法相关推荐

  1. 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点

    一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...

  2. 一致性hash算法虚拟节点_一致性哈希虚拟节点

    采用固定哈希算法平衡负载 在大规模的缓存应用中,应运而生了分布式缓存系统.key-value如何均匀的分散到集群中?最常规的方式莫过于hash取模的方式.比如集群中可用机器适量为N,那么key值为K的 ...

  3. 一致性hash算法虚拟节点_一致性Hash算法原理详解

    数据分片 先让我们看一个例子吧: 我们经常会用 Redis 做缓存,把一些数据放在上面,以减少数据的压力. 当数据量少,访问压力不大的时候,通常一台Redis就能搞定,为了高可用,弄个主从也就足够了: ...

  4. 一致性hash算法虚拟节点_一致性hash和虚拟节点

    consistent hashing 算法的原理 consistent hashing 是一种 hash 算法,简单的说,在移除 / 添加一个 cache 时,它能够尽可能小的改变已存在key 映射关 ...

  5. 一致性哈希算法——虚拟节点

    2019独角兽企业重金招聘Python工程师标准>>> 一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如 ...

  6. 一致性hash算法虚拟节点_Hash算法和一致性Hash算法

    Hash算法 Hash 算法在路由算法应用中,为了保证数据均匀的分布,例如有 3 个桶,分别是 0 号桶, 1 号桶和 2 号桶:现在有 12 个球,怎么样才能让 12 个球平均分布到 3 个桶中呢? ...

  7. 一致性hash算法虚拟节点解决方案

    1 Hash算法应⽤场景 Hash算法在分布式集群架构中的应⽤场景 Hash算法在很多分布式集群产品中都有应⽤,⽐如分布式集群架构Redis.Hadoop.ElasticSearch, Mysql分库 ...

  8. hash oracle 分表_一致性Hash算法在数据库分表中的实践

    最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...

  9. 一致性hash和虚拟节点

    2019独角兽企业重金招聘Python工程师标准>>> consistent hashing 算法的原理 consistent hashing 是一种 hash 算法,简单的说,在移 ...

最新文章

  1. go语言json的使用技巧
  2. Android组件化初探
  3. php 5.4 aws,使用 Amazon EC2 管理 AWS SDK for PHP 实例 - 适用于 PHP 的 AWS 开发工具包
  4. 编写jmeter测试用例_Jmeter | 实现接口自动化设计说明
  5. ubuntu14.04安装opencv3.1(亲测)
  6. C语言课后习题(26)
  7. 【Python 安装】安装第三方库时 PermissionError: [WinError 5] Access is denied
  8. 实习成长之路:MySQL十:怎么给字符串字段加索引?
  9. 使用ssh公钥密钥自动登陆linux服务器
  10. 17.20. 连续中值 堆
  11. 《乌合之众》思维导图
  12. 无法安装驱动此计算机,安装Windows系统时,提示“无法在此驱动器上安装Windows”...
  13. windchill安装搭建(保姆式)
  14. 机器学习:AI数据集划分(训练集、验证集、测试集)
  15. jd-gui反编译中文乱码
  16. AI新贵「蓦然认知」首秀,这个和百度有点关系的公司要让机器认知世界
  17. 易企CMS采集助力网页快速收录
  18. VNC源码研究(二十四)vnc-4.0-winsrc版本之winvnc工程分析
  19. Maya2022安装教程
  20. git的一套全流程上手(不包括报错(我忘了有哪些报错了)以及其解决方案(篇幅问题))...

热门文章

  1. 【Elasticsearch】Elasticsearch 热点线程 hot_threads
  2. 【Redis】redis 持久化 RDB 和 AOF
  3. 【Logstash】logstash 报错 logstash cannot write event to DLQ reached maxQueueSize of
  4. 【Antlr】Antlr重写输入流
  5. 【ES】ES 根据数据的某个字段进行条件删除
  6. 20-190-092-安装-Flink集群安装 flink-1.9.0 On Yarn
  7. Idea在plugin的marketplace中一直查不到东西安装插件
  8. spark学习-54-Spark RDD的clean()方法
  9. java 设置月份_java – 为什么Calendar.JUNE将月份设置为7月?
  10. 没想到,MyBatis 背后居然用了这么多设计模式