一致性Hash

简介:

 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,经常用于分布式、负载均衡等。

原理

  一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表中平均只需要对K/n 个关键字重新映射,其中 K是关键字的数量,n是映射节点数量。然而在传统的哈希表中,添加或删除一个映射节点的几乎需要对所有关键字进行重新映射。

  原来的映射大概是这样的,如下图,没当加入或删除一个新的节点可能都会造成每个节点的映射发生变化,如果黄色的节点代表服务器,那么每一次更新服务器的数量都会造成每个服务器上蓝色的映射节点都会发生变化,当集群数量庞大时每次增删节点所需要的修改操作就会过于庞大。

  而在一致性哈希中映射是这样的,如下图,一般一致性hash取值范围为-2^32~2^32,分布在一个圆上

  下面画的比较丑,就凑合看吧~~

  黄色节点作为映射节点(实节点),蓝色节点为需要映射到映射节点的key节点

  •   首先,看左边的图,把8个蓝色的key通过hash取值散列在一个范围为0~2^32的圆上

  •   其次,选择三个黄色节点作为映射节点,按照圆的顺时针方向,把蓝色节点与黄色节点建立映射关系

  •   最后,由于1节点负载为4,最大,那么我们为了降低1节点的负载情况,增加黄色的映射节点4,依然按照顺时针的方向修改原映射,那么只需要改变蓝色的节点7、8以及黄色节点1

实现

  一般为了方便起见,我们把黄色的映射节点称为实节点,也就是固定不变的,而蓝色的节点称为虚节点,虚节点需要映射到实节点,每次实节点的增删只会影响距离它最近的节点。

  在这里使用C++实现了ConsistentHash算法

  在存储节点方面,本程序只是简单的使用链表,最好的方式当然是红黑树了,当然为了简单起见,就用了链表,主要是理解一致性hash的原理~~


本文转自cococo点点博客园博客,原文链接:http://www.cnblogs.com/coder2012/p/3973877.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 缓存 负载均衡
一文理解一致性哈希算法
一文理解一致性哈希算法
49 0
|
3月前
|
算法
一致性哈希算法
一致性哈希算法
17 0
|
8月前
|
缓存 算法
【分布式系统】一致性哈希算法
一致性哈希算法在1997年由[麻省理工学院](https://baike.baidu.com/item/%E9%BA%BB%E7%9C%81%E7%90%86%E5%B7%A5%E5%AD%A6%E9%99%A2/117999 "麻省理工学院")提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。 [1] 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式[哈希表](https://baike.baidu.com/item/%E5%93%88%E5%B8%8C%E8%A1%A8/5981869 "哈希表")(
226 0
|
4月前
|
存储 缓存 算法
五分钟看懂一致性哈希算法
五分钟看懂一致性哈希算法
28 0
|
10月前
|
存储 算法
一致性hash算法
1.业务场景 假设有30000张图片需要存放到编号为1、2、3的3台服务器上。
41 0
|
11月前
|
存储 人工智能 缓存
什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?
什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?
什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?
|
存储 缓存 负载均衡
一致性哈希
图片分库存储时,每一张图片都可以定位到特上图中,假设我们查找的是”a.png”,由于有4台服务器(排除从库),因此公式为hash(a.png) % 4 = 2 ,可知定位到了第2号服务器,这样的话就不会遍历所有的服务器,大大提升了性能!定的服务器
599 0
一致性哈希
|
缓存 负载均衡 算法
一致性Hash
凡是涉及到分布式的系统,就会有负载均衡和数据分布的问题。为了让连接(或者数据)能够分布得更均匀,很多时候会使用到Hash算法。
122 0
|
存储 缓存 算法
这就是一致性哈希算法?
Hash算法 Hash算法的作用 Hash算法在分布式应用中的不足 一致性哈希算法 一致性哈希算法原理 环形Hash 将数据通过Hash算法映射到环上 节点的删除 节点的增加 虚拟节点 参考
这就是一致性哈希算法?
|
存储 缓存 算法
一致性哈希算法的应用及实现
一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法, 由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域。 1997年发表的学术论文中介绍了“一致性哈希”如何应用于用户易变的分布式Web服务中。
5666 0