一致性雜湊演算法

2022-09-02 23:18:23 字數 1226 閱讀 7398

1.簡介

一致性雜湊簡稱dht,是麻省理工學院提出的一種演算法,目前主要應用於分布式快取當中。

它的儲存步驟如下:

1.將全量的快取空間當做乙個環形儲存結構,環形空間總共分成2^32個快取區。

2.將各個伺服器進行雜湊,具體可以選擇伺服器的ip或主機名作為關鍵字進行雜湊,這樣每台機器就能確定其在雜湊環上的位置。

3.求出儲存資料的鍵的雜湊值,並對映到相應的位置上,從資料對映到的位置開始順時針查詢,將資料儲存到查詢到的第乙個伺服器上。

2.新增、刪除伺服器

當新增一台伺服器時,只有小部分資料需要遷移:

當刪除一台伺服器時,仍然只有小部分資料需要遷移

3.虛擬節點

一致性雜湊演算法在服務節點太少時,容易因為節點分部不均勻而造成資料傾斜問題。例如我們的系統中有兩台伺服器,其環分布如下:

此時必然造成大量資料集中到server 2上,而只有極少量會定位到server 1上。為了解決這種資料傾斜問題,一致性雜湊演算法引入了虛擬節點機制。

對每乙個服務節點計算多個雜湊,每個計算結果位置都放置乙個此服務節點,稱為虛擬節點。具體做法可以在伺服器ip或主機名的後面增加編號來實現。

由於虛擬節點數量較多,快取key與虛擬節點的對映關係也變得相對均衡了。

至於虛擬節點情況下增加和刪除伺服器,和上面的方法相同。

一致性雜湊演算法

好吧,我們決定打破這種基於資料項商業邏輯的劃分思維,來考慮一種基於 key 的劃分方式,這有些類似於後面介紹的資料庫水平分割槽 sharding 我們需要設計一種不依賴資料項內容的雜湊演算法,將所有資料項的 key 均衡分配在這三颱快取伺服器上。乙個簡單而有效的方法是 取餘 運算,這就像打撲克時的發...

一致性雜湊演算法

在分布式系統中,如果某業務可以由多個相同的節點處理,很容易想到用hash的方式將業務請求分散到這些節點處理,如果有n個節點,計算方法為 hash id n。如果只是簡單的計算,不涉及使用者狀態,這是乙個簡單有效的方案。如果節點的計算涉及使用者狀態,比如維護購物車 memcache快取服務等,好像也沒...

一致性雜湊演算法

判定好壞的四個定義 1 平衡性 balance 平衡性是指雜湊的結果能夠盡可能分布到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。很多雜湊演算法都能夠滿足這一條件。2 單調性 monotonicity 單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的...