一致性Hash算法原理白话

Posted bpdmutou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一致性Hash算法原理白话相关的知识,希望对你有一定的参考价值。

1、技术背景

1.1、技术举例:Memcache

1.2、技术瓶颈

memcached服务器端本身不提供分布式cache的一致性,由客户端实现提供。以余数分布式算法为例。

余数分布式算法是根据添加进入缓存时key的hash值通过特定的算法得出余数,然后根据余数映射到关联的缓存服务器,将该key-value数据保存到该服务器

1.2.1、假设有3台缓存服务器以及它们对应的余数值

Node A:0,3,6,9

Node B:1,4,7

Node C:2,5,8

1.2.2、此时添加一台服务器Node D

服务器对应的余数值发生变化,如下

Node A:0,1,2

Node B:3,4

Node C:5,6

Node C:7,8,9

 

根据上面的变化,发现只有余数值为0,4,5所对应的缓存服务器没有发生改变,也就是说其它余数值对应的缓存服务器发生了改变,即缓存失效,如果大量缓存失效会严重影响系统的性能,也就是缓存动荡。针对这样大片缓存失效的技术瓶颈,于是提出了一致性hash算法。缩小失效缓存范围。

 

2、一致性Hash算法

2.1、将hash值范围看成一个0~232的圆。

2.2、将服务器节点的hash值映射到该圆上。

2.3、对数据进行缓存时,计算key的hash值,然后找到该值在圆上的位置,顺时针进行查找,将数据保存到第一个查找到的服务器。

技术分享图片

 

2.4、添加一个缓存服务器,如图

技术分享图片

根据hash一致算法的映射查找规则,受影响的缓存只有新服务器的hash值----新服务器逆时针的第一个服务器hash值得范围,也就这块区域的缓存失效,大大降低了失效范围。

2.5、当服务器过少时,会带来数据倾斜问题

加入只有两台服务器A和B,那么hash范围如下

Node A:0-231

Node B:0-232

很容易造成数据堆积在节点A,于是一致性哈希算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。具体做法可以在服务器ip或主机名的后面增加编号来实现。过程如图

无虚拟节点

技术分享图片

引入虚拟节点

技术分享图片

注:图是从其它网站下载

 

以上是关于一致性Hash算法原理白话的主要内容,如果未能解决你的问题,请参考以下文章

大白话聊聊面试中常问的一致性 Hash 算法!

大白话聊缓存之一致性hash

用大白话讲一致性Hash算法在Redis分布式中的使用

hash一致算法原理

Hash一致性算法底层原理

分布式缓存技术memcached学习系列—— 一致性hash算法原理