一致性hash演算法簡介

2021-09-07 05:39:48 字數 1734 閱讀 8631

一致性雜湊演算法在2023年由麻省理工學院提出的一種分布式雜湊(dht)實現演算法,設計目標是為了解決網際網路中的熱點(hot spot)問題,初衷和carp十分類似。一致性雜湊修正了carp使用的簡單雜湊演算法帶來的問題,使得分布式雜湊(dht)可以在p2p環境中真正得到應用。

一致性hash演算法提出了在動態變化的cache環境中,判定雜湊演算法好壞的四個定義:

1、平衡性(balance):平衡性是指雜湊的結果能夠盡可能分布到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。很多雜湊演算法都能夠滿足這一條件。

2、單調性(monotonicity):單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的結果應能夠保證原有已分配的內容可以被對映到原有的或者新的緩衝中去,而不會被對映到舊的緩衝集合中的其他緩衝區。

3、分散性(spread):在分布式環境中,終端有可能看不到所有的緩衝,而是只能看到其中的一部分。當終端希望通過雜湊過程將內容對映到緩衝上時,由於不同終端所見的緩衝範圍有可能不同,從而導致雜湊的結果不一致,最終的結果是相同的內容被不同的終端對映到不同的緩衝區中。這種情況顯然是應該避免的,因為它導致相同內容被儲存到不同緩衝中去,降低了系統儲存的效率。分散性的定義就是上述情況發生的嚴重程度。好的雜湊演算法應能夠盡量避免不一致的情況發生,也就是盡量降低分散性。

4、負載(load):負載問題實際上是從另乙個角度看待分散性問題。既然不同的終端可能將相同的內容對映到不同的緩衝區中,那麼對於乙個特定的緩衝區而言,也可能被不同的使用者對映為不同的內容。與分散性一樣,這種情況也是應當避免的,因此好的雜湊演算法應能夠盡量降低緩衝的負荷。

普通的雜湊演算法(也稱硬雜湊)採用簡單取模的方式,將機器進行雜湊,這在cache環境不變的情況下能取得讓人滿意的結果,但是當cache環境動態變化時,這種靜態取模的方式顯然就不滿足單調性的要求(當增加或減少一台機子時,幾乎所有的儲存內容都要被重新雜湊到別的緩衝區中)。

一致性雜湊演算法有多種具體的實現,包括chord演算法,kad演算法等實現,以上的演算法的實現都比較複雜,這裡介紹一種網上廣為流傳的一致性雜湊演算法的基本實現原理,感興趣的同學可以根據上面的鏈結或者去網上查詢更詳細的資料。

一致性雜湊演算法的基本實現原理是將機器節點和key值都按照一樣的hash演算法對映到乙個0~2^32的圓環上。當有乙個寫入快取的請求到來時,計算key值k對應的雜湊值hash(k),如果該值正好對應之前某個機器節點的hash值,則直接寫入該機器節點,如果沒有對應的機器節點,則順時針查詢下乙個節點,進行寫入,如果超過2^32還沒找到對應節點,則從0開始查詢(因為是環狀結構)。如圖1所示

圖 1

圖1中key k的雜湊值在a與b之間,於是k就由節點b來處理。

另外具體機器對映時,還可以根據處理能力不同,將乙個實體節點對映到多個虛擬節點。

經過一致性雜湊演算法雜湊之後,當有新的機器加入時,將只影響一台機器的儲存情況,例如新加入的節點h的雜湊在b與c之間,則原先由c處理的一些資料可能將移至h處理,而其他所有節點的處理情況都將保持不變,因此表現出很好的單調性。而如果刪除一台機器,例如刪除c節點,此時原來由c處理的資料將移至d節點,而其它節點的處理情況仍然不變。而由於在機器節點雜湊和緩衝內容雜湊時都採用了同一種雜湊演算法,因此也很好得降低了分散性和負載。而通過引入虛擬節點的方式,也大大提高了平衡性。

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...