分布式系统原理 之1 数据分布方式
分布式系統(tǒng)原理
數(shù)據(jù)分布方式
1. 哈希方式
哈希方式是最常見(jiàn)的數(shù)據(jù)分布方式,其方法是按照數(shù)據(jù)的某一特征計(jì)算哈希值,并將哈希值與機(jī)器中的機(jī)器建立映射關(guān)系,從而將不同哈希值的數(shù)據(jù)分布到不同的機(jī)器上。
哈希分布數(shù)據(jù)的缺點(diǎn)同樣明顯,突出表現(xiàn)為可擴(kuò)展性不高,一旦集群規(guī)模需要擴(kuò)展,則幾乎所有的數(shù)據(jù)需要被遷移并重新分布。
哈希分布數(shù)據(jù)的另一個(gè)缺點(diǎn)是,一旦某數(shù)據(jù)特征值的數(shù)據(jù)嚴(yán)重不均,容易出現(xiàn)“數(shù)據(jù)傾斜”(dataskew)問(wèn)題。
2. 按數(shù)據(jù)范圍方式
按數(shù)據(jù)范圍分布是另一個(gè)常見(jiàn)的數(shù)據(jù)分布式,將數(shù)據(jù)按特征值的值域范圍劃分為不同的區(qū)間,使得集群中每臺(tái)(組)服務(wù)器處理不同區(qū)間的數(shù)據(jù)。
工程中,為了數(shù)據(jù)遷移等負(fù)載均衡操作的方便,往往利用動(dòng)態(tài)劃分區(qū)間的技術(shù),使得每個(gè)區(qū)間中服務(wù)的數(shù)據(jù)量盡量的一樣多。當(dāng)某個(gè)區(qū)間的數(shù)據(jù)量較大時(shí),通過(guò)將區(qū)間“分裂”的方式拆分為兩個(gè)區(qū)間,使得每個(gè)數(shù)據(jù)區(qū)間中的數(shù)據(jù)量都盡量維持在一個(gè)較為固定的閾值之下。
使用范圍分布數(shù)據(jù)的方式的最大優(yōu)點(diǎn)就是可以靈活的根據(jù)數(shù)據(jù)量的具體情況拆分原有數(shù)據(jù)區(qū)間,拆分后的數(shù)據(jù)區(qū)間可以遷移到其他機(jī)器,一旦需要集群完成負(fù)載均衡時(shí),與哈希方式相比非常靈活。另外,當(dāng)集群需要擴(kuò)容時(shí),可以隨意添加機(jī)器,而不限為倍增的方式,只需將原機(jī)器上的部分?jǐn)?shù)據(jù)分區(qū)遷移到新加入的機(jī)器上就可以完成集群擴(kuò)容。
按范圍分布數(shù)據(jù)方式的缺點(diǎn)是需要維護(hù)較為復(fù)雜的元信息。隨著集群規(guī)模的增長(zhǎng),元數(shù)據(jù)服務(wù)器較為容易成為瓶頸,從而需要較為負(fù)責(zé)的多元數(shù)據(jù)服務(wù)器機(jī)制解決這個(gè)問(wèn)題。(一般的,往往需要使用專門的服務(wù)器在內(nèi)存中維護(hù)數(shù)據(jù)分布信息,稱這種數(shù)據(jù)的分布信息為一種元信息。)
3. 按數(shù)據(jù)量方式
另一類常用的數(shù)據(jù)分布方式則是按照數(shù)據(jù)量分布數(shù)據(jù)。與哈希方式和按數(shù)據(jù)范圍方式不同,數(shù)據(jù)量分布數(shù)據(jù)與具體的數(shù)據(jù)特征無(wú)關(guān),而是將數(shù)據(jù)視為一個(gè)順序增長(zhǎng)的文件,并將這個(gè)文件按照某一較為固定的大小劃分為若干數(shù)據(jù)塊(chunk),不同的數(shù)據(jù)塊分布到不同的服務(wù)器上。
由于與具體的數(shù)據(jù)內(nèi)容無(wú)關(guān),按數(shù)據(jù)量分布數(shù)據(jù)的方式一般沒(méi)有數(shù)據(jù)傾斜的問(wèn)題,數(shù)據(jù)總是被均勻切分并分布到集群中。當(dāng)集群需要重新負(fù)載均衡時(shí),只需通過(guò)遷移數(shù)據(jù)塊即可完成。集群擴(kuò)容也沒(méi)有太大的限制,只需將部分?jǐn)?shù)據(jù)庫(kù)遷移到新加入的機(jī)器上即可以完成擴(kuò)容。
按數(shù)據(jù)量劃分?jǐn)?shù)據(jù)的缺點(diǎn)是需要管理較為復(fù)雜的元信息,與按范圍分布數(shù)據(jù)的方式類似,當(dāng)集群規(guī)模較大時(shí),元信息的數(shù)據(jù)量也變得很大,高效的管理元信息成為新的課題。
4. 一致性哈希
一致性哈希(consistent hashing)是另一個(gè)種在工程中使用較為廣泛的數(shù)據(jù)分布方式。一致性哈希最初在 P2P 網(wǎng)絡(luò)中作為分布式哈希表(DHT)的常用數(shù)據(jù)分布算法。一致性哈希的基本方式是使用一個(gè)哈希函數(shù)計(jì)算數(shù)據(jù)或數(shù)據(jù)特征的哈希值,令該哈希函數(shù)的輸出值域?yàn)橐粋€(gè)封閉的環(huán),即哈希函數(shù)輸出的最大值是最小值的前序。將節(jié)點(diǎn)隨機(jī)分布到這個(gè)環(huán)上,每個(gè)節(jié)點(diǎn)負(fù)責(zé)處理從自己開(kāi)始順時(shí)針至下一個(gè)節(jié)點(diǎn)的全部哈希值域上的數(shù)據(jù)。
哈希分布數(shù)據(jù)的方式在集群擴(kuò)容時(shí)非常復(fù)雜,往往需要倍增節(jié)點(diǎn)個(gè)數(shù),與此相比,一致性哈希的優(yōu)點(diǎn)在于可以任意動(dòng)態(tài)添加、刪除節(jié)點(diǎn),每次添加、刪除一個(gè)節(jié)點(diǎn)僅影響一致性哈希環(huán)上相鄰的節(jié)點(diǎn)。
上述最基本的一致性哈希算法有很明顯的缺點(diǎn),隨機(jī)分布節(jié)點(diǎn)的方式使得很難均勻的分布哈希值域,尤其在動(dòng)態(tài)增加節(jié)點(diǎn)后,即使原先的分布均勻也很難保證繼續(xù)均勻,由此帶來(lái)的另一個(gè)較為嚴(yán)重的缺點(diǎn)是,當(dāng)一個(gè)節(jié)點(diǎn)異常時(shí),該節(jié)點(diǎn)的壓力全部轉(zhuǎn)移到相鄰的一個(gè)節(jié)點(diǎn),當(dāng)加入一個(gè)新節(jié)點(diǎn)時(shí)只能為一個(gè)相鄰節(jié)點(diǎn)分?jǐn)倝毫Α?/p>
為此一種常見(jiàn)的改進(jìn)算法是引入虛節(jié)點(diǎn)(virtual node)的概念,系統(tǒng)初始時(shí)就創(chuàng)建許多虛節(jié)點(diǎn),虛節(jié)點(diǎn)的個(gè)數(shù)一般遠(yuǎn)大于未來(lái)集群中機(jī)器的個(gè)數(shù),將虛節(jié)點(diǎn)均勻分布到一致性哈希值域環(huán)上,其功能與基本一致性哈希算法中的節(jié)點(diǎn)相同。為每個(gè)節(jié)點(diǎn)分配若干虛節(jié)點(diǎn)。操作數(shù)據(jù)時(shí),首先通過(guò)數(shù)據(jù)的哈希值在環(huán)上找到對(duì)應(yīng)的虛節(jié)點(diǎn),進(jìn)而查找元數(shù)據(jù)找到對(duì)應(yīng)的真實(shí)節(jié)點(diǎn)。使用虛節(jié)點(diǎn)改進(jìn)有多個(gè)優(yōu)點(diǎn)。首先,一旦某個(gè)節(jié)點(diǎn)不可用,該節(jié)點(diǎn)將使得多個(gè)虛節(jié)點(diǎn)不可用,從而使得多個(gè)相鄰的真實(shí)節(jié)點(diǎn)負(fù)載失效節(jié)點(diǎn)的壓里。同理,一旦加入一個(gè)新節(jié)點(diǎn),可以分配多個(gè)虛節(jié)點(diǎn),從而使得新節(jié)點(diǎn)可以負(fù)載多個(gè)原有節(jié)點(diǎn)的壓力,從全局看,較容易實(shí)現(xiàn)擴(kuò)容時(shí)的負(fù)載均衡。
5. 副本與數(shù)據(jù)分布
分布式系統(tǒng)容錯(cuò)、提高可用性的基本手段就是使用副本。對(duì)于數(shù)據(jù)副本的分布方式主要影響系統(tǒng)的可擴(kuò)展性。
一種基本的數(shù)據(jù)副本策略是以機(jī)器為單位,若干機(jī)器互為副本,副本機(jī)器之間的數(shù)據(jù)完全相同。這種策略適用于上述各種數(shù)據(jù)分布方式。其優(yōu)點(diǎn)是非常簡(jiǎn)單,其缺點(diǎn)是恢復(fù)數(shù)據(jù)的效率不高、可擴(kuò)展性也不高、不利于系統(tǒng)容錯(cuò)。
更合適的做法不是以機(jī)器作為副本單位,而是將數(shù)據(jù)拆為較合理的數(shù)據(jù)段,以數(shù)據(jù)段為單位作為副本。一旦將數(shù)據(jù)分為數(shù)據(jù)段,則可以以數(shù)據(jù)段為單位管理副本,從而副本與機(jī)器不再硬相關(guān),每臺(tái)機(jī)器都可以負(fù)責(zé)一定數(shù)據(jù)段的副本。
工程中,完全按照數(shù)據(jù)段建立副本會(huì)引起需要管理的元數(shù)據(jù)的開(kāi)銷增大,副本維護(hù)的難度也相應(yīng)增大。一種折中的做法是將某些數(shù)據(jù)段組成一個(gè)數(shù)據(jù)段分組,按數(shù)據(jù)段分組為粒度進(jìn)行副本管理。這樣做可以將副本粒度控制在一個(gè)較為合適的范圍內(nèi)。
6. 本地化計(jì)算
在分布式系統(tǒng)中計(jì)算節(jié)點(diǎn)和保存計(jì)算數(shù)據(jù)的存儲(chǔ)節(jié)點(diǎn)可以在同一臺(tái)物理機(jī)器上,也可以位于不同的物理機(jī)器。如果計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)位于不同的物理機(jī)器則計(jì)算的數(shù)據(jù)需要通過(guò)網(wǎng)絡(luò)傳輸,此種方式的開(kāi)銷很大,甚至網(wǎng)絡(luò)帶寬會(huì)成為系統(tǒng)的總體瓶頸。另一種思路是,將計(jì)算盡量調(diào)度到與存儲(chǔ)節(jié)點(diǎn)在同一臺(tái)物理機(jī)器上的計(jì)算節(jié)點(diǎn)上進(jìn)行,這稱之為本地化計(jì)算。本地化計(jì)算是計(jì)算調(diào)度的一種重要優(yōu)化,其體現(xiàn)了一種重要的分布式調(diào)度思想:“移動(dòng)數(shù)據(jù)不如移動(dòng)計(jì)算”。
7. 數(shù)據(jù)分布方式的選擇
在實(shí)際工程實(shí)踐中,可以根據(jù)需求及實(shí)施復(fù)雜度合理選擇數(shù)據(jù)分布方式。另外,上述數(shù)據(jù)分布方式是如果可以靈活組合使用,往往可以兼?zhèn)涓鞣N方式的優(yōu)點(diǎn),收到較好的綜合效果。
參考:《分布式系統(tǒng)原理介紹》 - 劉杰
總結(jié)
以上是生活随笔為你收集整理的分布式系统原理 之1 数据分布方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据结构 - 红黑树
- 下一篇: 分布式系统原理 之2 基本副本协议