1. 程式人生 > 其它 >一致性Hash演算法原理(通俗易懂)

一致性Hash演算法原理(通俗易懂)

一致性Hash演算法應用場景 請求的負載均衡:比如Nginx的ip_hash策略,通過對IP的Hash值來額定將請求轉發到哪臺Tomcat 分散式儲存:比如分散式叢集架構Redis、Hadoop、ElasticSearch、Mysql分庫分表,資料存入哪臺伺服器,就可以通過Hash演算法來確定 普通Hash演算法存在的問題 如果伺服器減少或者增多,所有客戶端都需要進行重新Hash,然後進行分配。 一致性Hash演算法 一條直線上有0到2^32-1,這些正整數。然後我們將其頭尾相接,變成一個圓環形成閉環(Hash環) 我們以Nginx的ip_hash分發請求為例說明一致性Hash演算法: 對伺服器的IP進行hash演算法,獲取Hash值,然後放到Hash閉環對應位置上; 通過對客戶端的IP進行Hash演算法獲取Hash值,然後順時針查詢距離該Hash最近的伺服器,並將請求轉發到該伺服器。 這樣的話伺服器進行擴充套件或者縮減後,比如縮減了一臺伺服器3,那麼伺服器3和伺服器2之間的請求會被轉發到伺服器4上,而其他的請求不會受到影響,這就是一致性Hash的好處,將影響程度減小。 PS:這種方式有一個問題
假如就兩臺伺服器,通過Hash演算法後位置如下: 伺服器1-伺服器2之間的客戶端請求都轉發到了伺服器2上,然而其他大量請求都轉發到了伺服器1上,這就導致伺服器1壓力過大,這種問題叫做資料傾斜問題。 資料傾斜問題解決 一致性Hash演算法引入了虛擬節點機制 具體做法是在伺服器IP或者主機名後面增加編號來實現。比如可以為每臺伺服器計算是哪個虛擬節點,於是可以分別計算“伺服器1IP#1,伺服器2IP#2,伺服器1IP#3,伺服器2IP#1,伺服器2IP#2,伺服器2IP#3”的雜湊值,於是形成了6個虛擬節點,如下圖 這樣的話客戶端經過Hash演算法後就會被更加均勻的分佈在Hash閉環上,請求也會被更加均勻的分發在各個伺服器上,從而解決了資料傾斜問題 劈天造陸,開闢屬於自己的天地!!!與君共勉