五分鐘了解一致性hash演算法
前言一致性雜湊演算法的設計目標是為了解決網際網路中的熱點問題,現在也被廣泛應用在分布式系統中。
比如針對負載均衡問題,對hash值取模的演算法擴充套件性差,當增加或者減少伺服器時,對映關係可能會出現問題,採用一致性hash演算法,就能較好的解決該問題。
hash值取模演算法存在的問題
比如,我們有海量的儲存在伺服器上,假如,現在有4臺伺服器,我們可以根據名稱,採用hash演算法,決定儲存在哪台伺服器
如果現在需要增加伺服器,那麼訪問的伺服器的演算法就會發生改變,比如增加一台伺服器後,演算法變為hash(a.jpg)/5,這時候計算結果不一定還是2,那麼的位置就要發生改變。同理,減少伺服器的話,也會存在相同問題。而且,所有的伺服器都會受到影響。
一致性hash演算法
一致性hash演算法將雜湊值對映的空間表示成乙個虛擬圓環,一般可以設定對映值的範圍是0----232-1,也就是說,我們得到的hash值要對232取模。該hash環可表示如下:
假如我們有四台伺服器,我們可以選擇伺服器的ip或主機名作為關鍵字進行雜湊,然後取模,每台機器就能在hash環上確定固定位置。如下圖所示:
例如有object a、object b、object c、object d四個資料,經過雜湊運算及取模後,在環空間上的位置如下圖所示:
從此位置沿環順時針「行走」,第一台遇到的伺服器就是其應該定位到的伺服器。也就是說object a定位到node a,object b定位到node b,object c定位到node c,object d定位到node d。
如果node c這台伺服器出現問題宕機,那麼objcet c定位到node d這台伺服器,所以當某台伺服器出問題時,只會對順時針方向的前一台機器產生影響,本例中,只會對node d有影響。
同理,如果增加一台伺服器node x,計算後,定位到如下圖所示位置:
那麼object c就會定位到node x,這種情況,只會對順時針方向的node c產生影響,不會影響其他伺服器。
一致性hash的缺點
當伺服器節點比較少的時候會出現一致性hash演算法傾斜的問題(大部分資料存在一台伺服器上)。在不改變伺服器節點個數的前提下,一般解決方案是增加虛擬節點(即對每乙個伺服器根據一致性hash演算法計算多個值,每個計算結果在環上定位乙個服務節點),在定位資料時,就可以根據虛擬節點,定位到實際伺服器。
總結一致性雜湊演算法對於節點的增減都只需重定位環空間中的一小部分資料,具有較好的容錯性和可擴充套件性。
了解一致性hash演算法
看到一遍介紹consistent hashing 的文章,通俗易懂,特記錄 事情由來 常用的負載均衡演算法 在做伺服器負載均衡時候可供選擇的負載均衡的演算法有很多,包括 輪循演算法 round robin 雜湊演算法 hash 最少連線演算法 least connection 響應速度演算法 res...
了解一致性hash演算法
一致性hash演算法,在維基百科的定義是 翻譯過來的意思就是當hash表更新節點的數量時,只有k n的關鍵字位置有變化,其他關鍵字的位置對映關係不變。與其他的hash演算法比,其他的演算法節點個數n變化後,更多的key關鍵字和節點的對映會發生變化。一致性hash主要用在路由中,對有狀態的服務,根據k...
了解一致性hash演算法
一致性hash演算法,在維基百科的定義是 翻譯過來的意思就是當hash表更新節點的數量時,只有k n的關鍵字位置有變化,其他關鍵字的位置對映關係不變。與其他的hash演算法比,其他的演算法節點個數n變化後,更多的key關鍵字和節點的對映會發生變化。一致性hash主要用在路由中,對有狀態的服務,根據k...