楊 靜 殷建琳
(1.江蘇省檔案局,江蘇南京,210008;2.南京新模式軟件集成有限公司,江蘇南京,210009)
隨著我國電子政務(wù)和信息化建設(shè)的不斷推進(jìn)及其在各個領(lǐng)域的廣泛應(yīng)用,產(chǎn)生了類型繁多、數(shù)量巨大、內(nèi)容豐富的電子文件。從中央到地方,從各級國家行政機(jī)關(guān)到各類企事業(yè)單位,甚至每一個個人,無不都在廣泛地使用電子文件。電子檔案的長期保存也不可逆轉(zhuǎn)地進(jìn)入了大數(shù)據(jù)時(shí)代。
由于傳統(tǒng)存儲設(shè)備容量帶寬有限、設(shè)備節(jié)點(diǎn)不易擴(kuò)展、不易使用、數(shù)據(jù)管理困難,不足以應(yīng)付日益增長的大數(shù)據(jù),而在云計(jì)算發(fā)展背景下應(yīng)運(yùn)而生的云存儲技術(shù)在一定的程度上解決了這個難題。云存儲技術(shù)是人類進(jìn)入大數(shù)據(jù)時(shí)代一種新型的存儲模式,可以通過網(wǎng)絡(luò)提供可配置的虛擬化存儲及相關(guān)數(shù)據(jù)訪問的服務(wù),為海量數(shù)據(jù)的存儲和管理提供解決方案。
狹義上來說,云存儲是一個以數(shù)據(jù)管理和存儲為核心的云計(jì)算平臺,依靠軟件將分布在不同位置不同種類的存儲介質(zhì)有效結(jié)合組成一個更大的存儲介質(zhì),對外界提供透明一致的存儲和業(yè)務(wù)訪問接口。
云存儲的內(nèi)涵主要是存儲虛擬化和存儲自動化,在虛擬存儲技術(shù)之上對存儲服務(wù)和設(shè)備進(jìn)行虛擬化,即把對物理存儲數(shù)據(jù)的訪問抽象成對邏輯數(shù)據(jù)的訪問。存儲虛擬化除了要實(shí)現(xiàn)異構(gòu)存儲介質(zhì)的互聯(lián)和統(tǒng)一管理,實(shí)現(xiàn)數(shù)據(jù)的共享、沖突解決、一致性及數(shù)據(jù)遷移,實(shí)現(xiàn)數(shù)據(jù)的透明存儲和容錯容災(zāi)策略,對系統(tǒng)有性能優(yōu)化和負(fù)載均衡處理能力之外,還要提供存儲安全和數(shù)據(jù)訪問的安全保證,此外虛擬存儲系統(tǒng)本身還要具有高可靠性和高可擴(kuò)展性等特點(diǎn)。
云存儲結(jié)構(gòu)模型是一種層次結(jié)構(gòu),它由4 層組成,見圖1。傳統(tǒng)存儲設(shè)備僅僅是簡單的硬件范疇,而云存儲的組成更多的是存儲設(shè)備、網(wǎng)絡(luò)設(shè)備、應(yīng)用軟件、服務(wù)器、訪問接口等多個部分的有機(jī)聚合,超越了傳統(tǒng)硬件的單一性。云存儲模型是一種典型的層次結(jié)構(gòu),低一層向高一層提供服務(wù),高一層次不必關(guān)心底層次的業(yè)務(wù)邏輯只需要調(diào)用接口即可,這樣提高層內(nèi)內(nèi)聚度和降低了層次之間耦合性,易于維護(hù)。
(1)云存儲架構(gòu)中最基礎(chǔ)的部分是存儲層。存儲層的設(shè)備可以是網(wǎng)絡(luò)接入服務(wù)器NAS、光纖通道FC、網(wǎng)絡(luò)小型計(jì)算機(jī)系統(tǒng)接口iSCSI 等。這一層的存儲設(shè)備種類繁多,由統(tǒng)一的設(shè)備管理系統(tǒng)進(jìn)行集中管理、虛擬化操作、狀態(tài)監(jiān)控和升級維護(hù)等??紤]到數(shù)據(jù)冗余備份和能量消耗,通常是把存儲集群分布在不同的地域,各個地域間的集群通過網(wǎng)絡(luò)互聯(lián)或光纖通道連接形成一個更大的邏輯設(shè)備。
(2)云存儲架構(gòu)核心部分是基礎(chǔ)管理層,基礎(chǔ)管理層通過集群應(yīng)用、網(wǎng)格計(jì)算、分布式文件系統(tǒng)等技術(shù)實(shí)現(xiàn)多個存儲設(shè)備之間的協(xié)同工作,使多個設(shè)備可以向外提供相同的服務(wù)。該層的P2P對等存儲技術(shù)可以保證數(shù)據(jù)的高擴(kuò)展性和高容錯性。為了保證云存儲介質(zhì)中的數(shù)據(jù)不會被未授權(quán)的用戶訪問,該層采取內(nèi)容分發(fā)系統(tǒng)和數(shù)據(jù)加密技術(shù),同時(shí)為了達(dá)到數(shù)據(jù)冗余和云存儲自身安全穩(wěn)定的目的在該層采用數(shù)據(jù)容災(zāi)備份技術(shù)。
(3)應(yīng)用接口層是云存儲框架中最靈活多變的一層,因?yàn)樵搶拥慕M成由實(shí)際的運(yùn)營單位決定,業(yè)務(wù)的不同會有不同的應(yīng)用接口提供不同的服務(wù),例如網(wǎng)絡(luò)硬盤的接口、視頻監(jiān)控的應(yīng)用平臺等。
(4)訪問層是用戶可以直接接觸到層次,任何有權(quán)限的用戶都可以通過該層的接口進(jìn)入云存儲系統(tǒng),享受云存儲高效便捷的服務(wù)。
圖1 云存儲結(jié)構(gòu)模型
目前,最為流行的開源云計(jì)算平臺是Apache 基金組織開發(fā)的Hadoop 生態(tài)系統(tǒng)。Hadoop 系統(tǒng)在實(shí)現(xiàn)上借鑒了谷歌云計(jì)算的理論架構(gòu),具有良好的可靠性、擴(kuò)展性和容錯性。基于Hadoop 的核心技術(shù)HDFS、MapReduce和HBase可以為用戶提供一個系統(tǒng)底層透明的云存儲系統(tǒng),這個系統(tǒng)可以針對PB級數(shù)據(jù)存儲和管理。
HDFS 是Hadoop 中 眾 多 技 術(shù)的基礎(chǔ),很多更高級的應(yīng)用都是建立在這個分布式文件系統(tǒng)上的。HDFS 存儲對象針對大規(guī)模的應(yīng)用數(shù)據(jù),數(shù)據(jù)吞吐量高且具有容錯性。Hadoop 中有一個綜合性的文件抽象系統(tǒng),它提供了文件系統(tǒng)實(shí)現(xiàn)的各類接口,HDFS只是這個抽象文件系統(tǒng)的一個實(shí)例。
HDFS 結(jié)構(gòu)采用云存儲架構(gòu)松弛耦合非對稱架構(gòu),是一個主從結(jié)構(gòu)體系,它有兩類節(jié)點(diǎn),一類是Namenode,另一類是Datanode。這兩類節(jié)點(diǎn)分別承擔(dān)管理者和執(zhí)行者的任務(wù)。Namenode 是管理集群中的任務(wù)執(zhí)行調(diào)度,Datanode 是具體任務(wù)的執(zhí)行節(jié)點(diǎn)。NameNode是整個HDFS 的管理節(jié)點(diǎn),相當(dāng)于集群的大腦,負(fù)責(zé)收集和管理存儲節(jié)點(diǎn)上文件的元數(shù)據(jù),維護(hù)整個集群上文件系統(tǒng)的命名空間。NameNode執(zhí)行文件系統(tǒng)命名空間的打開、關(guān)閉、重命名等操作??蛻舳巳粝氩僮魑募紫纫ㄟ^NameNode通信獲得文件的元數(shù)據(jù)信息,如得到文件的存儲節(jié)點(diǎn),然后去和存儲節(jié)點(diǎn)交互操作完成數(shù)據(jù)的訪問。從Namenode 中可以獲得每個文件的每個塊所在的Datanode。需要注意的是,這些信息是臨時(shí)的,Namenode 會在每次文件系統(tǒng)重啟的時(shí)候動態(tài)地重建這些信息。
Datanode是文件系統(tǒng)的工作和存儲節(jié)點(diǎn)。HDFS文件系統(tǒng)存在一個文件塊Block的概念,若存儲在上面的一個文件大于這個塊的大小,文件會被切分成很多塊并盡可能分散存儲在不同的數(shù)據(jù)節(jié)點(diǎn)Datanode上。Datanode主要職責(zé)是響應(yīng)客戶的讀寫數(shù)據(jù)請求,以及在Namenode的統(tǒng)一管理指揮下對數(shù)據(jù)塊進(jìn)行復(fù)制、刪除、創(chuàng)建等操作,并且通過心跳機(jī)制定時(shí)向Namenode 報(bào)道節(jié)點(diǎn)上的數(shù)據(jù)塊的情況,默認(rèn)條件下DataNode上的數(shù)據(jù)復(fù)制成三份。
為了提高NameNode節(jié)點(diǎn)的內(nèi)存效率,需要把對文件系統(tǒng)元數(shù)據(jù)的操作分開,NameNode 中采用了編輯日志文件(Editlog)和映像文件(FsImage)策略。編輯日志和映像文件都存儲在Namenode 的本地文件系統(tǒng),前者負(fù)責(zé)記錄HDFS 文件元數(shù)據(jù)的變化,后者存儲整個文件系統(tǒng)的命名空間,即所有文件或數(shù)據(jù)塊的元數(shù)據(jù)信息。兩者的作用關(guān)系是,HDFS在啟動的時(shí)候會把磁盤中的映像文件和編輯日志文件加載到內(nèi)存中,按照日志文件上記錄的元數(shù)據(jù)變化更改映像文件,然后新的映像文件刷新到本地磁盤,舊的編輯日志文件被置空等待新的操作寫入。同時(shí)為了減輕NameNode的負(fù)擔(dān),HDFS為Namenode還提供了一個輔助名字節(jié)點(diǎn)(Secondary Namenode),Namenode啟動的時(shí)候合并映像文件和編輯日志,而剩下的時(shí)間里輔助名字節(jié)點(diǎn)會周期地從名字節(jié)點(diǎn)上復(fù)制映像文件和編輯日志到輔助節(jié)點(diǎn)上合成一個新的映像文件,合并生成新的映像文件后重新傳到名字節(jié)點(diǎn)替換掉原來的映像節(jié)點(diǎn)。
出于安全性的考慮,HDFS 集群上的節(jié)點(diǎn)一般部署在不同的機(jī)架上,機(jī)架之間節(jié)點(diǎn)的交互通信都要經(jīng)過交換機(jī)。默認(rèn)情況下當(dāng)集群副本因子為3 時(shí),一個副本放在與原始數(shù)據(jù)相同的機(jī)架的另一個節(jié)點(diǎn)上,機(jī)架內(nèi)節(jié)點(diǎn)間的帶寬要比機(jī)架間節(jié)點(diǎn)的帶寬大,這樣可以保證較快訪問數(shù)據(jù)。另外一個副本則放置在與原始數(shù)據(jù)不同的機(jī)架上,機(jī)架的錯誤率要比節(jié)點(diǎn)錯誤率低,可以防止整個機(jī)架失效時(shí)數(shù)據(jù)丟失。
借鑒了Google的Mapreduce編程思想,Hadoop 也有一套MapReduce 編程模型,在這個模型上做并行開發(fā)很容易實(shí)現(xiàn)數(shù)據(jù)處理。MapReduce把數(shù)據(jù)的處理分為兩個階段:映射Map 和化簡Reduce。也就是說先對數(shù)據(jù)分解操作,針對分解的片段分別處理,在Reduce階段把結(jié)果匯總得到最后結(jié)果。并不是所有的數(shù)據(jù)都適合MapReduce 處理,用MapReduce 編程要體現(xiàn)一個分而治之的思想:首先把待處理的數(shù)據(jù)集分解成許多小的數(shù)據(jù)集,每一個小的數(shù)據(jù)集可以分別并行進(jìn)行處理。
在Map 映射階段,MapReduce框架將用戶輸入數(shù)據(jù)分割成為M個片段,對應(yīng)M個Map任務(wù)。對數(shù)據(jù)分解操作,針對分解的片段分別處理,在Reduce階段把結(jié)果匯總得到最后結(jié)果。
Hadoop是基于LCA架構(gòu)的,不僅HDFS存在兩類節(jié)點(diǎn),MapReduce也存在管理任務(wù)JobTracker和執(zhí)行任務(wù)TaskTracker。JobTracker 是管理者,負(fù)責(zé)調(diào)度和監(jiān)控TaskTracker的執(zhí)行,JobTracker分派任務(wù)把Map和Redece 函數(shù)交給空閑的TaskTracker去執(zhí)行。TaskTracker負(fù)責(zé)執(zhí)行JobTracker 分配的任務(wù),若TaskTracker 運(yùn)行出現(xiàn)問題,JobTracker 將調(diào)度另外的一個空閑的TaskTracker重新開始執(zhí)行。
HBase是基于列的分布式數(shù)據(jù)庫,與傳統(tǒng)的關(guān)系數(shù)據(jù)庫相比,它的特點(diǎn)如下:
(1)數(shù)據(jù)類型:關(guān)系型數(shù)據(jù)庫有豐富的類型選擇(比如日期、整型、字符串等)和存儲方式。HBase 沒有那么多類型只有字符串類型,所有的類型都是由用戶自己處理的。
(2)數(shù)據(jù)操作:傳統(tǒng)數(shù)據(jù)庫有各種各樣的函數(shù)、連接操作。針對HBase 的操作相對比較簡單,只有插入、刪除、查詢、清空等。表之間的關(guān)系也很簡單,表與表相互分離,所以沒有表與表之間的連接操作。
(3)存儲模式:關(guān)系表中的數(shù)據(jù)通常是基于表結(jié)構(gòu)和行來存儲的,而HBase則是基于列存儲的。
(4)數(shù)據(jù)維護(hù):傳統(tǒng)數(shù)據(jù)庫更新操作時(shí)是替換操作,新值替換掉舊值。HBase 中,確切的說是不應(yīng)該叫做更新,因?yàn)楦潞笈f的版本依舊會保留。
(5)可伸縮性:傳統(tǒng)的數(shù)據(jù)庫可伸縮性差,需要增加中間層次才可實(shí)現(xiàn)伸縮性。而HBase設(shè)計(jì)之初就考慮到了伸縮性,可以很輕易動態(tài)增加和刪除節(jié)點(diǎn),這樣對錯誤有較高的兼容性。
電子檔案的長期保存需要一個存儲平臺。這個平臺需要滿足以下的要求:
(1)容量大。電子政務(wù)、商務(wù)等辦公過程中產(chǎn)生了大量的電子文件,這些文件歸檔數(shù)據(jù)的存儲要求一個大的存儲容納空間。
(2)性能高。存儲平臺要有高的并發(fā)性來響應(yīng)用戶的請求。
(3)可靠性高。為防止數(shù)據(jù)丟失,采取冗余備份機(jī)制盡可能地將數(shù)據(jù)分散存儲保證數(shù)據(jù)可靠性。
(4)擴(kuò)展性好。隨著時(shí)間的推移,產(chǎn)生的電子檔案數(shù)量將不斷增加,這要求這個存儲平臺可以動態(tài)擴(kuò)展存儲空間來滿足不斷增長的電子檔案。
(5)數(shù)據(jù)簡單處理。系統(tǒng)需要對存儲平臺上的數(shù)據(jù)進(jìn)行簡單地處理,這些處理提取出存儲文件中的關(guān)鍵信息,并對這些信息進(jìn)行存儲,方便以后查詢檢索等操作。
云存儲是一種通過網(wǎng)絡(luò)提供可配置的虛擬化存儲的服務(wù)。云存儲的實(shí)現(xiàn)可用Hadoop 技術(shù)搭建一個云存儲平臺,這在一定程度上解決了電子檔案數(shù)據(jù)的真實(shí)性、完整性、安全性、存儲成本等問題。
系統(tǒng)基于MVC三層架構(gòu)體系,層次清楚、易于開發(fā)、方便維護(hù)和部署、有利于軟件工程化管理,結(jié)構(gòu)設(shè)計(jì)如圖2所示。
顯示層是用戶可以看到的與系統(tǒng)進(jìn)行交互的界面。用戶可以通過頁面來進(jìn)行對文件系統(tǒng)的增加、刪除、查找等基本操作,系統(tǒng)管理員可以在顯示層對集群運(yùn)行狀況進(jìn)行監(jiān)控和維護(hù),還能對用戶進(jìn)行管理。
業(yè)務(wù)邏輯層表示整個系統(tǒng)業(yè)務(wù)邏輯和規(guī)則,在該層并行處理對HDFS和HBase數(shù)據(jù)的訪問,處理如頁面轉(zhuǎn)發(fā)等基本邏輯,對整個平臺存儲系統(tǒng)進(jìn)行配置,可以理解為Tomcat服務(wù)器。
數(shù)據(jù)存儲層是整個存儲系統(tǒng)的基礎(chǔ),主要是利用HDFS 和HBase對電子文檔建立倒排索引,并對元數(shù)據(jù)進(jìn)行存儲。
3.3.1 文件上傳流程
云存儲平臺有很多邏輯處理流程,現(xiàn)在最復(fù)雜的是電子文件上傳時(shí)的過程。首先,外部數(shù)據(jù)由交互界面瀏覽器端的fileUpload 組件傳到后臺中心處理模塊,中心處理模塊初步處理電子文件提取出電子文件的元數(shù)據(jù)信息比如文件名、文件大小、文件類型等存儲到HBase 數(shù)據(jù)庫里面。如果文件大小超過一定的閾值可直接存放到HDFS 里面,如果文件小于閾值先把文件放到服務(wù)器的小文件隊(duì)列里面,當(dāng)文件隊(duì)列滿或者是定時(shí)器間隔到則對小文件隊(duì)列里面的文件作Sequence壓縮處理,處理后合并成大文件存放到HDFS 中。當(dāng)文件放到HDFS 之后對上面的文件作MapReduce 處理,建立倒排索引,然后把索引放到數(shù)據(jù)HBase中去。
圖2 云存儲系統(tǒng)MVC架構(gòu)圖
3.3.2 文件下載流程
用戶進(jìn)行文件下載操作時(shí),判斷文件是否為空、為多個文件或?yàn)槲募A,如果是上述情況,輸出用戶錯誤提示信息。用戶選定文件成功,系統(tǒng)將對用戶提交的數(shù)據(jù)進(jìn)行處理,并判斷選定文件是否存在于HDFS 中,如果不存在,返回頁面。如果文件存在,則讀取文件內(nèi)容,修改HTTP 協(xié)議的Head 信息,發(fā)送讀取數(shù)據(jù)到瀏覽器輸出,返回頁面。
3.3.3 文件夾目錄創(chuàng)建流程
用戶創(chuàng)建目錄時(shí),系統(tǒng)將判斷該用戶是否有創(chuàng)建目錄的權(quán)限,如果不允許在該目錄下創(chuàng)建文件夾將提示用戶相關(guān)信息,返回頁面。如果用戶擁有權(quán)限判斷成功,系統(tǒng)將異步提交用戶數(shù)據(jù)到服務(wù)端,服務(wù)器對用戶數(shù)據(jù)字符處理判斷該文件夾是否已存在。系統(tǒng)在用戶指定目錄創(chuàng)建文件夾,完成后,檢測其文件夾是否創(chuàng)建成功。如果目錄創(chuàng)建成功,則記錄日志到數(shù)據(jù)庫,提示用戶創(chuàng)建成功返回頁面。
3.3.4 文件重命名
用戶重命名文件(文件夾)時(shí),系統(tǒng)將會判斷用戶的權(quán)限,如果權(quán)限不允許用戶進(jìn)行重命名操作,將提示用戶相關(guān)信息并返回提示頁面。當(dāng)用戶權(quán)限認(rèn)證成功后,系統(tǒng)將彈出對話框,上面是舊文件名稱下面是要求和輸入新的文件名,用戶可以將名稱修改,鼠標(biāo)點(diǎn)擊保存。用戶向服務(wù)器提交相關(guān)數(shù)據(jù),服務(wù)器對提交的數(shù)據(jù)進(jìn)行過濾驗(yàn)證處理,用戶輸入數(shù)據(jù)驗(yàn)證成功,如果該新文件名已經(jīng)存在,輸出用戶提示信息并返回頁面。
*本文系江蘇省檔案局科研項(xiàng)目“基于云存儲的電子檔案長期保存技術(shù)研究”(項(xiàng)目編號2014-1)的研究成果之一。
[1]薛四新.云計(jì)算環(huán)境下電子文件管理的實(shí)現(xiàn)機(jī)理[M].上海:世界圖書出版公司,2013.
[2]劉鵬.實(shí)戰(zhàn)Hadoop--開啟通向云計(jì)算的捷徑[M].北京:電子工業(yè)出版社,2011.
[3]GB/T18894-201X,電子文件歸檔與電子檔案管理規(guī)范[S].