一致性hash算法
来源:互联网 发布:centos rpm安装jdk1.6 编辑:程序博客网 时间:2024/06/05 19:20
1.假设有4个值key1,key2,key3,key4 通常hash算法是int key1=hash(key1) /N; int key2= hash(key2) /N; int key3=hash(key3) /N;int key4=hash(key4) /N;
N为服务器的数量,但是当一台缓存服务器挂掉,N变为N-1,或者增加一台服务器,N变为N+1,此时意味着所有原来的缓存都生效了,因为N变化了
生成hash值后,将数据存放到一个0~2^31-1的闭形hash环中
2.Hash 算法的一个衡量指标是单调性( Monotonicity ),定义如下:
单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。容易看到,上面的简单 hash 算法 hash(object)%N 难以满足单调性要求。
3.一致性hash算法是:在移除 / 添加一个 cache 时,它能够尽可能小的改变已存在 key 映射关系,尽可能的满足单调性的要求
4.一致性hash算法是把对象和cache都hash到一个hash空间中,int cacheA=hash(cacheA) ; int cacheB=hash(cacheB); cacheA通常是服务器Ip或者服务器名
object1沿着对象hash值,顺时针方向,找到的第一个hash(cacheA)值,就会将对象存放到cacheA中
3.移除cache
如果cacheB被移除了,就会逆时针方向,从CacheB到下一个CacheA之间的对象会受影响,即Object4,此时Object4,会顺时针,找到第一个cacheC,将value存放到cacheC上
4.添加cache
增加cacheD后,逆时针,CacheD到cacheB中,object3受影响,object3会顺时针,找到cacheD,将value存放到cacheD上
5.如果一个cache有多个key,但是一个cache只有一个key,怎么办呢?采用虚拟节点
cacheA1、cacheA2都是cacheA的节点,cacheB1、cacheB2都是cacheB的节点,这样对象就能更均匀分布在虚拟节点上,对应为cache服务器上
int cacheA1=hash(IP#1);int cacheA2=hash(IP#2)
- Hash魔法:一致性 hash 算法
- Hash魔法:一致性 hash 算法
- Hash和一致性Hash算法
- Hash魔法:一致性 hash 算法
- 一致性Hash算法
- 一致性hash算法详解
- 一致性Hash算法(转)
- 一致性Hash算法(转)
- 一致性Hash算法
- 一致性Hash算法(转)
- 一致性Hash算法(转)
- Ketama一致性Hash算法
- 一致性Hash算法
- 一致性Hash算法
- 一致性Hash算法背景
- 一致性hash算法
- 一致性hash算法2
- 一致性Hash算法
- C字符串处理函数
- 作业
- Adobe Flash builder 4.7 for Mac 破解方法,不用序列号
- java正则表达式源码解析
- 关于android分辨率兼容(屏幕适配)问题
- 一致性hash算法
- 错误:org.hibernate.PropertyValueException: not-null property references a null
- fcntl函数详解
- 冒泡排序(正宗点吧)
- OpenCV笔记(六)CvMat结构体初解3
- 如何实现vim和其他程序的复制粘贴
- 黑马程序员_String类
- HDU 1754 I Hate It(线段树:单点替换,区间最值)
- 有关芯片手册上的偏置的概念