Hash哈希(二)一致性Hash(C++实现)
一致性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++实现)的更多相关文章
- 11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介绍
分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 一.hash 算法 来了一 ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- Java实现一致性Hash算法深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原 ...
- 【数据结构与算法】一致性Hash算法及Java实践
追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...
- 对一致性Hash算法及java实现(转)
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 对一致性Hash算法,Java代码实现的深入研究(转)
转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- 分方式缓存常用的一致性hash是什么原理
分方式缓存常用的一致性hash是什么原理 一致性hash是用来解决什么问题的?先看一个场景有n个cache服务器,一个对象object映射到哪个cache上呢?可以采用通用方法计算object的has ...
- OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法
1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...
- 一致性Hash算法与代码实现
一致性Hash算法: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值 ...
随机推荐
- 线程池的使用ExecutorService
private ExecutorService executorService = Executors.newFixedThreadPool(5); // 引入线程池来管理多线程 private vo ...
- openjudge ROADS
726:ROADS 总时间限制: 1000ms 内存限制: 65536kB 描述 N cities named with numbers 1 ... N are connected with one- ...
- windows下安装多个tomcat服务
摘要 公司服务器已经部署2个tomcat,分别属于不同的系统.今天新开发的系统也要上线测试,故新增一个tomcat服务器. 1.官网下载tomcat 7 解压缩版本.我使用的是 apache-tomc ...
- lnmp重置mysql密码
第一种方法:用军哥的一键修改LNMP环境下MYSQL数据库密码脚本一键脚本肯定是非常方便.具体执行以下命令: wget http://soft.vpser.net/lnmp/ext/reset_mys ...
- 【MVC】 js,css 压缩
[MVC] js,css 压缩 一. 引用 System.Web.Optimization.dll : 使用 Nuget ,在控制台输入 Install-Package Microsoft.AspNe ...
- Selenium2+python自动化31-生成测试报告
前言 最近小伙伴们总有一些测试报告的问题,网上的一些资料生成报告的方法,我试了都不行,完全生成不了,不知道他们是怎么生成的,同样的代码,有待研究. 今天小编写一下可以生成测试报告的方法.个人觉得也是最 ...
- 获取datagrid选择行
var rows = $('#dg').datagrid('getChecked'); var ids = ''; for (var i = 0; i < rows.length; i ...
- css3新属性@ text-shadow
text-shodow是css3的新属性,可以利用这个属性使字体更有立体感,还可以创造有趣的效果. 1.语法形式:text-shadow : x-offset(x轴偏移量) y-offset(y轴偏移 ...
- 解决: Can’t connect to local MySQL server through socket /var/lib/mysql/mysql.sock
今天在搬瓦工上使用mysql 命令行,总报一个这样的错:Can't connect to local MySQL server through socket '/xxxxx/mysql.sock',一 ...
- 2016 小马哥 IOS
2016 小马哥 IOS 最新视频完整版 链接:http://pan.baidu.com/s/1c1EQlBM 密码:mxkt
