楊 靜 殷建琳
(1.江蘇省檔案局,江蘇南京,210008;2.南京新模式軟件集成有限公司,江蘇南京,210009)
隨著我國電子政務和信息化建設的不斷推進及其在各個領域的廣泛應用,產生了類型繁多、數量巨大、內容豐富的電子文件。從中央到地方,從各級國家行政機關到各類企事業單位,甚至每一個個人,無不都在廣泛地使用電子文件。電子檔案的長期保存也不可逆轉地進入了大數據時代。
由于傳統存儲設備容量帶寬有限、設備節點不易擴展、不易使用、數據管理困難,不足以應付日益增長的大數據,而在云計算發展背景下應運而生的云存儲技術在一定的程度上解決了這個難題。云存儲技術是人類進入大數據時代一種新型的存儲模式,可以通過網絡提供可配置的虛擬化存儲及相關數據訪問的服務,為海量數據的存儲和管理提供解決方案。
狹義上來說,云存儲是一個以數據管理和存儲為核心的云計算平臺,依靠軟件將分布在不同位置不同種類的存儲介質有效結合組成一個更大的存儲介質,對外界提供透明一致的存儲和業務訪問接口。
云存儲的內涵主要是存儲虛擬化和存儲自動化,在虛擬存儲技術之上對存儲服務和設備進行虛擬化,即把對物理存儲數據的訪問抽象成對邏輯數據的訪問。存儲虛擬化除了要實現異構存儲介質的互聯和統一管理,實現數據的共享、沖突解決、一致性及數據遷移,實現數據的透明存儲和容錯容災策略,對系統有性能優化和負載均衡處理能力之外,還要提供存儲安全和數據訪問的安全保證,此外虛擬存儲系統本身還要具有高可靠性和高可擴展性等特點。
云存儲結構模型是一種層次結構,它由4 層組成,見圖1。傳統存儲設備僅僅是簡單的硬件范疇,而云存儲的組成更多的是存儲設備、網絡設備、應用軟件、服務器、訪問接口等多個部分的有機聚合,超越了傳統硬件的單一性。云存儲模型是一種典型的層次結構,低一層向高一層提供服務,高一層次不必關心底層次的業務邏輯只需要調用接口即可,這樣提高層內內聚度和降低了層次之間耦合性,易于維護。
(1)云存儲架構中最基礎的部分是存儲層。存儲層的設備可以是網絡接入服務器NAS、光纖通道FC、網絡小型計算機系統接口iSCSI 等。這一層的存儲設備種類繁多,由統一的設備管理系統進行集中管理、虛擬化操作、狀態監控和升級維護等。考慮到數據冗余備份和能量消耗,通常是把存儲集群分布在不同的地域,各個地域間的集群通過網絡互聯或光纖通道連接形成一個更大的邏輯設備。
(2)云存儲架構核心部分是基礎管理層,基礎管理層通過集群應用、網格計算、分布式文件系統等技術實現多個存儲設備之間的協同工作,使多個設備可以向外提供相同的服務。該層的P2P對等存儲技術可以保證數據的高擴展性和高容錯性。為了保證云存儲介質中的數據不會被未授權的用戶訪問,該層采取內容分發系統和數據加密技術,同時為了達到數據冗余和云存儲自身安全穩定的目的在該層采用數據容災備份技術。
(3)應用接口層是云存儲框架中最靈活多變的一層,因為該層的組成由實際的運營單位決定,業務的不同會有不同的應用接口提供不同的服務,例如網絡硬盤的接口、視頻監控的應用平臺等。
(4)訪問層是用戶可以直接接觸到層次,任何有權限的用戶都可以通過該層的接口進入云存儲系統,享受云存儲高效便捷的服務。

圖1 云存儲結構模型
目前,最為流行的開源云計算平臺是Apache 基金組織開發的Hadoop 生態系統。Hadoop 系統在實現上借鑒了谷歌云計算的理論架構,具有良好的可靠性、擴展性和容錯性。基于Hadoop 的核心技術HDFS、MapReduce和HBase可以為用戶提供一個系統底層透明的云存儲系統,這個系統可以針對PB級數據存儲和管理。
HDFS 是Hadoop 中 眾 多 技 術的基礎,很多更高級的應用都是建立在這個分布式文件系統上的。HDFS 存儲對象針對大規模的應用數據,數據吞吐量高且具有容錯性。Hadoop 中有一個綜合性的文件抽象系統,它提供了文件系統實現的各類接口,HDFS只是這個抽象文件系統的一個實例。
HDFS 結構采用云存儲架構松弛耦合非對稱架構,是一個主從結構體系,它有兩類節點,一類是Namenode,另一類是Datanode。這兩類節點分別承擔管理者和執行者的任務。Namenode 是管理集群中的任務執行調度,Datanode 是具體任務的執行節點。NameNode是整個HDFS 的管理節點,相當于集群的大腦,負責收集和管理存儲節點上文件的元數據,維護整個集群上文件系統的命名空間。NameNode執行文件系統命名空間的打開、關閉、重命名等操作。客戶端若想操作文件首先要通過NameNode通信獲得文件的元數據信息,如得到文件的存儲節點,然后去和存儲節點交互操作完成數據的訪問。從Namenode 中可以獲得每個文件的每個塊所在的Datanode。需要注意的是,這些信息是臨時的,Namenode 會在每次文件系統重啟的時候動態地重建這些信息。
Datanode是文件系統的工作和存儲節點。HDFS文件系統存在一個文件塊Block的概念,若存儲在上面的一個文件大于這個塊的大小,文件會被切分成很多塊并盡可能分散存儲在不同的數據節點Datanode上。Datanode主要職責是響應客戶的讀寫數據請求,以及在Namenode的統一管理指揮下對數據塊進行復制、刪除、創建等操作,并且通過心跳機制定時向Namenode 報道節點上的數據塊的情況,默認條件下DataNode上的數據復制成三份。
為了提高NameNode節點的內存效率,需要把對文件系統元數據的操作分開,NameNode 中采用了編輯日志文件(Editlog)和映像文件(FsImage)策略。編輯日志和映像文件都存儲在Namenode 的本地文件系統,前者負責記錄HDFS 文件元數據的變化,后者存儲整個文件系統的命名空間,即所有文件或數據塊的元數據信息。兩者的作用關系是,HDFS在啟動的時候會把磁盤中的映像文件和編輯日志文件加載到內存中,按照日志文件上記錄的元數據變化更改映像文件,然后新的映像文件刷新到本地磁盤,舊的編輯日志文件被置空等待新的操作寫入。同時為了減輕NameNode的負擔,HDFS為Namenode還提供了一個輔助名字節點(Secondary Namenode),Namenode啟動的時候合并映像文件和編輯日志,而剩下的時間里輔助名字節點會周期地從名字節點上復制映像文件和編輯日志到輔助節點上合成一個新的映像文件,合并生成新的映像文件后重新傳到名字節點替換掉原來的映像節點。
出于安全性的考慮,HDFS 集群上的節點一般部署在不同的機架上,機架之間節點的交互通信都要經過交換機。默認情況下當集群副本因子為3 時,一個副本放在與原始數據相同的機架的另一個節點上,機架內節點間的帶寬要比機架間節點的帶寬大,這樣可以保證較快訪問數據。另外一個副本則放置在與原始數據不同的機架上,機架的錯誤率要比節點錯誤率低,可以防止整個機架失效時數據丟失。
借鑒了Google的Mapreduce編程思想,Hadoop 也有一套MapReduce 編程模型,在這個模型上做并行開發很容易實現數據處理。MapReduce把數據的處理分為兩個階段:映射Map 和化簡Reduce。也就是說先對數據分解操作,針對分解的片段分別處理,在Reduce階段把結果匯總得到最后結果。并不是所有的數據都適合MapReduce 處理,用MapReduce 編程要體現一個分而治之的思想:首先把待處理的數據集分解成許多小的數據集,每一個小的數據集可以分別并行進行處理。
在Map 映射階段,MapReduce框架將用戶輸入數據分割成為M個片段,對應M個Map任務。對數據分解操作,針對分解的片段分別處理,在Reduce階段把結果匯總得到最后結果。
Hadoop是基于LCA架構的,不僅HDFS存在兩類節點,MapReduce也存在管理任務JobTracker和執行任務TaskTracker。JobTracker 是管理者,負責調度和監控TaskTracker的執行,JobTracker分派任務把Map和Redece 函數交給空閑的TaskTracker去執行。TaskTracker負責執行JobTracker 分配的任務,若TaskTracker 運行出現問題,JobTracker 將調度另外的一個空閑的TaskTracker重新開始執行。
HBase是基于列的分布式數據庫,與傳統的關系數據庫相比,它的特點如下:
(1)數據類型:關系型數據庫有豐富的類型選擇(比如日期、整型、字符串等)和存儲方式。HBase 沒有那么多類型只有字符串類型,所有的類型都是由用戶自己處理的。
(2)數據操作:傳統數據庫有各種各樣的函數、連接操作。針對HBase 的操作相對比較簡單,只有插入、刪除、查詢、清空等。表之間的關系也很簡單,表與表相互分離,所以沒有表與表之間的連接操作。
(3)存儲模式:關系表中的數據通常是基于表結構和行來存儲的,而HBase則是基于列存儲的。
(4)數據維護:傳統數據庫更新操作時是替換操作,新值替換掉舊值。HBase 中,確切的說是不應該叫做更新,因為更新后舊的版本依舊會保留。
(5)可伸縮性:傳統的數據庫可伸縮性差,需要增加中間層次才可實現伸縮性。而HBase設計之初就考慮到了伸縮性,可以很輕易動態增加和刪除節點,這樣對錯誤有較高的兼容性。
電子檔案的長期保存需要一個存儲平臺。這個平臺需要滿足以下的要求:
(1)容量大。電子政務、商務等辦公過程中產生了大量的電子文件,這些文件歸檔數據的存儲要求一個大的存儲容納空間。
(2)性能高。存儲平臺要有高的并發性來響應用戶的請求。
(3)可靠性高。為防止數據丟失,采取冗余備份機制盡可能地將數據分散存儲保證數據可靠性。
(4)擴展性好。隨著時間的推移,產生的電子檔案數量將不斷增加,這要求這個存儲平臺可以動態擴展存儲空間來滿足不斷增長的電子檔案。
(5)數據簡單處理。系統需要對存儲平臺上的數據進行簡單地處理,這些處理提取出存儲文件中的關鍵信息,并對這些信息進行存儲,方便以后查詢檢索等操作。
云存儲是一種通過網絡提供可配置的虛擬化存儲的服務。云存儲的實現可用Hadoop 技術搭建一個云存儲平臺,這在一定程度上解決了電子檔案數據的真實性、完整性、安全性、存儲成本等問題。
系統基于MVC三層架構體系,層次清楚、易于開發、方便維護和部署、有利于軟件工程化管理,結構設計如圖2所示。
顯示層是用戶可以看到的與系統進行交互的界面。用戶可以通過頁面來進行對文件系統的增加、刪除、查找等基本操作,系統管理員可以在顯示層對集群運行狀況進行監控和維護,還能對用戶進行管理。
業務邏輯層表示整個系統業務邏輯和規則,在該層并行處理對HDFS和HBase數據的訪問,處理如頁面轉發等基本邏輯,對整個平臺存儲系統進行配置,可以理解為Tomcat服務器。
數據存儲層是整個存儲系統的基礎,主要是利用HDFS 和HBase對電子文檔建立倒排索引,并對元數據進行存儲。
3.3.1 文件上傳流程
云存儲平臺有很多邏輯處理流程,現在最復雜的是電子文件上傳時的過程。首先,外部數據由交互界面瀏覽器端的fileUpload 組件傳到后臺中心處理模塊,中心處理模塊初步處理電子文件提取出電子文件的元數據信息比如文件名、文件大小、文件類型等存儲到HBase 數據庫里面。如果文件大小超過一定的閾值可直接存放到HDFS 里面,如果文件小于閾值先把文件放到服務器的小文件隊列里面,當文件隊列滿或者是定時器間隔到則對小文件隊列里面的文件作Sequence壓縮處理,處理后合并成大文件存放到HDFS 中。當文件放到HDFS 之后對上面的文件作MapReduce 處理,建立倒排索引,然后把索引放到數據HBase中去。

圖2 云存儲系統MVC架構圖
3.3.2 文件下載流程
用戶進行文件下載操作時,判斷文件是否為空、為多個文件或為文件夾,如果是上述情況,輸出用戶錯誤提示信息。用戶選定文件成功,系統將對用戶提交的數據進行處理,并判斷選定文件是否存在于HDFS 中,如果不存在,返回頁面。如果文件存在,則讀取文件內容,修改HTTP 協議的Head 信息,發送讀取數據到瀏覽器輸出,返回頁面。
3.3.3 文件夾目錄創建流程
用戶創建目錄時,系統將判斷該用戶是否有創建目錄的權限,如果不允許在該目錄下創建文件夾將提示用戶相關信息,返回頁面。如果用戶擁有權限判斷成功,系統將異步提交用戶數據到服務端,服務器對用戶數據字符處理判斷該文件夾是否已存在。系統在用戶指定目錄創建文件夾,完成后,檢測其文件夾是否創建成功。如果目錄創建成功,則記錄日志到數據庫,提示用戶創建成功返回頁面。
3.3.4 文件重命名
用戶重命名文件(文件夾)時,系統將會判斷用戶的權限,如果權限不允許用戶進行重命名操作,將提示用戶相關信息并返回提示頁面。當用戶權限認證成功后,系統將彈出對話框,上面是舊文件名稱下面是要求和輸入新的文件名,用戶可以將名稱修改,鼠標點擊保存。用戶向服務器提交相關數據,服務器對提交的數據進行過濾驗證處理,用戶輸入數據驗證成功,如果該新文件名已經存在,輸出用戶提示信息并返回頁面。
*本文系江蘇省檔案局科研項目“基于云存儲的電子檔案長期保存技術研究”(項目編號2014-1)的研究成果之一。
[1]薛四新.云計算環境下電子文件管理的實現機理[M].上海:世界圖書出版公司,2013.
[2]劉鵬.實戰Hadoop--開啟通向云計算的捷徑[M].北京:電子工業出版社,2011.
[3]GB/T18894-201X,電子文件歸檔與電子檔案管理規范[S].