一致性哈希算法

解決的問(wèn)題

當(dāng)數(shù)據(jù)過(guò)多時(shí), 可以對(duì)數(shù)據(jù)進(jìn)行水平拆分, 比如有4個(gè)Cache cache0, cache1, cache2, cache3部署在不同的node上, 我們可以根據(jù)數(shù)據(jù)的特征(比如id)進(jìn)行hash, 來(lái)使數(shù)據(jù)品均分配在4個(gè)cache上.
然鵝, 當(dāng)我們想增加或減少一個(gè)node時(shí)候, 問(wèn)題就來(lái)了, rehash 需要大量的時(shí)間, 這段時(shí)間內(nèi)會(huì)導(dǎo)致數(shù)據(jù)無(wú)法被找到.
一致性Hash就是為了解決這個(gè)問(wèn)題

基本概念

可以想像一致性Hash 為一個(gè)換, 坐標(biāo)為 0 到 2^32 -1, 從 0 到 2^32 -1 為順時(shí)針, 而我們的節(jié)點(diǎn)就分布在這個(gè)環(huán)上(根據(jù)IP 或其他信息 進(jìn)行Hash), 當(dāng)查詢數(shù)據(jù)時(shí), 會(huì)先進(jìn)性Hash, 認(rèn)定改數(shù)據(jù)位于順指針?lè)较蛏险业降牡谝粋€(gè)節(jié)點(diǎn). 比如一個(gè)環(huán)為 A -> B -> C -> D -> A, 其中數(shù)據(jù)T hash 位于A B 之間, 則會(huì)在B上尋找數(shù)據(jù)T

這樣, 當(dāng)B 掛了的時(shí)候, 影響的只有 A->C, 而B(niǎo)->C, C->D, D->A不收影響, 同樣的, 如果我們想在 D -> A 之間加一個(gè)Node, 那么影響的只有D-> A, 而另外三個(gè)分段不收影響.

一致性Hash可能會(huì)造成數(shù)據(jù)不均勻的問(wèn)題, 比如當(dāng)節(jié)點(diǎn)很少的時(shí)候, 假定只有 A B 兩個(gè)節(jié)點(diǎn),
A->B->A, 那么 當(dāng) A -> B 范圍較小的時(shí)候, 有可能大量數(shù)據(jù)分散在 B -> A, 所以有虛擬節(jié)點(diǎn)的概念, A1->B1->A2->B2->A3->B3->A4->B4->A1, 這樣A1, A2, A3, A4會(huì)被定為到A

節(jié)點(diǎn)的添加與刪除

在D->A中添加 E 時(shí) 變?yōu)?D->E->A, 則需要對(duì)A進(jìn)行rehash, 將D到E的部分復(fù)制到E
若刪除E,則需要將E中的數(shù)據(jù)拷貝給A

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容