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