圖1 云計算技術(shù)體系結(jié)構(gòu)
云計算技術(shù)體系結(jié)構(gòu)分為4層:物理資源層、資源池層、管理中間件層和SOA構(gòu)建層,如圖1所示。物理資源層包括計算機(jī)、存儲器、網(wǎng)絡(luò)設(shè)施、數(shù)據(jù)庫和軟件等:資源池層是將大量相同類型的資源構(gòu)成同構(gòu)或接近同構(gòu)的資源池,如計算資源池、數(shù)據(jù)資源池等。管理中間件負(fù)責(zé)對云計算的資源進(jìn)行管理。并對眾多應(yīng)用任務(wù)進(jìn)行調(diào)度,使資源能夠高效、安全地為應(yīng)用提供服務(wù):S0A構(gòu)建層將云計算能力封裝成標(biāo)準(zhǔn)的Web Services服務(wù),并納入到SOA體系進(jìn)行管理和使用。包括服務(wù)注冊、查找、訪問和構(gòu)建服務(wù)工作流等。管理中間件和資源池層是云計算技術(shù)的最關(guān)鍵部分,SOA構(gòu)建層的功能更多依靠外部設(shè)施提供。
云計算的管理中間件負(fù)責(zé)資源管理、任務(wù)管理、用戶管理和安全管理等工作 資源管理負(fù)責(zé)均衡地使用云資源節(jié)點。檢測節(jié)點的故障并試圖恢復(fù)或屏蔽之,并對資源的使用情況進(jìn)行監(jiān)視統(tǒng)計。對云計算的可靠性有至關(guān)重要的作用 下面結(jié)合HDFS介紹云存儲技術(shù)的可靠性。
2、HDFS體系結(jié)構(gòu)
Hadoop是Apache基金會的一個開源項目。參考Google的GFS(Google File System)和Map/Reduce計算模型研發(fā)出HDFS(Hadoop Distributed File System)和自己的Map/Reduce框架。Hadoop主要由Yahoo開發(fā) ,F(xiàn)acebook、Amazon和Last.fm公司也都在使用Hadoop。
圖2 HDFS體系結(jié)構(gòu)
如圖2所示。Hadoop檔案系統(tǒng)(Hadoop DistributedFile Systern.HDFS)被設(shè)計成適合運行在通用硬件上的分布式文件系統(tǒng)。其具有高容錯性。能提供高吞吐量的數(shù)據(jù)訪問。非常適合于大規(guī)模數(shù)據(jù)集上的應(yīng)用。
3、HDFS可靠性
為了保障HDFS的高可靠性。HDFS有如下5個特性。
(1)冷備機(jī)制
HDFS中Secondary NameNode對NameNode中元數(shù)據(jù)提供了冷備方案 Secondary NameNode將Na—meNode的fsimage與edit log從Namenode復(fù)制到臨時目錄,將fsitnage同edit log合并,并產(chǎn)生新的Fsimage并把產(chǎn)生的新的Isirnage上傳給NameNode ,最后清除NameNode中的edit log
(2)租約機(jī)制
NameNode在打開或創(chuàng)建一個文件,準(zhǔn)備追加寫之前,會與此客戶端簽訂一份租約??蛻舳藭〞r輪詢續(xù)簽租約。NameNode始終在輪詢檢查所有租約,查看是否有到期未續(xù)的租約。如果一切正常,該客戶端完成寫操作,會關(guān)閉文件,停止租約,一旦有所意外,比如文件被刪除了,客戶端宕機(jī)了,當(dāng)超過租約期限時,NameNode就會剝奪此租約,將這個文件的享用權(quán),分配給他人。如此,來避免由于客戶端停機(jī)帶來的資源被長期霸占的問題。
(3)數(shù)據(jù)的正確性與一致性
在HDFS中,為了保證數(shù)據(jù)的正確性和同一份數(shù)據(jù)的一致性,做了大量的工作。首先,每一個數(shù)據(jù)塊,都有一個版本標(biāo)識,一旦數(shù)據(jù)塊上的數(shù)據(jù)有所變化,此版本號將向前增加。在NameNode上,保存有此時每個數(shù)據(jù)塊的版本,一旦出現(xiàn)數(shù)據(jù)服務(wù)器上相關(guān)數(shù)據(jù)塊版本與其不一致,將會觸發(fā)相關(guān)的恢復(fù)流程。這樣的機(jī)制保證了各個數(shù)據(jù)服務(wù)器器上的數(shù)據(jù)塊,在基本大方向上都是一致的。但是,由于網(wǎng)絡(luò)的復(fù)雜性,簡單的版本信息無法保證具體內(nèi)容的一致性。因此,為了保證數(shù)據(jù)內(nèi)容上的一致,必須要依照內(nèi)容,給出簽名。
當(dāng)客戶端向數(shù)據(jù)服務(wù)器追加寫人數(shù)據(jù)包時,每一個數(shù)據(jù)包的數(shù)據(jù),都會切分成512字節(jié)大小的段,作為簽名驗證的基本單位,在HDFS中,把這個數(shù)據(jù)段稱為 Chunk,即傳輸塊。在每一個數(shù)據(jù)包中,都包含若干個傳輸塊以及每一個傳輸塊的簽名,一旦發(fā)現(xiàn)當(dāng)前的傳輸塊簽名與在客戶端中的簽名不一致,整個數(shù)據(jù)包的寫人被視為無效。
(4)系統(tǒng)升級回滾
當(dāng)升級某個集群的Hadoop的時候,正如任何軟件的升級一樣,可能會引人新的bug或者不兼容的修改導(dǎo)致現(xiàn)有的應(yīng)用出現(xiàn)過去沒有發(fā)現(xiàn)的問題。在所有重要的HDFS安裝應(yīng)用中,是不允許出現(xiàn)因丟失任何數(shù)據(jù)需要從零開始重啟HDFS的情況。HDFS允許管理員恢復(fù)到Hadoop的早期版本,并且將集群的狀態(tài)回滾到升級前。
圖3 系統(tǒng)升級回滾
如圖3所示,升級時,NameNode會將新的版本號,通過DataNode的登錄應(yīng)答返回。DataNode收到以后,會將當(dāng)前的數(shù)據(jù)塊文件目錄改名,從curren,改名為previous.tmp ,建立一個snapshot,然后重建current目錄。重建包括重建VERSION文件,重建對應(yīng)的子目錄,然后建立數(shù)據(jù)塊文件和數(shù)據(jù)塊元數(shù)據(jù)文件到 previous.tmp的硬連接。建立硬連接意味著在系統(tǒng)中只保留一份數(shù)據(jù)塊文件和數(shù)據(jù)塊元數(shù)據(jù)文件,current和previous.tmp中的相應(yīng)文件,在存儲中,只保留一份。當(dāng)所有的這些工作完成以后,會在current里寫人新的VER-SION文件,并將previous.tmp目錄改名為 previous,完成升級。
回滾相對簡單,因為所有的舊版本信息都保存在previou、目錄里?;貪L首先將current目錄改名為re-moved.tmp,然后將previous目錄改名為current,最后刪除removed.tmp目錄。
提交的過程,就是將上面的previous目錄改名為finalized.tmp,然后啟動一個線程,將該目錄刪除。
(5)安全模式
在啟動的時候,名字節(jié)點進(jìn)入一個特殊的狀態(tài)叫做安全模式。安全模式是不發(fā)生文件塊的復(fù)制的。NN接受來自DN的心跳和塊報告。一個塊報告包括的是DN向NN報告數(shù)據(jù)塊的列表。
4、總結(jié)
本文首先簡介了云計算技術(shù)系統(tǒng)結(jié)構(gòu),針對當(dāng)前主流的云存儲技術(shù)HDFS,詳細(xì)研究了HDFS的冷備機(jī)制、租約機(jī)制、數(shù)據(jù)的正確性與一致性、系統(tǒng)升級回滾、安全模式5個云存儲可靠性特性。在云存儲大規(guī)模應(yīng)用的今天,HDFS必將得到越來越多推廣和使用。