一致性Hash演算法

2021-10-10 19:03:36 字數 1530 閱讀 2898

一.簡介

2的32次方進行hash取模 0到2的32次方-1

jedis分布式之 shardedjedispool (一致性hash分片演算法)

二.概念:

分布式系統中負載均衡的問題可以使用hash演算法讓固定的一部分請求落到同一臺服務器上,

這樣每台服務器固定處理一部分請求(並維護這些請求的資訊),起到負載均衡的作用。

三.做法:

(1)hash環上順時針從整數0開始,一直到最大正整數,我們根據四個ip計算的hash值肯定會落

到這個hash環上的某乙個點,至此我們把服務器的四個ip對映到了一致性hash環。

(2)當使用者在客戶端進行請求的時候,首先根據hash(使用者id)計算路由規則(hash值),然後看

hash值落到了hash環的哪個地方,根據hash值在hash環上的位置順時針找距離最近的ip作

為路由ip。

(3)當使用者在客戶端進行請求的時候,首先根據hash(使用者id)計算路由規則(hash值),然後看

hash值落到了hash環的哪個地方,根據hash值在hash環上的位置順時針找距離最近的ip作

為路由ip。

(4)當某個節點掛了之後資料會順時針放到下乙個節點。

(5)當增加新節點的時候,順時針的上乙個節點的資料會放到新增節點。

四.一致性hash的特性

(1)單調性(monotonicity),單調性是指如果已經有一些請求通過雜湊分派到了相應的服務器進行

處理,又有新的服務器加入到系統中的時候,應保證原有的請求可以被對映到原有的或者新的

服務器中去,而不會被對映到原來的其它服務器上去。

(2)分散性(spread):分布式環境中,客戶端請求的時候可能不知道所有服務器的存在,可能只知

道其中一部分服務器,在客戶端看來他看到的部分服務器會形成乙個完整的hash環。如果多

個客戶端都把部分服務器作為乙個完整hash環,那麼可能會導致,同乙個使用者的請求被路由

到不同的服務器進行處理。這種情況顯然是應該避免的,因為它不不能保證同乙個使用者的請求

落到同乙個服務器。所謂分散性是指上述情況發生的嚴重程度。一致性hash具有很低的分散性。

(3)平衡性(balance):平衡性也就是說負載均衡,是指客戶端hash後的請求應該能夠分散到不同

的服務器上去。一致性hash可以做到每個服務器都進行處理請求,但是不能保證每個服務器

處理的請求的數量大致相同。

五.虛擬節點

1.出現問題分析:

部門hash節點下架之後,雖然剩餘機器都在處理請求,但是明顯每個機器的負載不均衡,這樣稱

為一致性hash的傾斜,虛擬節點的出現就是為了解決這個問題。

2.增設虛擬節點

當物理機器數目為a,虛擬節點為b的時候,實際hash環上節點個數為a*b,將a節點分布為

a1,a2,a3;將a1、a2、a3平均分布在各個位置,使a服務的節點盡量均勻分配在各個角落,

每台服務器負載相對均衡

當某個節點掛了之後,其資料均衡的分布給相鄰的順時針後面的乙個節點上面,故所有資料比之前

所述一致性hash相對均衡

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

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

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

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

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...