一致性雜湊的學習和理解

2021-06-28 01:55:42 字數 725 閱讀 8345

學習演算法時候突然想到這個問題,先留個大致印象好了。

看了幾篇博文,仍然不知所云,而這篇:

通過比較普通集群、雜湊集群與一致性雜湊集群,得出了一致性雜湊的優點。進而闡述一致性雜湊為什麼要具備四個條件:

1、平衡性

2、單調性

3、負載

4、分散性

簡單說,傳統的集群方式是通過普通對映(例如1-->1,2-->2)或者雜湊對映(例如1 mod 3 = 1,2 mod 3 = 2,n mod m),但是缺點在於,如果節點掛掉,需要進行大量的資料遷移。普通對映的遷移代價類似陣列中插入或刪除元素,需要整體遷移;雜湊對映變動後需要重新選擇m,並對存在的節點資料進行遷移。

一致性雜湊的優點在於,先將節點對映到2^32這樣乙個超級大環中,然後將需要cache的物件計算hashcode() mod 2^32也對映到這個環上,接著按照事先定好的順序(如順時針或逆時針)將物件一一儲存到節點上,創造性地提出了將儲存節點與儲存物件放到同乙個環上的思想。這樣做的好處在於,當其中某個節點掛掉後,受影響的僅僅是對映到本節點的這些物件,我們只需要將這些物件重新對映到下乙個節點上。增加節點的時候同理。

在對映量不是很大的時候,可能造成不平衡,這裡可以引入虛擬節點來對物件進行二次對映,即object--->virtual node--->real node

那麼問題來了:

1、如何解決衝突?

2、如果節點的雜湊和物件的雜湊相等時候怎麼處理?

3、如何保證資料遷移的可靠性?

一致性雜湊的理解

一致性雜湊 consistent hashing 首先,讓我們了解一下一致性雜湊解決了怎樣的實際問題,當我們有了n臺伺服器 cache 時,我們通常會採用如下的通用演算法 將物件 object 均勻對映分配到伺服器上,hash object n 試想一下,當其中的一台伺服器down機了,或是添置一台...

一致性雜湊的理解

參考 先說結論 一致性雜湊也是雜湊演算法的一種,只是為了解決普通雜湊因為節點的變動導致資料遷移過大的問題。其核心思想是將位址空間看做乙個環狀結構,將節點進行雜湊,使節點盡可能均勻的散落在環上。同時將資料進行雜湊,也將資料均勻的散落在環上,最後,將資料全都放置在離資料順時針方向 因為是混裝結構,順時針...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...