一致性哈希算法的理解

版權聲明: 本文由 一隻博客 發表於 bloghome博客html

文章連接: https://www.bloghome.com.cn/user/cnn237111算法

關於一致性哈希算法,網上有不少博文都有講解。推薦2個。ide

http://blog.codinglabs.org/articles/consistent-hashing.htmlspa

http://blog.csdn.net/cywosp/article/details/23397179.net

總結一下:orm

  1. 網上博文的例子都將hash值的結果定義在0 - 232-1,實際上也是非必要的,你能夠設定的比這個範圍小,或者比這個範圍大,都是能夠的,重要的是它是一個環。htm


2.一致性哈希並不保證節點被映射的均衡性,假設哈希值是均衡的,那麼節點要被均衡的映射,就必須讓各個節點之間的距離相等,也就是說各個節點平分環的周長。blog


3.當存在故障節點後,一致性哈希並不保證故障節點上的值能經過算法恢復(除非已實現主備機制)ip


4.當故障節點被移除,故障節點的下一個節點的壓力會增長(若是各個節點的壓力是均衡的,那麼壓力增長1倍)。ci


5.當插入新節點,一致性哈希算法並不能避免從新hash步驟,可是不須要把全部的數據都從新hash一遍,只須要hash一部分。這種方式將hash的範圍減到最小,僅僅是將新節點的前一個節點的一部分數據,歸還給新節點。


6,當哈希算法的值不均衡時,環上的各個節點的壓力也是不均衡的。能夠採用添加虛擬節點的方式,使平衡。能夠在熱點節點的後面,插入多個虛擬節點,一旦映射落到虛擬節點上,再經過其餘的hash算法,映射到壓力較低的節點。採用的算法能夠是簡單粗暴,好比舉個栗子:

以下圖,在沒有虛擬節點的時候,假設因爲hash算法的不均衡性,落在節點4和節點5的hash值特別多,勢必形成節點5的壓力比較大,而此時若是節點6和節點2的壓力有比較小,那麼在節點4和節點5之間插入2個虛擬節點(節點a和節點b),根據一致性哈希的算法,節點a和節點5之間的hash值落到節點5上,節點a和節點b的hash值落在節點a上,節點b和節點4之間的hash落在節點b上。可是節點a和節點b是虛擬節點,所以能夠強制的讓節點a映射到節點6,節點b強制映射到節點2,這樣,節點5的壓力會減輕,從而使得全部節點負載相對均衡。

clipboard

以上是一些總結,若有不對,歡迎指出糾正。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息