馮向科 鄧瑩
摘要:針對(duì)云存儲(chǔ)平臺(tái)單一控制節(jié)點(diǎn)帶來(lái)的難以處理大并發(fā)訪(fǎng)問(wèn)問(wèn)題和頻繁更新存儲(chǔ)內(nèi)容帶來(lái)的存取效率低下問(wèn)題,分析了分布式文件系統(tǒng)和塊存儲(chǔ)各自的優(yōu)缺點(diǎn),提出了“虛擬節(jié)點(diǎn)à物理節(jié)點(diǎn)à區(qū)域”的集群存儲(chǔ)映射關(guān)系,多個(gè)虛擬節(jié)點(diǎn)映射一個(gè)物理節(jié)點(diǎn),減少寫(xiě)入對(duì)象時(shí)塊數(shù)據(jù)在物理節(jié)點(diǎn)間的頻繁大幅遷移,建立了雙控制節(jié)點(diǎn)的雙控云存儲(chǔ)集群平臺(tái),將待存儲(chǔ)對(duì)象切割并按集群存儲(chǔ)映射關(guān)系分批分塊存儲(chǔ),按重復(fù)數(shù)進(jìn)行塊的復(fù)制存儲(chǔ)。針對(duì)自然語(yǔ)言和程序設(shè)計(jì)語(yǔ)言描述云存儲(chǔ)平臺(tái)面臨的歧義性和抽象程度不夠的問(wèn)題,提出了采用Z語(yǔ)言描述云存儲(chǔ)平臺(tái),從組件定義、關(guān)系定義和模式描述等方面規(guī)范描述云存儲(chǔ)平臺(tái)的整體架構(gòu)和核心操作,使用UML時(shí)序圖分步驟描述了雙控云存儲(chǔ)集群平臺(tái)如何協(xié)作完成讀寫(xiě)對(duì)象的核心操作。
關(guān)鍵詞:云存儲(chǔ);云存儲(chǔ)體系結(jié)構(gòu);雙控;形式化建模
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)28-0241-03
1 背景
云存儲(chǔ)是在云計(jì)算基礎(chǔ)上拓展而來(lái)的新概念,是新的網(wǎng)絡(luò)存儲(chǔ)技術(shù),是指通過(guò)集群、分布式文件系統(tǒng)等功能,將網(wǎng)絡(luò)中大量的存儲(chǔ)設(shè)備通過(guò)應(yīng)用軟件集合起來(lái)協(xié)同工作,對(duì)外提供數(shù)據(jù)存儲(chǔ)服務(wù)的平臺(tái),所以云存儲(chǔ)是一個(gè)以數(shù)據(jù)存儲(chǔ)和管理為核心的云計(jì)算系統(tǒng)。
隨著云存儲(chǔ)技術(shù)的不斷發(fā)展,很多IT界巨頭紛紛推出基于云存儲(chǔ)的不同服務(wù),例如Google公司的個(gè)人存儲(chǔ)空間提供Google Docs網(wǎng)頁(yè),可以進(jìn)行文檔編輯和修改,還能實(shí)現(xiàn)文檔的共享、傳送和版權(quán)管理。Apple公司推出了iCloud云服務(wù),它是一個(gè)整合型云服務(wù)產(chǎn)品,包含了云計(jì)算、云搜索、云存儲(chǔ)等多種功能。國(guó)內(nèi)的網(wǎng)盤(pán)服務(wù)發(fā)展蓬勃,百度網(wǎng)盤(pán)、金山快盤(pán)、華為Dbank網(wǎng)盤(pán)等企業(yè)的網(wǎng)盤(pán)業(yè)務(wù)獲得大幅擴(kuò)張。
無(wú)論是哪種云存儲(chǔ)平臺(tái),目前均沒(méi)有開(kāi)源,存在一定的使用風(fēng)險(xiǎn)。主流的OpenStack平臺(tái)的Swift對(duì)象存儲(chǔ)和Cinder塊存儲(chǔ)均有一個(gè)共同的問(wèn)題:頻繁的寫(xiě)入操作會(huì)導(dǎo)致平臺(tái)處理效率顯著降低。Google公司的Hadoop分布式文件系統(tǒng)(HDFS)存在主控節(jié)點(diǎn)單一,應(yīng)對(duì)大并發(fā)訪(fǎng)問(wèn)能力不足的問(wèn)題。借鑒Swift的“對(duì)象à塊”存儲(chǔ)技術(shù)和HDFS的“虛擬節(jié)點(diǎn)à物理節(jié)點(diǎn)à區(qū)域”設(shè)置,提出雙控制節(jié)點(diǎn)的概念,解決大并發(fā)訪(fǎng)問(wèn)問(wèn)題。使用形式規(guī)格說(shuō)明語(yǔ)言──Z語(yǔ)言從組件定義、關(guān)系定義和模式描述等多個(gè)方面描述云存儲(chǔ)平臺(tái)的組件和核心操作,應(yīng)用數(shù)學(xué)方法對(duì)云存儲(chǔ)平臺(tái)進(jìn)行分析和建模。
2 云存儲(chǔ)系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)
云存儲(chǔ)系統(tǒng)基于云計(jì)算平臺(tái)部署,使用集群系統(tǒng)來(lái)分布式存儲(chǔ)非結(jié)構(gòu)化的二進(jìn)制對(duì)象,它是云計(jì)算平臺(tái)的一種拓展,具有分布式部署、并行處理、虛擬化、網(wǎng)絡(luò)存儲(chǔ)和負(fù)載均衡等特點(diǎn)。雙控云存儲(chǔ)集群平臺(tái)由兩個(gè)控制節(jié)點(diǎn)控制云存儲(chǔ)系統(tǒng),讀寫(xiě)對(duì)象時(shí),經(jīng)過(guò)計(jì)算結(jié)點(diǎn)(Compute Node)處理后,經(jīng)由控制節(jié)點(diǎn)(Control Node)查詢(xún)對(duì)象的元數(shù)據(jù)(NoSQL),提交代理節(jié)點(diǎn)(Proxy Node)轉(zhuǎn)發(fā),代理節(jié)點(diǎn)獲得對(duì)象數(shù)據(jù)或?qū)?duì)象數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)節(jié)點(diǎn)(Data Node),云存儲(chǔ)平臺(tái)的體系結(jié)構(gòu)如圖1所示。
為了應(yīng)對(duì)云存儲(chǔ)平臺(tái)中頻繁的寫(xiě)入對(duì)象操作導(dǎo)致的數(shù)據(jù)節(jié)點(diǎn)頻繁更新問(wèn)題,形成“代理節(jié)點(diǎn)à虛擬節(jié)點(diǎn)(Partition)à物理節(jié)點(diǎn)(Device)à區(qū)域(Zone)”的映射關(guān)系。寫(xiě)入對(duì)象時(shí),并不是直接將對(duì)象寫(xiě)入物理節(jié)點(diǎn),而是先對(duì)對(duì)象進(jìn)行哈希計(jì)算,獲得虛擬節(jié)點(diǎn)的索引,由該虛擬節(jié)點(diǎn)獲得最近的物理節(jié)點(diǎn)位置,然后將對(duì)象寫(xiě)入該物理節(jié)點(diǎn)所在區(qū)域;同時(shí),寫(xiě)入對(duì)象時(shí)會(huì)根據(jù)重復(fù)數(shù)將一個(gè)對(duì)象的塊寫(xiě)入多個(gè)位置,即進(jìn)行復(fù)制(Replicate)操作。
3 云存儲(chǔ)平臺(tái)核心操作描述
對(duì)于云存儲(chǔ)平臺(tái)來(lái)說(shuō),最基本、最頻繁的兩類(lèi)操作分別是讀取對(duì)象和寫(xiě)入對(duì)象。據(jù)統(tǒng)計(jì),讀寫(xiě)對(duì)象操作數(shù)占云存儲(chǔ)平臺(tái)操作數(shù)的96%以上。
讀取對(duì)象操作通常由客戶(hù)端Client發(fā)起,涉及的云存儲(chǔ)平臺(tái)組件包括ComputeNode、NoSQL DBMS、ProxyNode、Partition、Device和Zone,這些組件的定義詳見(jiàn)“4.1 組件定義”。從云存儲(chǔ)平臺(tái)讀取一個(gè)對(duì)象的流程如圖2所示的時(shí)序圖所示,具體的過(guò)程如下:
①Client向ControlNode提交uri格式的讀取對(duì)象的請(qǐng)求,請(qǐng)求獲得一個(gè)對(duì)象,如圖2中的第1個(gè)傳遞;
②ControlNode向NoSQL DBMS申請(qǐng)查詢(xún)?cè)搶?duì)象的第一批塊的位置,如圖2的第2、3個(gè)傳遞;
③ControlNode向ProxyNode申請(qǐng)查詢(xún)對(duì)象的存儲(chǔ)位置,如圖2的第4個(gè)傳遞;
④ProxyNode根據(jù)非結(jié)構(gòu)化的NoSQL格式的元數(shù)據(jù)獲得Partition的位置,如圖2的第5、6個(gè)傳遞;
⑤ProxyNode根據(jù)R1(詳見(jiàn)“4.2 關(guān)系定義”)映射關(guān)系獲得Device的位置,如圖2的第7、8個(gè)傳遞;
⑥ProxyNode根據(jù)R2映射關(guān)系獲得Zone的位置,如圖2的第9、10、11個(gè)傳遞;
⑦ControlNode根據(jù)對(duì)象的[Partition, Device, Zone]關(guān)系,根據(jù)重復(fù)數(shù),分批、分塊就近讀取對(duì)象內(nèi)容,返回給Client,如圖2的第12、13、14個(gè)傳遞。
寫(xiě)入對(duì)象操作由客戶(hù)端Client提交請(qǐng)求,需要先將對(duì)象切割成塊,再將其存儲(chǔ)到區(qū)域,同時(shí)存儲(chǔ)對(duì)象和塊的元數(shù)據(jù)。寫(xiě)入對(duì)象到云存儲(chǔ)平臺(tái)的流程如圖3所示的時(shí)序圖所示,具體的過(guò)程如下:
1)Client向ControlNode提交寫(xiě)入對(duì)象的請(qǐng)求,如圖3中的第1個(gè)傳遞;
2)ControlNode向NoSQL DBMS查詢(xún)是否存在與寫(xiě)入對(duì)象相關(guān)聯(lián)的文件,如圖3中的第2、3個(gè)傳遞;
3)如果存在關(guān)聯(lián)文件,則中止寫(xiě)入操作,否則向ComputeNode提交切割對(duì)象成塊的請(qǐng)求,ComputeNode將對(duì)象切割成大小相等的塊(最后一塊除外),如圖3中的第4、5個(gè)傳遞;
4)ComputeNode向ProxyNode申請(qǐng)搜索塊的合適存儲(chǔ)區(qū)域,如圖3中的第6個(gè)傳遞;
5)ProxyNode根據(jù)非結(jié)構(gòu)化的NoSQL格式的元數(shù)據(jù)搜索可用Partition位置,如圖3的第7、8個(gè)傳遞;
6)ProxyNode根據(jù)R1映射關(guān)系由Partition位置獲得Device的位置,如圖3的第9、10個(gè)傳遞;
7)ProxyNode根據(jù)R2映射關(guān)系由Device位置獲得Zone的位置,如圖3的第11、12、13個(gè)傳遞;
8)ControlNode按重復(fù)數(shù)分批將塊寫(xiě)入到多個(gè)區(qū)域,如圖3的第14個(gè)傳遞;
9)ControlNode將對(duì)象的元數(shù)據(jù)和塊的元數(shù)據(jù)依次寫(xiě)入NoSQL DBMS中。
4 云存儲(chǔ)平臺(tái)形式化建模
云存儲(chǔ)平臺(tái)的形式化建模包括組件定義、關(guān)系定義和模式描述,其中模式只包含核心操作模式,組件和關(guān)系只包括與核心操作模式相關(guān)的部分。
4.1 組件定義
1)ControlNode:雙控集群系統(tǒng)的核心節(jié)點(diǎn),數(shù)量為2,一方面為ComputeNode提供基本的網(wǎng)絡(luò)服務(wù),如DNS、NFS、DHCP等,另一方面為ComputeNode上的作業(yè)提供調(diào)度服務(wù),還包括監(jiān)控集群中各個(gè)節(jié)點(diǎn)和網(wǎng)絡(luò)運(yùn)行狀況。ControlNode和ProxyNode之間存在n:m的映射關(guān)系。
2)ComputeNode:雙控集群系統(tǒng)的計(jì)算核心,數(shù)量為1..*,承擔(dān)整個(gè)系統(tǒng)的計(jì)算任務(wù)。
3)ProxyNode:接收來(lái)自ControlNode的請(qǐng)求,將其轉(zhuǎn)發(fā)到不同的DataNode,獲得對(duì)象或?qū)?duì)象存儲(chǔ)到DataNode。ProxyNode和DataNode之間存在1:n的映射關(guān)系。
4)DataNode:集群系統(tǒng)的數(shù)據(jù)存儲(chǔ)器和數(shù)據(jù)服務(wù)器,是Device的邏輯集合,數(shù)量為2..*。
5)Device:實(shí)際存儲(chǔ)對(duì)象的磁盤(pán)系統(tǒng),1個(gè)DataNode擁有的Device的數(shù)量為1..*。
6)Partition:Device的復(fù)制品,用于減少頻繁操作對(duì)象所帶來(lái)的Device頻繁更新。Partition與Device之間存在n:1的映射關(guān)系。
7)Zone:Device的物理隔離區(qū)域,用以保障Device的安全。Zone和Device之間存在1:n的映射關(guān)系。
4.2 關(guān)系定義
1)Partition和Device之間存在n:1的映射關(guān)系“[part, dev]”,記為R1:
R1=={dev: P1 devices | ?part: partitions·part?dev∧#(dev)=1∧#(part)≥1}
2)Device與Zone之間存在n:1的映射關(guān)系“[dev, zon]”,記為R2:
R2=={zon: P1 zones | ?dev: devices·dev?zon∧#(zon)=1∧#(dev)≥1}
3)ControlNode和ProxyNode之間存在n:m的關(guān)系“[ProxyNode,ControlNode]”,記為R3:
R3=={ctrl:P1 Servers | (?prx: P1 Servers·#(prx)≥1∧#(ctrl)≥1∧#(ctrl)≤2)∧prx?ctrl}
4)ProxyNode和DataNode之間存在1:n的關(guān)系“[DataNode,ProxyNode]”,記為R4:
R4=={prx:P1 Servers | (?dat: P1 Servers·#(dat)≥1∧#(prx)≥1)∧dat?prx}
4.3 模式描述
采用形式規(guī)格說(shuō)明語(yǔ)言Z描述云存儲(chǔ)平臺(tái)的讀取對(duì)象和寫(xiě)入對(duì)象的核心操作,垂直形式的模式更能清晰地描述核心操作。
1)讀取對(duì)象操作的模式描述
從云存儲(chǔ)平臺(tái)讀取對(duì)象的操作的模式ReadObject的描述如圖4所示。ReadObject模式的輸入值是元數(shù)據(jù)meta,輸出值是塊b!和對(duì)象obj!。讀取對(duì)象操作不會(huì)導(dǎo)致Partition、Device和Zone發(fā)生改變。元數(shù)據(jù)信息包括對(duì)象的元數(shù)據(jù)和塊的元數(shù)據(jù),它們均存儲(chǔ)在由ControlNode所訪(fǎng)問(wèn)的元數(shù)據(jù)數(shù)據(jù)庫(kù)中,為非結(jié)構(gòu)化的NoSQL數(shù)據(jù)。
2)寫(xiě)入對(duì)象操作的模式描述
將對(duì)象寫(xiě)入到云存儲(chǔ)平臺(tái)的操作的模式WriteObject的描述如圖5所示。WriteObject模式的輸入值是對(duì)象,輸出值是塊b!和元數(shù)據(jù)meta!。寫(xiě)入對(duì)象到云存儲(chǔ)平臺(tái)會(huì)導(dǎo)致Partition、Device和Zone均發(fā)生改變。
5 結(jié)束語(yǔ)
改進(jìn)后的雙控云存儲(chǔ)集群平臺(tái)既能克服單一控制節(jié)點(diǎn)導(dǎo)致的面對(duì)大并發(fā)訪(fǎng)問(wèn)難以處理的問(wèn)題,也能解決頻繁更新存儲(chǔ)內(nèi)容所帶來(lái)的存取效率低下問(wèn)題,按照“虛擬節(jié)點(diǎn)à物理節(jié)點(diǎn)à區(qū)域”的映射關(guān)系將經(jīng)過(guò)哈希計(jì)算后的對(duì)象分塊分批存儲(chǔ)到區(qū)域。改變通常使用自然語(yǔ)言或程序設(shè)計(jì)語(yǔ)言從靜態(tài)視圖和動(dòng)態(tài)視圖兩方面描述云存儲(chǔ)平臺(tái),卻面臨著歧義性、抽象程度不夠等問(wèn)題,提出并實(shí)踐使用Z語(yǔ)言這種形式規(guī)格說(shuō)明語(yǔ)言來(lái)描述云存儲(chǔ)平臺(tái)及其核心操作,這種方式更容易驗(yàn)證,有利于減少后期出現(xiàn)的錯(cuò)誤。
參考文獻(xiàn):
[1] 李朋遠(yuǎn), 張志勇. 基于SWIFT的海量數(shù)據(jù)存儲(chǔ)平臺(tái)設(shè)計(jì)[J]. 計(jì)算機(jī)科學(xué), 2018, 45(S1): 601-605.
[2] 楊岳湘, 鄧文平, 鄧勁生, 等. 基于云存儲(chǔ)的網(wǎng)盤(pán)系統(tǒng)架構(gòu)及關(guān)鍵技術(shù)研究[J]. 電信科學(xué), 2012, 28(10): 68-72.
[3] 繆淮扣, 陳怡海. 軟件形式規(guī)格說(shuō)明語(yǔ)言——Z[M]. 北京: 清華大學(xué)出版社, 2012(11).
[4] 胡啟敏, 薛錦云, 游珍, 等. PAR平臺(tái)中若干軟件構(gòu)件形式化驗(yàn)證技術(shù)研究[J]. 計(jì)算機(jī)工程與科學(xué), 2018, 40(2): 268-274.
[5] 陳偉. 基于HDFS的高校教育資源云存儲(chǔ)平臺(tái)研究與實(shí)現(xiàn)[J]. 重慶科技學(xué)院學(xué)報(bào): 自然科學(xué)版, 2018, 20(1): 107-111.
【通聯(lián)編輯:謝媛媛】