一致性雜湊的理解

2021-08-15 10:59:32 字數 1336 閱讀 2956

一致性雜湊(consistent hashing)

首先,讓我們了解一下一致性雜湊解決了怎樣的實際問題,

當我們有了n臺伺服器(cache)時,我們通常會採用如下的通用演算法  將物件(object)均勻對映分配到伺服器上,

hash

(object)%n 

試想一下,當其中的一台伺服器down機了,或是添置一台伺服器,那麼通用的演算法的對映公式將變成

hash

(object)%(n+1) 或是  hash(object)%(n-1)

這就意味著幾乎所有的伺服器都失效了,這對於伺服器而言是一場巨大的災難,洪水般的訪問將湧向後台的伺服器,

而一致性雜湊,可以解決以上問題。

一致性雜湊是一種雜湊演算法,為的是在新增和刪除cache時,極大的減小對已存在的對映關係的影響,盡可能的滿足

單調性的要求

那麼一致性雜湊是如何做到的呢

如圖,將object和cache一起對映到環上,沿順時針方向就形成了如下的對應關係

object1->cachea  ,object2->cacheb ,object3->cacheb

,object4->

cacheb

現假設cachea down機了 ,那麼與之對應的object1只要連線到cacheb

上即可,並不會影響到object2、object3

和object4

因此,當一台伺服器掛掉,收到影響的物件僅是逆時針與之相連的物件,並不會影響到順時針方向上的對映關係。

同樣的,若新增伺服器,影響到的也是伺服器與伺服器之間的一小部分的物件的連線。

如此一來就解決了,hash演算法的改變從而產生的的後台伺服器大規模的訪問的爆發 這一問題。

當然,**到這可能會有細心的大佬發現,hash演算法並不能保證均分連線訪問的情況,

於是,一致性雜湊引入了「虛擬節點「的概念,簡單來說,就是物理節點在環形上的複製品,乙個實際的物理節點可以

對應著若干個虛擬節點,如下圖:

虛擬節點的引入使得本來連線在cacheb上的object2被對映到了a1上,因此實際連線到了物理伺服器cachea上,

均分了cacheb的壓力。

1.一致性雜湊解決了 通用雜湊下乙個節點失效導致所有節點失效的 巨大問題。盡可能減小了節點失效對已完成對映節點的影響。 2.

虛擬節點的引入為的是更好的均分伺服器的壓力,盡可能讓所有節點來承擔失效節點後的重新分配問題。

一致性雜湊的理解

參考 先說結論 一致性雜湊也是雜湊演算法的一種,只是為了解決普通雜湊因為節點的變動導致資料遷移過大的問題。其核心思想是將位址空間看做乙個環狀結構,將節點進行雜湊,使節點盡可能均勻的散落在環上。同時將資料進行雜湊,也將資料均勻的散落在環上,最後,將資料全都放置在離資料順時針方向 因為是混裝結構,順時針...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...

一致性雜湊

from 學習分布式,一致性雜湊是最最基礎的知識,所以要理解好.那什麼是一致性雜湊呢?what 1.平衡性是指 hash的結果應該平均分配到各個節點,這樣從演算法上就解決了負載均衡問題.2.單調性是指 在新增或者刪減節點時,同乙個key訪問到的值總是一樣的.3.分散性是指 資料應該分散的存放在 分布...