分布式計算中一致性Hash函式應用(容錯,擴縮容)

2021-10-07 17:11:59 字數 2392 閱讀 3238

解決分布式環境中資料傾斜和容錯問題

解決普通hash方法節點失效的造成的重hash問題

普通hash在分布式環境中應用的問題

在資料並行的分布式系統中,上游運算元例項的輸出怎樣分配到下游運算元例項就涉及到hash的應用。以flink為例,如下圖所示,下游運算元有兩個例項,上游的分發資料策略有——一對一**、廣播、基於鍵值、隨機這四種。其中基於的鍵值的keyby()方法就是使用hash演算法來對同一key值對應的鍵值對進行分配。

//-------segment

public

static

intcomputekeygroupforkeyhash

(int keyhash,

int maxparallelism)

//keyby中通過hash分類鍵值

3. 這種直接hash的方式有個問題:如果下游的運算元的並行度改變,上游節點hash值就會改變,導致「同乙個key值分配在同乙個例項中」不再成立,flink對此採用的策略有三種:

1). 對於不同的鍵值組根據新的例項數量重新hash分配

2). 運算元所有例項的鍵值對全部收集然後進行重新均勻分配

3). 運算元將所有鍵值對傳送到新的所有任務上,每個新的任務決定留下哪部分(根據狀態為聯合列表狀態還是廣播狀態還有所不同,就不展開了)

這裡就能看出,簡單的hash方法會影響所有的已有運算元。

一致性hash函式原理與普通hash對比

普通的hash計算:hash(key) % parallelism 並行度改變,原先分配的鍵值對需要重新計算然後分配

一致性hash函式:不再是通過單個hash值決定鍵值分配的節點,而是將整個hash域作為分配的區間,為不同的節點分配一定的長度區間,只要是hash計算結果在某個分割槽中的鍵值對就會被分配到同乙個節點中。

就像是上圖中描述的:一致性hash演算法也是使用取模的方法,只是,不再是對運算元的並行度進行取模。

上圖中,四個鍵值對物件abcd根據計算出的hash值落在了整個hash閾的不同位置,從各自位置沿環順時針,第一台遇到的節點就是其應該被分配的節點

一致性hash解決的問題

可以實現狀態的多副本(例如將每個節點順時針起的第乙個節點作為備份節點),便於狀態遷移(遷移到副本存在的節點就省去了遷移的開銷)

負載均衡的實現

如上圖所示,假設這時一致性hash分配邏輯是逆時針區間分配即a到b區間的鍵值對分配到a節點中;如果這時a的負載過大,那麼可以調整b在環空間邏輯位置,如上圖右側,使其鍵空間得到擴充套件,分擔了來自節點a的一些負載;在此過程中如果b正好是a的副本節點,那麼就不需要顯式的狀態轉移,開銷更小。

擴縮容

擴容:在a和b節點之間增加乙個節點(即增加乙個運算元並行度),該新節點將接管節點a的部分負載。在a繼續處理傳入的鍵值對的同時執行延遲的狀態遷移轉換(即到節點c的非同步狀態轉移),並且僅在狀態轉移完成後才轉移負載。(在新增的節點中是沒有原先的備份節點的,所以不能夠處理新的元組,只能是當a處理完之後將負載進行遷移)。

縮容:在這種情況下,由於節點a的負載很輕,檢查相鄰節點b看看是否有空閒週期來接管其所有負載。 如果滿足條件,則可以將節點a從對等環中刪除,並將節點b移動到其位置。不需要狀態或元組傳輸即可完成轉換。

一致性hash方法和普通的hash相比關鍵就是將對應關係由「單值對應」轉變為「區間對應」,減少了重對映的開銷,更容易實現容錯和擴縮容。

面試必備:什麼是一致性hash演算法?

kumbhare a, frincu m, simmhan y, et al. fault-tolerant and elastic streaming mapreduce with decentralized coordination[c]//2015 ieee 35th international conference on distributed computing systems. ieee, 2015: 328-338.

分布式一致性Hash演算法

介紹一致性hash演算法之前,先簡單回顧一下分布式以及hash演算法,便於理解為什麼要有一致性hash演算法。當我們也無需求很複雜時,單台機器io以及頻寬等都會成為瓶頸,所以對業務進行拆分,部署在不同的機器上,當有請求訪問時,根據某些特點將這些請求分散到各個伺服器上,這所有的伺服器組成的網路,我們稱...

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...