一致性Hash

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

原理

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

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

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

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

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

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

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

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

实现

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

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

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

源码下载:https://github.com/yxd123/algorithm-notes/tree/master/ConsistentHash

参考

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

http://zh.wikipedia.org/wiki/一致哈希

http://baike.baidu.com/view/1588037.htm?fr=aladdin


本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

Hash哈希(二)一致性Hash(C++实现)的更多相关文章

  1. 11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介绍

    分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 一.hash 算法 来了一 ...

  2. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  3. Java实现一致性Hash算法深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原 ...

  4. 【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  5. 对一致性Hash算法及java实现(转)

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  6. 对一致性Hash算法,Java代码实现的深入研究(转)

    转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...

  7. 【转载】对一致性Hash算法,Java代码实现的深入研究

    原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...

  8. 分方式缓存常用的一致性hash是什么原理

    分方式缓存常用的一致性hash是什么原理 一致性hash是用来解决什么问题的?先看一个场景有n个cache服务器,一个对象object映射到哪个cache上呢?可以采用通用方法计算object的has ...

  9. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

  10. 一致性Hash算法与代码实现

    一致性Hash算法: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值 ...

随机推荐

  1. Android之下拉刷新,上啦加载的实现(一)

    转载地址http://blog.csdn.net/leehong2005/article/details/12567757#t5 前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但 ...

  2. ipad或iPhone 访问https网站不成功

    可能的原因是设备的日期不对,将设备日期调整正确即可解决

  3. docker-compose安装使用

    Docker Compose的工作原理 Docker Compose将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr).Docker Compose运 ...

  4. cell的自适应

    +(CGFloat)getCellHeightWithItem:(FXOwnershipStrutureInfo *)item { if (item.rowH) {//如有rowH就直接返回,避免重新 ...

  5. union all 里面的order by

    例1: SELECT 1 order2 FROM dual union all SELECT 3 order2 FROM dual union all SELECT 2 order1 FROM dua ...

  6. IDE警告信息不应该被忽略

    当ide进行编译时提示有变量未使用 可能意味着变量使用错误 因为我们没理由创建一个变量却不去使用他 如if语句判断一个int 或者日期 等其他非空类型是否为null 总是true 这意味这我们在逻辑处 ...

  7. expdp小记

    一.10.2.0.5要求expdp导出a用户b表空间下的数据. expdp \'/ as sysdba\' directory=mydir dumpfile=1.dmp schemas=a exclu ...

  8. arcgis学习

    将使用arcgis的一些技巧记下来,以供翻阅 1.判断点在面内 insert into grid_res_relation (GRIDID, GRIDTYPE, RESID, restype, typ ...

  9. HDU2243_考研路茫茫――单词情结

    给出一些词根,问你有多少种长度为L的串包含至少一个词根. 去年就在敲这个题了,今年才敲出来,还是内牛满面之中... 要求包含至少一个的情况,需要求出所有的情况,减去一个都没有的情况就可以了. 对于给出 ...

  10. Android 内存监测工具 DDMS --> Heap

    一.什么是内存泄露    内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用.导致系统运行变慢或应用程序崩溃.二.如何检测Android中的内存泄露   ...