在《了解一致性hash演算法》中介紹了一致性hash ring的實現演算法。
但是切割hash環的時候,遇到乙個思考題:
在數字環上隨機落n個點,把環切分成n個區間,原點要算乙個切分點嗎?如果算,就只產生n-1個隨機數就可以了,如果不算,要產生n個隨機點。為什麼會產生這個疑問?如上圖,把hash用三個綠色點分割了三段。如果把環從藍色的0點開啟,變成右邊的直線。直線被分成了四段。隨機分割直線四段,肯定用右邊的方法,為啥切割hash環就用左邊的方法呢?
最終owen認為,還是要把0點當作乙個已經切分過的node來處理,因為每次產生的隨機數,都是按照右邊展開的直線的空間來落點,分割直線的。環只是乙個讓人容易理解的模型,真正實現時還是按照一維來生成隨機點的。否則,跨過0點的區間段,會是其他區間的二倍。
在工程實踐中,為什麼也沒發生不均勻的問題,用的好好的呢?
有兩個原因:
一、引入了虛節點,分割的區間太多,即使跨0點有兩個區間段,也在程式接受的誤差範圍內。
二、由於是隨機落點,分割的區間段大小不一,檢測程式也會控制各實節點間的誤差符合專案要求。
順便說一下,把0點作為乙個已切分的點還有個好處:不用特別考慮跨0區間key的歸屬情況,程式容易寫。
把零點算作乙個node,產生n-1個節點切分hash環;
實際切分的區間是否均勻,要靠檢測程式來檢查,不能只依賴理論推斷。
一致性hash切分環的問題
Hash環 一致性Hash原理
當前,memcached redis這類分布式kv快取已經非常普遍。從本篇開始,本系列將分析分布式快取相關的原理 使用策略和最佳實踐。我們知道memcached的分布式其實是一種 偽分布式 也就是它的伺服器結點之間其實是相互無關聯的,之間沒有網路拓撲關係,由客戶端來決定乙個key是存放到哪台機器。具...
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...