hash一致算法原理

hash一致算法原理

hash一致算法被用於memcached的集羣,memcached的集羣主要有hash與一致性hash。下面分別解釋這兩種算法的原理。

hash集羣算法。

由於memcached的集羣方式是每個節點存儲的內容都不一樣,所以在集羣時要用個算法來選擇存儲和讀時在哪臺服務器。這就是hash算法,這個算法比較簡單,跟haspmap的算法一樣,餘數分散(就是hashcode%服務器個數來決定放在哪臺服務器) 。這種算法的問題:在服務器個數變更了,大部分數據就會丟掉。因爲服務器個數變更後,餘數變了。所以要緩存重組,數據量大的話代價太大。

一致性hash

如何解決緩存重組。,數據的hashcode與所屬服務器虛擬節點關聯起來放到一個順時針大環中。服務器與數據的hashcode都放在這個大環中,重點:服務器節點與數據節點的關係是怎樣的呢?數據的hashcode最接近的一個服務器節點hashcode就是這個數據節點的服務器。所以讀與寫數據都是找最接近的服務器節點。 在物理服務器個數變更時,不需要全部緩存重組。因爲這個環是有序的,所以刪除點節,只會影響到這個節點上的數據,其他的不用調整。添加新節點時,就是將順時針最靠近的那個節點的部分最靠近新節點的數據點的數據往新節點遷移就行了。

添加虛擬節點

僅僅使用真實的節點來形成環的結構可能會導致數據的傾斜,爲了解決這種數據不對稱的現象,可以在原理緩存的機器的基礎上,增加相應的虛擬節點,這樣數據就會均勻的打散到其他節點中。

這個時候客戶端進行數據存取的時候找的就是虛擬節點,而不是真實的物理節點服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章