成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘了解一致性哈希算法

云計算 分布式
假設真實節點A被移除,A對應虛擬節點也會移除,但是多虛擬節點方式可以映射更多真實節點,讓剩余的節點更好得去承擔節點變化的請求壓力!

理論

一致性哈希算法是一種常用的分布式算法,其主要用途是在分布式系統中,將數據根據其鍵(key)進行散列(hash),然后將散列結果映射到環上,再根據數據節點的數量,將環劃分為多個區間,每個節點負責處理環上一定區間范圍內的數據。

普通哈希的問題

分布式集群中,對機器的添加刪除,或者機器故障后自動脫離集群這些操作是集群管理最基本的功能。如果采用常用的hash(object)%N取模的方式,在節點進行添加或者刪除后,需要重新進行遷移改變映射關系,否則可能導致原有的數據無法找到。

舉個栗子

隨著業務和流量的增加,假如我們的Redis查詢服務節點擴展到了3個,為了將查詢請求進行均衡,每次請求都在相同的Redis中,使用hv = hash(key) % 3的方式計算,對每次查詢請求都通過hash值計算,得出來0、1 、2的值分別對應服務節點的編號,計算得到的hv的值就去對應的節點處理。

圖片圖片

但是這里有個問題,服務增減是需要對此時的key進行重新計算,比如減少一個服務的時候,此時需要按 hv = hash(key) % 2計算,而增加一個服務節點的時候需要按hv = hash(key) % 4計算,而這種取模基數的變化會改變大部分原來的映射關系,導致數據查詢不到。

圖片圖片

這個時候只能進行數據遷移,真是太麻煩了,而一致性哈希算法顯然是一個更好選擇!

一致性hash算法

一致性哈希同樣使用了取模的方式,不同的是對 2^32 這個固定的值進行取模運算。

在使用一致哈希算法后,哈希表槽位數(大小)的改變平均只需要對 K/n 個關鍵字重新映射,其中K是關鍵字的數量, n是槽位數量,而不需要對所有的映射關系進行重新映射!

Hsh環

我們可以把一致哈希算法是對 2^32 進行取模運算的結果值虛擬成一個圓環,環上的刻度對應一個 0~2^32 - 1 之間的數值,如下圖:

圖片圖片

節點入環

下圖我們三個節點(A/B/C)經過哈希計算,放入下面環中,一般我們會根據服務器的IP或者唯一別名進行哈希計算。

圖片圖片

那數據是如何進行關系映射呢,同樣key值經過哈希之后,結果映射到哈希環上,然后將結果值按順時針方向找到離自己最近的節點上,將value存儲到那個節點上。

如下圖:

圖片圖片

k1、k2、k3經過哈希計算后在哈希環的位置,順時針方向找到離自己最近的節點,比如k1最近的節點是A,節點A就是存儲 k1數據value的節點。

新增節點

新增加點D,節點的數量增加到了四個,而此時k2最近的節點是D,所以會遷移到D,k1和k3不受影響

圖片圖片

刪除節點

刪除節點B之后,存儲在B節點上的k2,將會重新映射找到離它最近的節點C,此時k2的數據存儲在C節點上,k1、k3不受影響。

圖片圖片

不平衡問題

我們通過新增節點和刪除節點,知道了該方式會影響該節點的順時針的后一個節點,其他節點不受影響。

但是因為生成哈希值的分布并不是均勻的,如下圖新增k4、k5,如果節點B宕機了,k2和k4也遷移到節點C,導致那么大部分請求就落到節點C了,如果數量更多呢,此時會導致節點C壓力陡增,這樣就不均衡了!

圖片圖片

那如何解決這個問題呢?

那就是通過 虛擬節點

虛擬節點

虛擬節點 可以理解為是作為實際節點的一個copy,多個虛擬節點映射一個實際節點,因為在哈希環上節點越多就分布的越均勻,即使我們現實中不會有那么多真實節點。

圖片圖片

上圖中三個真實節點A、B、C,映射了9個虛擬節點,如果key值經過哈希落到臨近A-1、A-2、A-3的虛擬節點,那么最終都將映射到真實節點A,你想如果虛擬節點再多點,是不是就會更均衡了!

假設真實節點A被移除,A對應虛擬節點也會移除,但是多虛擬節點方式可以映射更多真實節點,讓剩余的節點更好得去承擔節點變化的請求壓力!

如下圖:

圖片圖片

這里簡單講解一下,圖中真實節點A被移除,那么對應的虛擬節點移除,那么此時k1的重新映射到C-1、k3重新映射到B-3,也就是說被遷移到真實節點B和C,由此可見節點被移除會被更均衡的分散到其他節點上。

圖中只簡單列舉了幾個虛擬節點,虛擬節點越多,相對會越均衡。

好了,今天關于一致性哈希算法的介紹就到這了!

責任編輯:武曉燕 來源: 小許code
相關推薦

2024-01-11 08:13:49

Raft算法分布式

2021-02-05 08:00:48

哈希算法?機器

2021-09-15 07:46:42

哈希一致性哈希算法

2020-07-20 08:30:37

算法哈希分布式系統

2016-12-19 18:41:09

哈希算法Java數據

2021-07-27 08:57:10

算法一致性哈希哈希算法

2021-02-02 12:40:50

哈希算法數據

2021-11-12 08:38:26

一致性哈希算法數據結構

2019-11-01 09:13:37

算法哈希緩存

2018-07-05 09:41:08

一致性哈希算法

2023-06-25 09:44:00

一致性哈希數據庫

2023-06-26 07:17:48

負載均衡策略Dubbo

2022-03-22 09:54:22

Hash算法

2020-10-28 11:15:24

EPaxos分布式性算法

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2023-12-20 08:11:02

Redis節點通信

2023-12-05 14:44:01

2020-03-16 11:55:28

PaxosRaft協議

2019-10-11 23:27:19

分布式一致性算法開發

2022-11-10 07:49:09

hash算法代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久久 | 成人亚洲片| 国产高清免费 | 国产一区二区三区在线看 | 91精品国产欧美一区二区 | 欧美日韩在线高清 | 亚洲综合在线一区二区 | 亚洲欧美成人影院 | 91一区 | 日韩电影免费在线观看中文字幕 | 国产一区二区三区免费 | 一区二区三区四区在线视频 | 久久久久精 | 欧美99久久精品乱码影视 | 四虎影| 日本小电影在线 | 91中文字幕在线 | 亚洲网站观看 | www性色 | 欧美a区| 久久久久国 | 欧美日韩亚洲国产 | 日本在线观看网址 | 一区二区三区视频在线 | 天堂免费 | 一级片在线播放 | 99精品欧美一区二区三区综合在线 | 99精品视频在线观看免费播放 | 成人午夜激情 | 91大神新作在线观看 | 日本精品久久 | 国产十日韩十欧美 | 欧美精品一区三区 | 午夜不卡福利视频 | h视频在线观看免费 | 亚洲一区二区三区在线播放 | 日日摸日日添日日躁av | 精品一区二区三区91 | 午夜天堂精品久久久久 | 免费电影av | 精品国产青草久久久久福利 |