一致性哈希算法的理解

简介:

关于一致性哈希算法,网上有很多博文都有讲解。推荐2个。

http://blog.codinglabs.org/articles/consistent-hashing.html

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

总结一下:

  1. 网上博文的例子都将hash值的结果定义在0 - 232-1,实际上也是非必要的,你可以设定的比这个范围小,或者比这个范围大,都是可以的,重要的是它是一个环。


2.一致性哈希并不保证节点被映射的均衡性,假设哈希值是均衡的,那么节点要被均衡的映射,就必须让各个节点之间的距离相等,也就是说各个节点平分环的周长。


3.当存在故障节点后,一致性哈希并不保证故障节点上的值能通过算法恢复(除非已实现主备机制)


4.当故障节点被移除,故障节点的下一个节点的压力会增加(如果各个节点的压力是均衡的,那么压力增加1倍)。


5.当插入新节点,一致性哈希算法并不能避免重新hash步骤,但是不需要把所有的数据都重新hash一遍,只需要hash一部分。这种方式将hash的范围减到最小,仅仅是将新节点的前一个节点的一部分数据,归还给新节点。


6,当哈希算法的值不均衡时,环上的各个节点的压力也是不均衡的。可以采用添加虚拟节点的方式,使平衡。可以在热点节点的后面,插入多个虚拟节点,一旦映射落到虚拟节点上,再通过其他的hash算法,映射到压力较低的节点。采用的算法可以是简单粗暴,比如举个栗子:

如下图,在没有虚拟节点的时候,假设由于hash算法的不均衡性,落在节点4和节点5的hash值特别多,势必造成节点5的压力比较大,而此时如果节点6和节点2的压力有比较小,那么在节点4和节点5之间插入2个虚拟节点(节点a和节点b),根据一致性哈希的算法,节点a和节点5之间的hash值落到节点5上,节点a和节点b的hash值落在节点a上,节点b和节点4之间的hash落在节点b上。但是节点a和节点b是虚拟节点,因此可以强制的让节点a映射到节点6,节点b强制映射到节点2,这样,节点5的压力会减轻,从而使得所有节点负载相对均衡。

clipboard

以上是一些总结,如有不对,欢迎指出纠正。



















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1618069,如需转载请自行联系原作者








相关文章
|
2月前
|
存储 缓存 负载均衡
一文理解一致性哈希算法
一文理解一致性哈希算法
43 0
|
2月前
|
存储 缓存 运维
解密一致性哈希算法:实现高可用和负载均衡的秘诀
解密一致性哈希算法:实现高可用和负载均衡的秘诀
149 0
|
3月前
|
存储 缓存 算法
【算法理论】一致性哈希
【1月更文挑战第26天】【算法理论】一致性哈希
|
3月前
|
算法
一致性哈希算法
一致性哈希算法
17 0
|
3月前
|
算法 Python
Python小知识 - 一致性哈希算法
Python小知识 - 一致性哈希算法
|
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 "哈希表")(
225 0
|
4月前
|
存储 缓存 算法
五分钟看懂一致性哈希算法
五分钟看懂一致性哈希算法
28 0
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
图解一致性哈希算法,看这一篇就够了!
|
运维 算法 数据库
浅析数据库算法与数据结构(五)一致性哈希
我们在第二期中讲过,HASH算法是一种非常快速的查找算法,可以用于对数据进行分区和分片。但是有一个问题。根据常规哈希算法算出来的哈希值,通常是无法扩展的,也就是说,假如说,我们一开始想将数据分成四个数据片,随着我们数据量的增长,四个数据片都接近了系统的极限,现在我们想加入一个新的数据片。这时使用传统的哈希算法,通常是无法做到的。只能讲数据重新在汇总起来再重新分成五分,这样就导致了巨大的运维成本。
113 0
浅析数据库算法与数据结构(五)一致性哈希
|
存储 消息中间件 缓存
面试时遇到一致性哈希算法这样回答会让面试官眼前一亮
面试时遇到一致性哈希算法这样回答会让面试官眼前一亮
面试时遇到一致性哈希算法这样回答会让面试官眼前一亮

热门文章

最新文章