溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

一致性哈希算法的理解

發(fā)布時(shí)間:2020-07-27 18:07:59 來源:網(wǎng)絡(luò) 閱讀:2840 作者:cnn237111 欄目:編程語言

版權(quán)聲明: 本文由 一只博客 發(fā)表于?bloghome博客

文章鏈接:?https://www.bloghome.com.cn/user/cnn237111

關(guān)于一致性哈希算法,網(wǎng)上有很多博文都有講解。推薦2個(gè)。

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

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

總結(jié)一下:

  1. 網(wǎng)上博文的例子都將hash值的結(jié)果定義在0 - 232-1,實(shí)際上也是非必要的,你可以設(shè)定的比這個(gè)范圍小,或者比這個(gè)范圍大,都是可以的,重要的是它是一個(gè)環(huán)。


2.一致性哈希并不保證節(jié)點(diǎn)被映射的均衡性,假設(shè)哈希值是均衡的,那么節(jié)點(diǎn)要被均衡的映射,就必須讓各個(gè)節(jié)點(diǎn)之間的距離相等,也就是說各個(gè)節(jié)點(diǎn)平分環(huán)的周長(zhǎng)。


3.當(dāng)存在故障節(jié)點(diǎn)后,一致性哈希并不保證故障節(jié)點(diǎn)上的值能通過算法恢復(fù)(除非已實(shí)現(xiàn)主備機(jī)制)


4.當(dāng)故障節(jié)點(diǎn)被移除,故障節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的壓力會(huì)增加(如果各個(gè)節(jié)點(diǎn)的壓力是均衡的,那么壓力增加1倍)。


5.當(dāng)插入新節(jié)點(diǎn),一致性哈希算法并不能避免重新hash步驟,但是不需要把所有的數(shù)據(jù)都重新hash一遍,只需要hash一部分。這種方式將hash的范圍減到最小,僅僅是將新節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)的一部分?jǐn)?shù)據(jù),歸還給新節(jié)點(diǎn)。


6,當(dāng)哈希算法的值不均衡時(shí),環(huán)上的各個(gè)節(jié)點(diǎn)的壓力也是不均衡的。可以采用添加虛擬節(jié)點(diǎn)的方式,使平衡??梢栽跓狳c(diǎn)節(jié)點(diǎn)的后面,插入多個(gè)虛擬節(jié)點(diǎn),一旦映射落到虛擬節(jié)點(diǎn)上,再通過其他的hash算法,映射到壓力較低的節(jié)點(diǎn)。采用的算法可以是簡(jiǎn)單粗暴,比如舉個(gè)栗子:

如下圖,在沒有虛擬節(jié)點(diǎn)的時(shí)候,假設(shè)由于hash算法的不均衡性,落在節(jié)點(diǎn)4和節(jié)點(diǎn)5的hash值特別多,勢(shì)必造成節(jié)點(diǎn)5的壓力比較大,而此時(shí)如果節(jié)點(diǎn)6和節(jié)點(diǎn)2的壓力有比較小,那么在節(jié)點(diǎn)4和節(jié)點(diǎn)5之間插入2個(gè)虛擬節(jié)點(diǎn)(節(jié)點(diǎn)a和節(jié)點(diǎn)b),根據(jù)一致性哈希的算法,節(jié)點(diǎn)a和節(jié)點(diǎn)5之間的hash值落到節(jié)點(diǎn)5上,節(jié)點(diǎn)a和節(jié)點(diǎn)b的hash值落在節(jié)點(diǎn)a上,節(jié)點(diǎn)b和節(jié)點(diǎn)4之間的hash落在節(jié)點(diǎn)b上。但是節(jié)點(diǎn)a和節(jié)點(diǎn)b是虛擬節(jié)點(diǎn),因此可以強(qiáng)制的讓節(jié)點(diǎn)a映射到節(jié)點(diǎn)6,節(jié)點(diǎn)b強(qiáng)制映射到節(jié)點(diǎn)2,這樣,節(jié)點(diǎn)5的壓力會(huì)減輕,從而使得所有節(jié)點(diǎn)負(fù)載相對(duì)均衡。

一致性哈希算法的理解

以上是一些總結(jié),如有不對(duì),歡迎指出糾正。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI