學習演算法時候突然想到這個問題,先留個大致印象好了。
看了幾篇博文,仍然不知所云,而這篇:
通過比較普通集群、雜湊集群與一致性雜湊集群,得出了一致性雜湊的優點。進而闡述一致性雜湊為什麼要具備四個條件:
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機了,或是添置一台...
一致性雜湊的理解
參考 先說結論 一致性雜湊也是雜湊演算法的一種,只是為了解決普通雜湊因為節點的變動導致資料遷移過大的問題。其核心思想是將位址空間看做乙個環狀結構,將節點進行雜湊,使節點盡可能均勻的散落在環上。同時將資料進行雜湊,也將資料均勻的散落在環上,最後,將資料全都放置在離資料順時針方向 因為是混裝結構,順時針...
一致性雜湊
直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...