一致性哈希原理應用

一致性哈希


前言

本文主要講明一致性哈希的 原理,優點,新問題及解決,應用場景。


一、基本概念/原理

      一致性哈希算法也是使用取模的方法,只不過是對232取模,然後將232個點均勻的散列在一個圓上,這個圓環叫做哈希環。
      可以參考下圖,正上方的點代表0,順時針方向爲0,1,2,3…232-1 。
hash環
      結合實際問題解釋:
      有三臺緩存服務器,需要將信息均勻的放到三臺緩存服務器中。
      1、對三臺機器的ip進行哈希計算後對232取模,計算出的結果是一個0到232-1之間的一個整數,這樣三臺機器就映射到了這個環上。(圖例爲理想情況)
服務器放置hash環
      2、將要存的信息同樣映射放置到哈希環上,對信息的key進行hash計算後對232進行取模,計算出來的數值對應hash環上的位置如下圖橙點所示,按照順時針方向找到第一個服務器是A服務器,那麼就會把信息放到A服務器中。
資源信息放置服務器
      通過這種方法,判斷一個資源應該被緩存到哪臺服務器上,將緩存服務器與被緩存資源都映射到hash環上以後,從被緩存資源的位置出發,沿順時針方向遇到的第一個服務器,就是當前資源將要緩存在上面的服務器,由於被緩存資源與服務器hash後的值是固定的,所以,在服務器不變的情況下,一個資源必定會被緩存到固定的服務器上。下次想要訪問這個資源時,只要再次使用相同的算法進行計算,即可算出這個資源被緩存在哪個服務器上,直接去對應的服務器查找對應的資源就可以了。













二、優勢

1.服務器故障宕機節點減少

      結合上面三臺服務器來說,如果B服務器出現了故障,那麼B服務器會從Hash環上移除。如下圖所示,原先的資源3是放在B服務器的,現在B宕機移除後,資源3的位置會發生變化,會放到C機器中,但是其他的資源位置不會發生變動。

      一致性hash優點:如果使用之前的hash算法,服務器數量發生改變時,所有服務器的所有緩存在同一時間失效需要重新計算緩存拉取,而使用一致性哈希算法時,服務器的數量如果發生改變,並不是所有緩存都會失效,而是隻有部分緩存會失效,前端的緩存仍然能分擔整個系統的壓力,而不至於所有壓力都在同一時間集中到後端服務器上。
B服務器宕機


2.擴容/動態添加服務器

      當我們發現三臺機器壓力過大需要增加機器時,對新加的機器D進行hash計算後對 232取模映射放置到hash環上,如下圖所示,此時只會影響資源2所存的位置,而不會影響其他的資源。
集羣擴容

三、存在問題及解決方案

1.哈希環偏斜

      問題:
      在上面hash環上的服務器分佈是極其理想化的,在實際情況中可能會出現下圖情況,這樣的話,1,2,3,4,6號資源均被緩存在了服務器A上,5號資源被緩存在了服務器B上,服務器C上沒有緩存任何資源,三臺服務器並沒有被合理的平均的充分利用。如果此時服務器A出現故障,那麼失效緩存的數量也將達到最大值,在極端情況下,仍然有可能引起系統的崩潰,這種情況爲hash環的偏斜。
哈希環偏斜

      解決方案:
      可以通過虛擬節點來解決偏斜問題。將現在已有的三臺真實的物理服務器節點通過虛擬的方法複製出來,這些節點爲虛擬節點。“虛擬節點"是"實際節點”(實際的物理服務器)在hash環上的複製品,一個實際節點可以對應多個虛擬節點。
      如下圖所示ABC三臺機器分別虛擬出了一個虛擬節點,也可以虛擬出更多的虛擬節點,這樣緩存的分佈就會剛加均衡,虛擬節點越多,hash環上的節點就越多,緩存被均勻分佈的概率就越大。
虛擬節點


2.新增節點數據命中問題

      問題:
      當需要新增服務器時,讀取資源的時候,會造成一小部分資源無法直接命中,在新增的服務器上獲取資源但新增的服務器中並沒有該資源,這個時候會穿透到數據庫(或持久性服務器)中先取回資源放到新增機器上後再給服務返回需要的資源。

      解決方案:
      可以分爲兩階段,如果拉取的資源沒有在離自己最近的服務器上,那麼首先去離自己第二近的服務器上拉取資源,然後異步將資源再緩存到最近的服務器上。



四、應用場景

      1、最主要用的場景是redis中多節點集羣的負載中。
      2、如果像是圖片等資源存的位置是自己管理的集羣,可以使用該方式進行負載。一是避免集羣中服務器數量發生變化的時候,會發生大量拉取圖片的請求無法直接命中而引起的雪崩,導致整體系統壓力過大而崩潰;二是如果使用的是其他的負載均衡方式,可能會導致幾乎所有的圖片資源位置發生變動,在此期間系統可用性會變差。
      3、集羣經常需要變動時負載均衡方式可以採用該種方式,動態擴容,宕機等。




總結


本文主要依據實際場景來講明瞭一致性hash的原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章