分布式儲存和一致性雜湊

2021-07-13 11:29:03 字數 2073 閱讀 3022

1、什麼是一致性雜湊

在動態變化的cache環境中,雜湊演算法應滿足4個適應條件:

均衡性:雜湊的結果能夠盡可能分布到所有的快取中去

單調性:當緩衝區大小變化時一致性雜湊盡量保護已分配的內容不會被重新對映到新緩衝區

分散性:在分布式環境中,終端有可能看不到所有的緩衝,而是只能看到其中的一部分。當終端希望通過雜湊過程將內容對映到緩衝上時,由於不同終端所見的緩衝範圍有可能不同,從而導致雜湊的結果不一致,最終的結果是相同的內容被不同的終端對映到不同的緩衝區中。

負載:另乙個維度的分散性問題,對於乙個特定的緩衝區而言,也可能被不同的使用者對映為不同的內容。

一致性雜湊基本解決了在p2p環境中最為關鍵的問題——如何在動態的網路拓撲中分布儲存和路由。每個節點僅需維護少量相鄰節點的資訊,並且在節點加入/退出系統時,僅有相關的少量節點參與到拓撲的維護中。

2、為什麼要一致性雜湊

如果雜湊函式的雜湊特性很好,雜湊方式可以將資料比較均勻的分不到集群中去。而且雜湊方式需要記錄的元資訊很簡單,每個節點只需要知道雜湊函式的計算方式以及模的伺服器個數就可以計算出處理的資料應該屬於哪台機器。然而,找出乙個雜湊特性和那後的雜湊函式非常困難。

因為:一,如果按照主鍵雜湊,同乙個使用者id下的資料可能被分散到多台伺服器,使得一次操作同乙個使用者id下的多條記錄變得困難;

二,按照使用者id雜湊,使用者資料量的大小會導致資料傾斜問題,造成某一台伺服器負載過大,需要拆分到多台伺服器上。

再者,當伺服器上下線的時候,n值發生變化,資料對映關係被打亂,需要重新分布,帶來大量的資料遷移。

因此,引入dht演算法。

3、一致性雜湊原理

首先,求出每個伺服器的hash值,將其配置到乙個 0~2^n 的圓環上(n通常取32)

其次,用同樣的方法求出待儲存物件的主鍵 hash值,也將其配置到這個圓環上

再次,從資料對映到的位置開始順時針查詢,將資料分布到找到的第乙個伺服器節點上

一致性hash的優點在於加入和刪除節點時只會影響到在雜湊還種相鄰的節點,而對其他節點沒有影響。

加入節點如下圖所示:

新增伺服器5,某些原來分布到伺服器4的資料需要遷移到伺服器5,其他資料保持不變。避免了資料遷移。

刪除節點如下圖所示:

刪除伺服器3,原來分布在伺服器3上的資料遷移到伺服器4上去。

這樣就沒有問題了嗎?不是

在增加節點5時,雖然只影響到節點4的資料分布,但當節點4需要遷移的資料過多時,整個集群的負載不均衡。

想法:將需要遷移的資料分散到整個集群,沒太伺服器只需遷移 1/n 的資料量即可。這就引入了虛擬節點的概念。

考慮到節點的異構性,不同節點的處理能力差別可能很大,每個物理節點根據其效能的差異分配多個 token, 每個 token 對應乙個「虛擬節點」,每個虛擬節點的處理能力基本相當,並隨機分配在雜湊空間中。儲存時,資料安裝雜湊值落到某個虛擬節點負責的區域,然後被儲存在該虛擬節點對應的物理節點中。

例:以4

臺伺服器為例,引入虛擬節點,假設每台伺服器處理能力一樣,且分配

2個token

,共有8

個「虛擬節點」分部在環形區域上,緩解了對映不均的情況。如下圖所示:

引入了「虛擬節點」後,對映關係發生了變化;【物件

--->

伺服器】……>【物件

--->

虛擬節點

--->

伺服器】

查詢物件所在

伺服器的對映關係如下圖所示:

4、怎樣實現的

// todo: 

分布式儲存與一致性雜湊

如果我們需要儲存qq號與個人資訊,建立起假設qq有10億使用者,並且每個使用者的個人資訊佔據了100m,如果要儲存這些資料,所需要的空間就得 100億 100m 10wt,這麼龐大的資料是不可能在單機環境下儲存的,只能採用分布式的方法,用多個機器進行儲存,但是即使使用多機,這些資料也至少要10w臺機...

分布式雜湊和一致性雜湊演算法

目錄 1 資料分布 2 雜湊方式 3 一致性雜湊方式 筆記來自分布式原理一書,供個人學習。單機系統與分布式系統的最大的區別在於問題的規模,即計算 儲存的資料量的區別。將乙個單機問題使用分布式解決,首先要解決的就是如何將問題拆解為可以使用多機分布式解決,使得 分布式系統中的每台機器負責原問題的乙個子集...

分布式 一致性雜湊演算法

一致性雜湊演算法,作為分布式計算的資料分配參考,比傳統的取模,劃段都好很多 傳統雜湊取模,在資料需要遷移時代價巨大,因此需要優化。一致性雜湊 將雜湊值看作乙個環,順時針將雜湊值接近節點的物件存到對應節點,通過這種演算法做資料分布,在增減節點的時候,可以大大減少資料的遷移規模。此時,可能會出現乙個問題...