面試寶典系列 - 一致性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

相關文章
相關標籤/搜索