新聞資訊 NEWS CENTER
分布式存儲(chǔ)的簡(jiǎn)介
其實(shí),傳統(tǒng)企業(yè)集中式存儲(chǔ)設(shè)備就如同上文中的大胃王。當(dāng)有大量數(shù)據(jù)需要存儲(chǔ)時(shí),所有數(shù)據(jù)均可通過存儲(chǔ)設(shè)備的控制器完成計(jì)算,再通過內(nèi)部總線傳輸?shù)接脖P框中的硬盤上集中存儲(chǔ)起來,最終數(shù)據(jù)全部集中存儲(chǔ)在單套設(shè)備上。并且,傳統(tǒng)企業(yè)的集中式存儲(chǔ)設(shè)備,存儲(chǔ)數(shù)據(jù)的效率一般來說比普通服務(wù)器本地存儲(chǔ)效率更高。
所以過去很多年,企業(yè)集中式存儲(chǔ)(如圖一)成為了各企業(yè)數(shù)據(jù)存放的核心設(shè)備之一。
(圖一 集中式存儲(chǔ)結(jié)構(gòu)圖)
(圖二 數(shù)據(jù)分片圖)
所以在當(dāng)前云時(shí)代背景下,分布式存儲(chǔ)也在云場(chǎng)景中不斷崛起,廣泛用于云場(chǎng)景中。
就如同上題中所提到的,其實(shí)普通人吃饅頭的速度肯定不如大胃王快。但是,由于饅頭總數(shù)有100個(gè)之多,大胃王一個(gè)接一個(gè)地吃掉這些饅頭用的時(shí)間,理論來說肯定比把饅頭分給100個(gè)普通人同時(shí)吃,每個(gè)人吃一個(gè)饅頭用的時(shí)間長(zhǎng)。我們把這種吃饅頭的模式稱為分布式吃饅頭,同理我們也把這種由多個(gè)普通計(jì)算服務(wù)器,通過某種系統(tǒng)串聯(lián)構(gòu)建起對(duì)外提供數(shù)據(jù)分布存儲(chǔ)的方式,稱為分布式存儲(chǔ)。而大胃王的模式存儲(chǔ)數(shù)據(jù)呢?就是傳統(tǒng)的企業(yè)集中式存儲(chǔ)了。
2
分布式存儲(chǔ)的構(gòu)成
分布式存儲(chǔ)是相對(duì)于集中式存儲(chǔ)的另一種存儲(chǔ)架構(gòu),也可以說是另一種存儲(chǔ)系統(tǒng)。行業(yè)中有非常多的分布式存儲(chǔ)系統(tǒng),例如華為FusionStorage分布式存儲(chǔ)套件,該分布式存儲(chǔ)系統(tǒng)是業(yè)界領(lǐng)先的分布式存儲(chǔ)解決方案之一,廣泛應(yīng)用于傳統(tǒng)醫(yī)療、金融、教育、制造等行業(yè),同時(shí)也用于華為HCS云解決方案中。本文以華為FusionStorage為例進(jìn)行分析(各分布式存儲(chǔ)產(chǎn)品原理都十分相似,即采用哈希路由方式對(duì)數(shù)據(jù)進(jìn)行分片分發(fā))。
一般來說分布式存儲(chǔ)的存儲(chǔ)系統(tǒng)分為三大板塊:
元數(shù)據(jù)管理模塊:對(duì)數(shù)據(jù)存儲(chǔ)過程中需要用到的數(shù)據(jù)分布式規(guī)則、數(shù)據(jù)重建規(guī)則、數(shù)據(jù)讀寫規(guī)則的創(chuàng)造者和維護(hù)者,同時(shí)也是整個(gè)系統(tǒng)健康管理的監(jiān)控者。
數(shù)據(jù)計(jì)算分發(fā)模塊:一般以代理的方式安裝在用戶側(cè),在系統(tǒng)內(nèi)存?zhèn)冉邮招枰鎯?chǔ)的數(shù)據(jù),通過相應(yīng)規(guī)則對(duì)數(shù)據(jù)切塊分片,再根據(jù)元數(shù)據(jù)管理模塊生產(chǎn)的數(shù)據(jù)分布式規(guī)則,結(jié)合哈希計(jì)算,將數(shù)據(jù)分發(fā)至各分布式存儲(chǔ)的節(jié)點(diǎn)內(nèi)的底層存儲(chǔ)介質(zhì)管理模塊。
底層存儲(chǔ)介質(zhì)管理模塊:一般用于管理底層存儲(chǔ)介質(zhì)(如磁盤等),也用于接收上層數(shù)據(jù)計(jì)算分發(fā)模塊下發(fā)的數(shù)據(jù)分片,并將其存儲(chǔ)于所管理的存儲(chǔ)介質(zhì)中。
那么華為FusionStorage也采用以上架構(gòu)模塊模式(如下圖三)。元數(shù)據(jù)管理模塊為MDC,數(shù)據(jù)計(jì)算分發(fā)模塊VBS,底層存儲(chǔ)介質(zhì)管理模塊OSD。
(圖三 FusionStorage 組件圖)
3
數(shù)據(jù)分布式存儲(chǔ)規(guī)則
華為的FusionStorage系統(tǒng)在創(chuàng)建分布式存儲(chǔ)的存儲(chǔ)池時(shí),系統(tǒng)會(huì)針對(duì)加入該存儲(chǔ)池的各個(gè)存儲(chǔ)服務(wù)器中的存儲(chǔ)介質(zhì)安裝OSD模塊。一般來說每一塊存儲(chǔ)介質(zhì)或者說磁盤都會(huì)對(duì)應(yīng)一個(gè)OSD模塊,該OSD模塊負(fù)責(zé)該磁盤的狀態(tài)檢測(cè),接收VBS下發(fā)的數(shù)據(jù),并存儲(chǔ)于該磁盤中。通常存儲(chǔ)池會(huì)生成對(duì)應(yīng)的MDC模塊(一個(gè)MDC最多管理兩個(gè)存儲(chǔ)池),首先將存儲(chǔ)池托管給該MDC,MDC會(huì)生成一個(gè)哈希路由圓環(huán),然后將圓環(huán)分為N(N=2^32)份分區(qū),根據(jù)存儲(chǔ)池內(nèi)OSD的數(shù)量,對(duì)N份分區(qū)進(jìn)行的均分,每一個(gè)OSD都可以分到對(duì)應(yīng)的分區(qū)(切記,均分)。
你可以這樣想象,哈希路由圓環(huán)就像一個(gè)很大的抽獎(jiǎng)轉(zhuǎn)盤(如下圖四),由MDC生成,然后我們把這個(gè)抽獎(jiǎng)轉(zhuǎn)盤分為很多個(gè)小份區(qū)域,每一小份就是上文說的分區(qū)。接著我們可以根據(jù)OSD的數(shù)量,將這些小份區(qū)域均分給OSD。假設(shè)現(xiàn)在N為36份,且有12個(gè)OSD,則一共36個(gè)分區(qū),12個(gè)OSD,將36個(gè)分區(qū)均分給12個(gè)OSD,每個(gè)OSD分到了3個(gè)分區(qū)。比如分區(qū)1-分區(qū)3為OSD1的所屬分區(qū),分區(qū)4-分區(qū)6為OSD2的所屬分區(qū),以此類推。
(圖四 哈希分區(qū)邏輯圖)
4
數(shù)據(jù)分布式存儲(chǔ)原理
現(xiàn)在我們把MDC對(duì)應(yīng)OSD數(shù)量生成的數(shù)據(jù)分布式規(guī)則交給VBS模塊。VBS是安裝在用戶系統(tǒng)中的一個(gè)代理,當(dāng)用戶需要存放數(shù)據(jù)在分布式存儲(chǔ)中時(shí),VBS會(huì)先接收用戶的數(shù)據(jù),然后對(duì)用戶數(shù)據(jù)進(jìn)行切塊分區(qū)(一般會(huì)把數(shù)據(jù)分成1MB大小的數(shù)據(jù)分片,例如一個(gè)1GB的視頻文件需要存放在分布式存儲(chǔ)中,則會(huì)被VBS接收后分割為1024個(gè)1MB大小的數(shù)據(jù)分片),接著對(duì)每個(gè)數(shù)據(jù)分片帶有的SCSI標(biāo)識(shí)進(jìn)行格式轉(zhuǎn)化,使之成為分布式存儲(chǔ)系統(tǒng)使用的Key標(biāo)識(shí)。然后對(duì)key進(jìn)行哈希計(jì)算,算出每個(gè)數(shù)據(jù)分片的哈希值。
可以這樣理解,其實(shí)每個(gè)數(shù)據(jù)在操作系統(tǒng)下發(fā)存儲(chǔ)的時(shí)候都會(huì)帶著一個(gè)介紹信(SCSI標(biāo)識(shí)),操作系統(tǒng)告訴數(shù)據(jù)拿著這個(gè)介紹信去找大V哥開房間存放數(shù)據(jù)。分布式存儲(chǔ)的VBS模塊就是這個(gè)大V哥,當(dāng)大V哥看到這個(gè)介紹信(SCSI標(biāo)識(shí))后就告訴數(shù)據(jù),你的這個(gè)介紹信(SCSI標(biāo)識(shí))現(xiàn)在用不了了,必須重新登記一下,然后VBS就根據(jù)介紹信(SCSI標(biāo)識(shí))又開了一張票(Key)給數(shù)據(jù),然后數(shù)據(jù)拿著這張票(Key)去找大V哥的小弟,小弟就根據(jù)票(key)來分配房卡(key帶入哈希函數(shù)進(jìn)行計(jì)算算出哈希值),開房間存放數(shù)據(jù)(如圖五)。
(圖五 數(shù)據(jù)分片邏輯圖)
數(shù)據(jù)被VBS接收后,最終數(shù)據(jù)會(huì)變成多個(gè)1MB的小數(shù)據(jù)分片,并且每一個(gè)1MB的小數(shù)據(jù)塊都會(huì)帶著最終的哈希值 。哈希值可以在0-2^32之間取整,很巧的是,MDC生成的哈希路由圓環(huán)也剛好是2^32份個(gè)分區(qū),那么哈希值取整是多少,該1MB數(shù)據(jù)分片就歸屬于哪一個(gè)分區(qū)。由于MDC通過對(duì)應(yīng)OSD和哈希路由圓環(huán)的分區(qū)生成了一個(gè)分區(qū)對(duì)應(yīng)磁盤的關(guān)系(數(shù)據(jù)分布式規(guī)則),那么最終這個(gè)數(shù)據(jù)就存放在該分區(qū)對(duì)應(yīng)的磁盤中,該磁盤的OSD會(huì)將數(shù)據(jù)持久化存放在磁盤介質(zhì)中。(如圖六)若上文假設(shè)中提到分區(qū)1-分區(qū)3對(duì)應(yīng)OSD1,剛好現(xiàn)在有一個(gè)數(shù)據(jù)分片對(duì)應(yīng)的哈希值取整后為3,則該1MB數(shù)據(jù)歸屬在分區(qū)3,分區(qū)3對(duì)應(yīng)OSD1,則由OSD1將該1MB數(shù)據(jù)存放到該OSD對(duì)應(yīng)的磁盤中,完成數(shù)據(jù)落盤。
(圖六 哈希全流程圖)
由于哈希路由圓環(huán)所生成的分區(qū)是均分對(duì)應(yīng)到OSD上的,所以當(dāng)大量數(shù)據(jù)存儲(chǔ)時(shí),由于概率,最終數(shù)據(jù)基本會(huì)均分到各個(gè)OSD對(duì)應(yīng)的磁盤中存放起來。所有磁盤是并發(fā)工作的,都可以接收數(shù)據(jù)就等同于所有磁盤對(duì)應(yīng)所在的服務(wù)器都是并發(fā)且相對(duì)均衡地接收數(shù)據(jù),最終完成數(shù)據(jù)的分布式存儲(chǔ)。
通過以上內(nèi)容,結(jié)合華為FusionStorage分布式存儲(chǔ)系統(tǒng)給大家分析了分布式存儲(chǔ)的存儲(chǔ)原理,最后請(qǐng)大家思考另一個(gè)問題:
如果只有一個(gè)饅頭或者極少的饅頭,你們覺得大胃王和一百個(gè)普通人誰吃完這些饅頭用的時(shí)間更短,效率更高呢?請(qǐng)結(jié)合思考分布式存儲(chǔ)和傳統(tǒng)集中式存儲(chǔ)的應(yīng)用場(chǎng)景區(qū)別分析。