一致性雜湊演算法

2022-04-11 11:02:40 字數 748 閱讀 8594

cassandra,memcached,redis等分布式系統中,使用一致性雜湊演算法來保證資料的一致性。

在redis中,為了在server node增加或減少時,盡量均勻的將快取分布到多個server node上,同時盡可能少的移動資料,提高快取命中率,可以使用一致性雜湊演算法。

資料定位過程:

將整個hash值空間視作乙個虛擬圓環,整個空間按順時針方向組織。

使用hash函式對server node進行hash,確定各node在圓環上的位置。

使用同樣的hash函式對data進行hash,確定data在圓環上的位置。從data所在位置沿環順時針「行走」,遇到的第乙個server node就是其應該定位到的server node,即為儲存該data的server。

容錯性和可擴充套件性:

在一致性雜湊演算法中,如果一台伺服器不可用,則受影響的資料僅僅是此伺服器到其環空間中前一台伺服器。

在一致性雜湊演算法中,如果增加一台伺服器,則受影響的資料僅僅是新伺服器到其環空間中前一台伺服器(即沿著逆時針方向行走遇到的第一台伺服器)之間資料,其它資料也不會受到影響。

解決資料傾斜問題:

一致性雜湊演算法在服務節點太少時,容易因為節點分部不均勻而造成資料傾斜問題。

為了解決這種資料傾斜問題,一致性雜湊演算法引入了虛擬節點機制,即對每乙個服務節點計算多個雜湊,每個計算結果位置都放置乙個此服務節點,稱為虛擬節點。在實際應用中,通常將虛擬節點數設定為32甚至更大,因此即使很少的服務節點也能做到相對均勻的資料分布。

refs:

一致性雜湊演算法

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

一致性雜湊演算法

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

一致性雜湊演算法

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