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