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 單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的...