1. 程式人生 > >hash一致性算法

hash一致性算法

9.png 適用於 麻省理工 發送 黃色 一致性hash 資源 實現 第一個

一致性hash算法是,1097麻省理工提出的分布式hashDHT實現算法,極倔internet的熱點問題

平衡性 hash結果盡可能的分布到所有的緩存中去,緩沖空間利用率最高

單調性 保持已有的緩存能映射到對應的位置,新加入的緩存能加入新的位置不會映射到舊的位置

分散性 盡量降低分散性的緩存不一致情況發生

負載 負載被粉絲降低負荷

一致性hash實現算法 chord算法

基本要素:節點ID(NID) 資源ID(KID) 常hash函數(sha-1) chord環 (2^m的環)

因為對於hash(k)的範圍在int範圍,所以我們將0~2^32作為一個環。其步驟為: 1,求出每個服務器的hash(服務器ip)值,將其配置到一個 0~2^n 的圓環上(n通常取32)。 2,用同樣的方法求出待存儲對象的主鍵 hash值,也將其配置到這個圓環上,然後從數據映射到的位置開始順時針查找,將數據分布到找到的第一個服務器節點上。

技術分享圖片

這是一致性hash算法的原理,加入一個redis節點:redis node5,影響的範圍只有黃色標出的那部分,不會造成全局的變動。

技術分享圖片

雪崩效應

當有節點宕機時,當B節點宕機後,原本存儲在B節點的k1,k2將會遷移到節點C上,這可能會導致很大的問題。如果B上存儲的是熱點數據,將數據遷移到C節點上,然後C需要承受B+C的數據,也承受不住,也掛了。。。。然後繼續CD都掛了。這就造成了雪崩效應。

技術分享圖片

我們可以針對每個實際的節點,虛擬出多個虛擬節點,用來映射到圈上的位置,進行存儲對應的數據。

技術分享圖片

A節點對應A1,A2,BCD節點同理。這時候,如果A節點掛了,A節點的數據遷移情況是:A1數據會遷移到C2,A2數據遷移到D1。這就相當於A的數據被C和D分擔了,這就避免了雪崩效應的發送,而且虛擬節點我們可以自定義設置,使其適用於我們的應用。

hash一致性算法