分布式系統如何拆解輸入資料,將資料分發到不同的機器中。下面將介紹幾種不同的資料分布方式。
[color=red][b]一:雜湊方式[/b][/color]
雜湊方式是最常見的資料分布方式,其方法是按照資料的某一特徵計算雜湊值,並將雜湊值與機器中的機器建立對映關係,從而將不同雜湊值的資料分布到不同的機器上。所謂資料特徵可以是key-value 系統中的 key,也可以是其他與應用業務邏輯相關的值。
[img]
只要雜湊雜湊性比較好,資料就能均勻到分發到不同機器中。同時,需要管理的元資訊很少,只需要知道雜湊函式和模(一般是機器總數)。
但是有個明顯的缺點,擴充套件性很差。如果我想把集群規模擴大,可能所有的資料需要被重新遷移。工程中,擴充套件雜湊分布資料的系統時,往往使得集群規模成倍擴 展,按照資料重新計算雜湊,這樣原本一台機器上的資料只需遷移一半到另一台對應的機器上即可 完成擴充套件。針對雜湊方式擴充套件性差的問題,一種思路是不再簡單的將雜湊值與機器做除法取模對映,而是將對應關係作為元資料由專門的元資料伺服器管理。訪問資料時,首先計算雜湊值並查詢元資料伺服器,獲得該雜湊值對應的機器。同時,雜湊值取模個數往往大於機器個數,這樣同一臺機器上需要負責多個雜湊取模的餘數。不過,需要管理的元資料就多了。
另外,如果作為雜湊函式的key的某個值出現了嚴重不均,就容易出現「資料傾斜」。比如以使用者id作為特徵值,偏偏使用者id=1的資料特別多,這樣就悲劇了。
[color=red][b]二:按資料範圍分布[/b][/color]
按資料範圍分布是另乙個常見的資料分布式,將資料按特徵值的值域範圍劃分為不同的區間,使得集群中每台(組)伺服器處理不同區間的資料。
[img]
對於上面雜湊方式某個使用者資料特別多我們就可以通過採用資料範圍分布解決,動態劃分範圍空間,實現負載均衡(類似b樹)。
按資料範圍分布資料需要記錄所有的資料分布情況。一般的,往往需要使用專門的伺服器在記憶體中維護資料分布資訊, 稱這種資料的分布資訊為一種元資料。
實際工程中,一般也不按照某一維度劃分資料範圍,而是使用全部資料劃分範圍,從而避免資料傾斜的問題。
使用範圍分布資料的方式的最大優點就是可以靈活的根據資料量的具體情況拆分原有資料區間, 拆分後的資料區間可以遷移到其他機器,一旦需要集群完成負載均衡時,與雜湊方式相比非常靈活。 另外,當集群需要擴容時,可以隨意新增機器,而不限為倍增的方式,只需將原機器上的部分資料 分割槽遷移到新加入的機器上就可以完成集群擴容。而缺點就是元資料可能會成為瓶頸。
[color=red][b]三:按資料量分布[/b][/color]
資料量分布資料與具體的資料特徵無關,而是將資料視為乙個順序增長的檔案,並將這個檔案按某 一較為固定的大小劃分為若干資料塊(chunk),不同的資料塊分布到不同的伺服器上。與按資料範 圍分布資料的方式類似的是,按資料量分布資料也需要記錄資料塊的具體分布情況,並將該分布信 息作為元資料使用元資料伺服器管理。
按資料量分布資料的方式一般沒有資料傾斜的問題,資料總是被均勻切分並分布到集群中。當集群需要重新負載均衡時,只需通過遷移資料塊即可完成。集群擴容 也沒有太大的限制,只需將部分資料庫遷移到新加入的機器上即可以完成擴容。按資料量劃分資料的缺點是需要管理較為複雜的元資料。
[color=red][b]四:一致性雜湊[/b][/color]
一致性雜湊的基本方式是使用乙個雜湊函式計算資料或資料特徵的雜湊值,令該雜湊函式的輸出值域為乙個封閉的環,即雜湊函式輸出的最大值是最小值的前序。將節點隨機分布到這個環上,每節點負責處理從自己開始順時針至下乙個節點的全部雜湊值域上的資料。
[img]
節點 a 負責的值域範圍為[1,4),節點 b 負責的範圍為[4, 9), 節點 c 負責的範圍為[9, 10)和[0,1)。
一致性雜湊的優點在於可以任意動態新增、刪除節點,每次新增、刪除乙個節點僅影響一致性雜湊環上相鄰的節點。
但也有很明顯的缺點,隨機分布節點的方式使得很難均勻的分布雜湊值域,尤其在動態增加節點後,即使原先的分布均勻也很難保證繼續均勻,由此帶來的另乙個較為嚴重的缺點是,當乙個節點異常時,該節點的壓力全部轉移到相鄰的乙個節點,當加入乙個新節點時只能為乙個相鄰節點分攤力。
為此,一種改進是引入「虛節點」的概念。系統初始時就建立許多虛節點, 虛節點的個數一般遠大於未來集群中機器的個數,將虛節點均勻分布到一致性雜湊值域環上,其功能與基本一致性雜湊演算法中的節點相同。為每個節點分配若干虛節點。運算元據時,首先通過資料的雜湊值在環上找到對應的虛節點,進而查詢元資料找到對應的真實節點。這樣,一旦某個節點不可用,該節點將使得多個虛節點不可用,從而使得多個相鄰的真實節點負載失效節點的壓裡。同理,一旦加入乙個新節點,可以分配多個虛節點,從而使得新節點可以負載多個原有節點的壓力,從全域性看,較容易實現擴容時的負載均衡。
一般,我們可以把[color=darkred][b]雜湊分布資料方式與按資料量分布資料方式組合使用[/b][/color]。按使用者 id 的雜湊值分資料,當某個使用者 id 的資料量特別大時, 該使用者的資料始終落在某一台機器上。此時,引入按資料量分布資料的方式,統計使用者的資料量, 並按某一閾值將使用者的資料切為多個均勻的資料段,將這些資料段分布到集群中去。由於大部分用 戶的資料量不會超過閾值,所以元資料中僅僅儲存超過閾值的使用者的資料段分布資訊,從而可以控 制元資料的規模。
參考:分布式系統原理介紹.pdf
分布式系統的資料分布方式
雜湊方式 常見雜湊方式 使用者id 機器 組 數 分配到0 機器 組 數 1 上 優點 只要雜湊函式的雜湊特性較好,雜湊方式可以較為均勻的將資料分布到集群中去。缺點 可擴充套件性不高,一旦集群規模需要擴充套件,則幾乎所有的資料需要被遷移並重新分布。一旦某資料特徵值的資料嚴重不均,容易出現 資料傾斜 ...
分布式 分布式系統的設計
在計算機領域,當單機效能達到瓶頸時,一般有兩種方式解決效能問題 而分布式系統的設計說白了就是 如何合理將乙個系統拆分成多個子系統部署到不同機器上。講設計方法前,先介紹分布式系統的特性 1 分布性 空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。2 對等性 分布式系統中的計...
分布式系統
分布式系統和計算機網路系統的共同點是 多數分布式系統是建立在計算機網路之上的,所以分布式系統與計算機網路在物理結構上是基本相同的。他們的區別在於 分布式作業系統的設計思想和網路作業系統是不同的,這決定了他們在結構 工作方式和功能上也不同。網路作業系統要求網路使用者在使用網路資源時首先必須了解網路資源...