面试宝典系列 - 一致性hash的实现

为何要使用一致性hash?html

一致性hash主要应用于分布式、负载均衡等。node

例如:你有 N 个 cache 服务器,那么如何将一个对象object 映射到 N 个 cache 上呢,你极可能会采用取模(key%N)的方法计算 object 的 hash 值,而后均匀的映射到到 N 个 cache服务器。当一个服务器挂了或者增长了一个,那么获得的hash值=key%(N-1)(或者key%(N+1)),形成的后果就是全部的缓存都失效了,这不是咱们想看到的。缓存

此时就要考虑一致性hash了。服务器

一致性hash的实现负载均衡

一、首先计算出每一个节点的hash值,并将其配置到0~(2的32次方)的圆(continuum)上。分布式

二、用一样的hash函数计算出存储数据的hash值,并映射到相同的圆上。memcached

三、而后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个节点上。若是超过(2的32次方)仍然找不到服务器,就会保存到第一台memcached服务器上函数

若是增长一个节点,观察下影响范围htm

由图能够看出,影响范围缩小至node2和node5之间的数据对象

推荐:http://www.javashuo.com/article/p-tzgogqcu-cr.html

相关文章
相关标签/搜索