Hash和一致性Hash演算法

2021-07-09 09:29:26 字數 750 閱讀 3004

hash

hash無論是資料結構還是分布式快取,都有應用。hash更確切的說是hash函式,是乙個集合的資料到另乙個集合內資料的乙個對映。被對映方在數學裡面叫做原象,這裡我們叫做資料,對映到的叫象,這裡我們稱作槽。

分布式快取伺服器和應用伺服器的區別在於,應用伺服器中的所有伺服器都部署著相同的應用,而快取伺服器集群中不同的機器中存放著不同的快取,因為快取的訪問請求不能再幾種中任意一台伺服器上處理,必須先找到資料所在的伺服器,才能訪問。由此可以看出,在上述的分布式快取系統中,對於伺服器集群的管理、路由演算法決定著快取伺服器的定位,起到了至關重要的作用。 

簡單的hash取模演算法:

使用快取key的hash值與伺服器數目取模獲得伺服器列表下標編號。由於hashcode的隨機性,這樣可以很輕鬆的保證快取資料在整個伺服器集群均勻分布。

由於**架構必須要考慮集群的伸縮性,對於快取伺服器來說,必須在新上線快取伺服器或是下線已有伺服器時使集群中已經快取的資料盡可能還被訪問到。

由於簡單的hash取模演算法,上述目標是無法實現的。比如當四台伺服器擴充套件到5臺的時候,由於所有資料都要重新做hash取模運算,大約80%的快取資料會被被遷移,當有100太伺服器時,這個比例將高達99%。

當大部分快取資料因為伺服器下線/擴容而不能正常讀取的時,快取將被擊穿而資料訪問壓力會落在資料庫上面,這將大大的超過資料庫的負載能力,嚴重的甚至會引起資料庫宕機

一致hash演算法:

為了解決上述問題,必須通過改進路由演算法,使得伺服器集群擴容/下線機器時大部分快取的資料仍然能夠正確命中

Hash演算法和一致性Hash演算法

我們對同乙個名稱做相同的雜湊計算時,得出的結果應該是不變的,如果我們有3臺伺服器,使用雜湊後的結果對3求餘,那麼餘數一定是0 1或者2,正好與我們之前的伺服器編號相同,如果求餘的結果為0,我們就把當前名稱對應的快取在0號伺服器上,如果餘數為1,就把當前名對應的快取在1號伺服器上,如果餘數為2,同理,...

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...