一致性雜湊演算法

2021-09-28 15:39:50 字數 793 閱讀 4986

普通的雜湊演算法採用簡單取模的方式,將快取伺服器進行雜湊,通常情況下是沒有問題的,但是當快取伺服器的個數發生變動時,將會產生較大的影響

如上圖所示,之前有4臺快取伺服器,當增加1臺快取伺服器之後,除數的變化(4 -> 5)導致求模結果變化,所有快取查詢均未命中

即快取伺服器的個數發生變化時,在一段時間內(快取重建完畢之前),會有大量快取查詢未命中,導致這段時間內的服務整體效能下降特別嚴重

一致性雜湊演算法能有效降低伺服器個數變化對整體快取的影響,基本實現原理是將hash函式的值域空間組織成乙個圓環,將伺服器節點進行雜湊,並將雜湊結果對映到圓環上,當有乙個寫入快取的請求到來時,使用相同的hash函式,計算key的雜湊值在圓環上對應的位置,按順時針方向,將請求定位至離其最近的伺服器節點

如下圖所見,當增加一台快取伺服器server5後,server4和server5之間的點將被定位至server5,server5和server之間的點依然定位至server,並且對server2,server3和server4沒影響,比起簡單的求模雜湊,未命中的快取查詢少了很多,整體服務效能不會下降過大

當然在實際使用過程中會在圓環上新增很多虛擬快取伺服器節點,以便快取分布更加均

一致性雜湊演算法

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

一致性雜湊演算法

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

一致性雜湊演算法

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