一致性hash理解
在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布。
通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化是,所有的结果都会改变,导致缓存数据大面积失效,从而导致服务崩溃。
一致性hash的核心是模数采用不变的2**32次方作为模数,这样不管服务器的数量是否变化,服务器的hash值和数据的hash值都不会发生改变,但hash结果分布在0-2**32-1这个范围,那怎么才能对应呢?
一致性hash采用向后查询的方式来分配数据,如果hash值太大找不到对应的服务器,则归0继续查找。
假设我们将2**32这个范围放在一个环上:
key将以顺时针的方向查找,最终分配到A服务器。
但如果服务器分配不均匀,ABC都挤在了一起怎么办呢?
一致性hash默认在现有的服务器hash值基础上生成一些虚拟的hash值,尽量保证服务器hash值分布均匀。
所以采用一致性hash之后,当A服务器宕机,则key可以分配到C服务器上,即除了C服务器之外,其他的服务器不受影响。
一致性hash理解的更多相关文章
- 一致性hash理解、拜占庭将军问题解读和CAP理论总结
一致性hash理解 白话概述: 比如说存储图片,有10台服务器用来存储,对图片名进行hash(pic_name)%10得到的值就是图片存放的服务器序号.这是正常的hash算法分散图片存储.但是有一天, ...
- [梁山好汉说IT] 如何理解一致性Hash
[梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...
- 一致性hash的理解
参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html http://blog.csdn.net/cywosp/art ...
- 分布式缓存一致性hash算法理解
今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的 ...
- redis一致性hash算法理解
一般算法: 对对象先hash然后对redis数量取模,如果结果是0就存在0的节点上. 1.2同上,假设有0-3四个redis节点.20个数据: 进行取模后分布如下: 现在因为压力过大需要扩容,增加一台 ...
- 对一致性hash原理的理解
一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed ...
- 关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下
问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT ...
- 理解一致性Hash算法
简介 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CAR ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
随机推荐
- 洛谷 P1678 烦恼的高考志愿
题目背景 计算机竞赛小组的神牛V神终于结束了万恶的高考,然而作为班长的他还不能闲下来,班主任老t给了他一个艰巨的任务:帮同学找出最合理的大学填报方案.可是v神太忙了,身后还有一群小姑娘等着和他约会,于 ...
- Django之form表单提交并验证
1.提交的时候会报错 2. 需要在setting里面注释掉一句话,关闭跨站请求检查. 3. 注释掉以后,理论上就不报错了.可我还是卡壳了. 4. 通过在网上找方法,修复错误. 原因:表单action字 ...
- hive 连接(join)查询
1.内连接 hive> select b.*,a.name from userinfo2 b,userinfo a where a.userid=b.userid; hive> selec ...
- KinFu --- KinectFusion的开源实现
KinectFusion是微软研究院的一个项目,研究用Kinect来实时地重构3D表面,最终用于人机交互. 先看视频:http://research.microsoft.com/en-us/proje ...
- mysql互为主从复制配置笔记--未读,稍后学习
MySQL-master1:192.168.72.128 MySQL-master2:192.168.72.129 OS版本:CentOS 5.4MySQL版本:5.5.9(主从复制的master和s ...
- mac Source Tree免登陆方法
打开SourceTree -> 点击菜单栏的 窗口 选项 -> 点击显示托管在远端的仓库 -> 点击登录注册页面右上角的关闭按钮 -> 点击Quit -> 点击确定关闭刷 ...
- openCV实例:Canny边缘检测
http://blog.sina.com.cn/s/blog_737adf530100z0jk.html 在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检 ...
- Spring MVC POJO入参过程分析
SpringMVC确定目标方法POJO类型的入参过程 1.确认一个key: (1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写 ...
- 学习 opencv---(12)OpenCV 图像金字塔:高斯金字塔,拉普拉斯金字塔与图片尺寸缩放
在这篇文章里,我们一起学习下 图像金字塔 的一些基本概念,如何使用OpenCV函数pyrUp和pyrDown 对图像进行向上和向下采样,以及了解专门用于缩放图像尺寸的resize函数的用法.此博文一共 ...
- Codeforces 830B - Cards Sorting 树状数组
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...