巧妙的 一致性 hash

問題

  • raft 的局限:寫請求只能在 Leader 節(jié)點(diǎn)上進(jìn)行處理,集群性能約等于單機(jī)

  • 普通 hash (取余)分集群問題:集群數(shù)量發(fā)送變更的時(shí)候就需要做數(shù)據(jù)遷移重新映射,由于集群擴(kuò)容前后數(shù)量不一致導(dǎo)致 hash 計(jì)算后得到結(jié)果不一致

一致性 hash

本質(zhì)是對 2 的 32 次方取模運(yùn)算,將整個(gè)哈希值空間組成一個(gè)虛擬的圓環(huán),也就是哈希環(huán)。下面看圖說話。

key 如何定位

image.png
  1. 一開始根據(jù)取模后可以計(jì)算出 abc 節(jié)點(diǎn)在環(huán)上的位置

  2. key1 訪問時(shí)也可以計(jì)算出在環(huán)上的位置

  3. 然后順時(shí)針向前走,就能找到對應(yīng) key 所對應(yīng)的節(jié)點(diǎn)

節(jié)點(diǎn)移除

image.png
  1. 當(dāng)節(jié)點(diǎn)移除時(shí)原先的 key 會(huì)繼續(xù)順時(shí)針向前找到對應(yīng)的新節(jié)點(diǎn)

  2. 會(huì)影響的 key 是從 A 到 B 原先的 key,但是原來的 B 到 C 和 C 到 A 之前的數(shù)據(jù)不會(huì)被影響

    節(jié)點(diǎn)新增

image.png
  1. 新節(jié)點(diǎn)加入后,原先的 key 可能順時(shí)針走到新的節(jié)點(diǎn)上

  2. 會(huì)影響的同樣為從 A 到 B 原先的 key,但并不是全部

    虛擬節(jié)點(diǎn)

image.png
  1. 對于同一個(gè)節(jié)點(diǎn)增加一個(gè)或多個(gè)虛擬節(jié)點(diǎn)來讓整個(gè)哈希環(huán)分布更加均勻
  2. 這樣對應(yīng)的 key 在訪問的時(shí)候不會(huì)猶豫環(huán)中的空間過于密集從而冷熱不均

總結(jié)

  1. 哈希環(huán)利用環(huán)的性質(zhì)讓節(jié)點(diǎn)的增減變化只會(huì)影響到部分?jǐn)?shù)據(jù)的路由
  2. 相對應(yīng)的如果要做數(shù)據(jù)遷移也會(huì)影響到更少的數(shù)據(jù)
  3. 通過虛擬節(jié)點(diǎn)的加入還能減少節(jié)點(diǎn)訪問的冷熱不均的問題
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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