雜湊表 一致性雜湊

2021-08-27 21:15:16 字數 2587 閱讀 5539

目錄

一致性雜湊

1、概念性質

2、理解

對映方式

虛擬節點

3、查閱內容

一致性雜湊也是雜湊的一種,現在在解決動態變化的cache(伺服器)環境中普通雜湊運用存在的問題,但現在一致性hash演算法在分布式系統中也得到了廣泛應用,一致性雜湊演算法應該滿足的如下個適應條件。

1.平衡性(balance)

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

2.單調性(monotonicity)

調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝區加入到系統中,那麼雜湊的結果應能夠保證原有已分配的內容可以被對映到新的緩衝區中去,而不會被對映到舊的緩衝集合中的其他緩衝區。(這段翻譯資訊有負面價值的,當緩衝區大小變化時一致性雜湊(consistent hashing)盡量保護已分配的內容不會被重新對映到新緩衝區。)

簡單的雜湊演算法往往不能滿足單調性的要求,如最簡單的線性雜湊

3.分散性(spread)

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

4..負載(load)

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

5.平滑性(smoothness)

平滑性是指快取伺服器的數目平滑改變和快取物件的平滑改變是一致的。

結合例子來理解:

我們假想乙個環境,我們要在伺服器上儲存,我們用台伺服器儲存3萬張,為了減少伺服器的快取壓力,我們用3臺伺服器分別儲存1萬張。(每張名稱都不同)

利用hash(名稱)%伺服器台數對映的的形式可以將分別儲存在3個伺服器上,假入要查詢其中一張時可以輸入名稱利用用對映的公式(hash(名稱)%伺服器台數1.假如資料太多導致伺服器內放不下時,需要增加幾台伺服器時,由於對映公式的改變,導致所有都需要重新對映儲存。

2.此時要原有將眾多的按照新的對映形式儲存在伺服器上開銷十分巨大,對於後台伺服器來說就會帶來巨大的影響。

如何解決這樣的問題呢,就要用到一致性雜湊了

我們將雜湊值用乙個虛擬的圓環來表示(0—2^23-1)個值,最大值與最小值在乙個點相交。如圖:

由我們之前的設想除法,我們將這個圓環(雜湊值)分別用3臺伺服器(利用伺服器的ip或其它),分為3部分。

利用hash(名稱)%2^23的對映,按順序儲存的方式來存放。如下圖

經過對映關係處理後,在伺服器3——伺服器1之間的的儲存在伺服器1上,在伺服器1——伺服器2上之間的儲存在服務區2上,一次類推。

那如何解決普通雜湊在解決上述情況時遇到的問題呢?

當需要增加乙個伺服器儲存時,假設那個伺服器在雜湊環上的位置是在伺服器3和伺服器1直接之間時,只有在伺服器3和新伺服器(伺服器4)之間按對映公式存放的會儲存到新伺服器(伺服器4)上去。如下圖:

即指增加一台伺服器,只需將伺服器3和新伺服器(伺服器4)直接的轉存到伺服器4上去,極大減少了伺服器的快取壓力。對伺服器的影響較小。

如何解決這種快取分配不均勻的問題呢?

既然真實的伺服器只有3臺,那麼我們可以利用虛擬復**務器的物理節點。稱為」虛擬節點「來解決這個問題。

實際上乙個伺服器的物理節點可以對應多個虛擬節點,利用虛擬節點分別虛擬出3個虛擬節點(a,b,c),在虛擬節點內快取的就會被快取在真實的伺服器當中。a->伺服器1,b->伺服器2,c->伺服器3。這樣就解決了服務節點少時資料傾斜的問題。在實際應用中,通常將虛擬節點數設定為32甚至更大,因此即使很少的服務節點也能做到相對均勻的資料分布。如下圖:

此篇部落格是在搜尋查閱一致性雜湊相關知識、部落格後,自己總結而成。

一致性雜湊演算法理解

白話解析:一致性雜湊演算法

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...

一致性雜湊

from 學習分布式,一致性雜湊是最最基礎的知識,所以要理解好.那什麼是一致性雜湊呢?what 1.平衡性是指 hash的結果應該平均分配到各個節點,這樣從演算法上就解決了負載均衡問題.2.單調性是指 在新增或者刪減節點時,同乙個key訪問到的值總是一樣的.3.分散性是指 資料應該分散的存放在 分布...

一致性雜湊

一致性 雜湊演算法在1997年由 麻省理工學院提出 參見擴充套件閱讀 1 設計目標是為了解決網際網路中的熱點 hot spot 問題,初衷和 carp十分類似。一致性雜湊修正了carp使用的簡單雜湊演算法帶來的問題,使得dht可以在p2p環境中真正得到應用。雜湊演算法 編輯 一致性雜湊提出了在動態變...