五分鐘瞭解一致性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演算法計算多個值,每個計算結果在環上定位一個服務節點),在定位資料時,就可以根據虛擬節點,定位到實際伺服器。
總結
一致性雜湊演算法對於節點的增減都只需重定位環空間中的一小部分資料,具有較好的容錯性和可擴充套件性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2771301/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10分鐘瞭解一致性hash演算法演算法
- Java教程分享:五分鐘瞭解一致性hash演算法Java演算法
- 一致性hash演算法演算法
- 【轉】什麼是一致性hash演算法?(詳解)演算法
- 一致性hash演算法的理解演算法
- PHP 之一致性 hash 演算法PHP演算法
- 什麼是一致性Hash演算法?演算法
- 一分鐘瞭解降維演算法演算法
- 手動實現一致性 Hash 演算法演算法
- 一分鐘瞭解深度學習演算法深度學習演算法
- 一致性Hash
- 自己實現一個一致性 Hash 演算法演算法
- 一致性 Hash 演算法的實際應用演算法
- 一致性hash演算法原理及go實現演算法Go
- 一致性hash演算法的一些理解演算法
- 帶你真正的瞭解加密和Hash加密
- 一致性 hash 環
- 五分鐘瞭解 BlazorBlazor
- 強一致性hash實現java版本及強一致性hash原理Java
- 五分鐘快速瞭解Less
- 5分鐘快速瞭解 RedisRedis
- 30分鐘快速瞭解webpackWeb
- 全面瞭解一致性雜湊演算法及PHP程式碼實現演算法PHP
- 五分鐘看懂一致性雜湊演算法演算法
- 5分鐘理解一致性雜湊演算法演算法
- 兩分鐘瞭解Java中volatile!Java
- 30 分鐘內瞭解 IEC 61850
- 10分鐘帶你瞭解NLA
- Hash演算法演算法
- 深入淺出一致性Hash原理
- 10分鐘瞭解react引入的hooksReactHook
- 五分鐘瞭解網路連線
- 一分鐘瞭解PON網路
- 一分鐘瞭解JAVA語言Java
- 5分鐘瞭解快取的概念快取
- 5分鐘瞭解資料結構資料結構
- 什麼是JAVAEE? 2分鐘瞭解Java
- 以vue-cli為例,瞭解webpack的hash、chunkhash、contenthashVueWeb