一致性雜湊演算法

2021-09-19 23:03:52 字數 691 閱讀 8392

考慮乙個快取場景:通過使用伺服器集群設計和實現資料快取。

通過資料的id計算hash值(key),假設有n臺機器,計算key%n,即為快取的機器編號。

主要問題

如果機器數量不是固定的,每次機器有增刪時,都需要對所有資料重新計算hash,同時會造成大批量的資料遷移。

假設雜湊值範圍為232, 可以將這232個假想成乙個環:

通過每台機器獨有的id計算該機器對應的hash值,對應到環上的不同位置。當需要插入資料時,計算出資料對應的hash值對映到環上,並順時針尋找離這個位置最近的機器,即為該資料的歸屬。如果有機器增刪的情況,只需要對相鄰機器的資料進行調整,代價較小。

查詢機器編號的實現

將機器的hash值公升序排序,查詢資料時進行二分查詢,找到第乙個比資料hash值大的機器。

直接採用hash環會造成負載不均衡,如果機器較少,在環上的分布不均勻,可能不同機器之間的負載差距很大。

在一致性雜湊演算法中,引入虛擬節點機制,給每台機器都分配m個虛擬節點,由虛擬節點進入環內進行劃分。但資料一旦進入某個虛擬節點負責的區域,均由該虛擬節點對應的機器進行處理。

一致性雜湊演算法

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

一致性雜湊演算法

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

一致性雜湊演算法

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