云存儲是在云計算(Cloud Computing)概念上延伸和發展出來的一個新的概念,是指通過集群應用、網格技術或分布式文件系統等功能,將網絡中大量各種不同類型的存儲設備通過應用軟件集合起來協同工作,協同對外提供數據存儲和業務訪問功能的一個系統。分布式文件系統是常規的分時系統中文件系統的分布式實現,支持物理上分散的多個用戶共享文件和存儲數據。它包含兩個方面的含義,從客戶使用的角度來看,它是一個標準的文件系統,提供了一系列API,由此進行文件或目錄的創建、移動、刪除以及對文件的讀寫等操作。從內部實現來看,分布式的系統則不再和普通文件系統一樣負責管理本地磁盤,它的文件內容和目錄結構都不是存儲在本地磁盤上,而是通過網絡傳輸到遠端系統上。并且,同一個文件存儲不只是在一臺機器上,而是在一簇機器上分布式存儲,協同提供服務。
分布式文件系統是一個比較活躍的研究方向,國內外很多大學、研究機構和企業著手開發自己的分布式文件系統,如中科院計算所的藍鯨分布式文件系統(BWFS)、電子科技大學的分布式文件系統(DPFS)、IBM的GPFS、Sun的Lustre等,這些系統支持I/O密集型應用,通常用于高性能計算或大型數據中心,對硬件設施要求較高;Google的GFS及其開源實現HDFS通常用于提供海量數據的存儲和訪問能力;還有一些常用的比較輕量級的分布式文件系統,如MogileFS和FastDFS主要用于存儲Web應用的資源文件。但同時也存在一些問題需要進一步研究,如HDFS和MooseFS存在單元數據服務器依賴,如何改進元數據管理系統或者增加元數據管理服務器;MogileFS和FastDFS的管理節點包含多個調度服務器,如何使多個調度服務器達到負載均衡;GFS和Lustre通過鎖服務來保證數據一致性,但同一時間不允許多個用戶對文件的同一部分進行寫操作;分布式文件系統的可靠性也是一個大問題,現有的容錯機制通過備份日志恢復元數據管理服務器,增加備用元數據管理服務器,采用磁盤陣列以及備份文件等,都有一定的局限性。將來,通用分布式文件系統和專用分布式文件系統的分工將越來越明顯,通用分布式文件系統提供標準API接口,不需要開發者修改上層應用就能使用,而且支持用戶空間文件系統(Filesystem in Userspace,FUSE),用戶管理共享的分布式文件系統如同管理本地文件系統一樣方便,還將向大型化發展,提供更廉價的存儲服務,云存儲就是一個很好的代表;與此相反,專用分布式文件系統提供專有API,對開發者要求熟悉掌握其API,但其系統復雜度較低,而且提供較高的性能,在Web應用、高性能計算等方面有較大的需求,這兩種分布式文件系統是未來的發展趨勢。開源社區也開發出了一批基于Linux/Unix操作系統的分布式文件系統,正是這些開源項目大大促進了分布式文件系統的發展和應用。
1、分布式文件系統
分布式文件系統是指文件系統管理的物理存儲資源不一定直接存儲在本地節點上,而是通過計算機網絡與節點相連,支持多個用戶共享文件和存儲資源。可以分為通用分布式文件系統和專業分布式文件系統,相比起來通用分布式文件系統對開發者來說具有友好性強的優勢,系統復雜性相對較高,性能一般;而專用分布式文件系統的開發者友好性較差,系統復雜性較低,性能較高。因此,根據專用性和通用性的原則,在選擇分布式系統的時候需要考慮有關分布式系統的應用環境。
1.1 HDFS分布式文件系統
HDFS是一種基于Java的適用于海量數據存儲的開源分布式文件系統。它可以部署在低成本的硬件上,能夠高容錯、可靠地存儲PB級的數據,還可以與MapReduce編程模型很好地結合,為應用程序提供高吞吐量的數據訪問。HDFS的架構如圖1所示。
HDFS主要用于保存大文件,用戶通過API訪問文件系統。存儲文件時,每個文件被分成若干個數據塊,塊大小默認是64MB,先把數據塊緩存在本地,大小累積到64MB時才聯系NameNode,寫人到DataNode,同時,在其他節點采用流水線方式備份文件,默認是3份。文件刪除時,移動到回收站,在配置的時間內可以迅速恢復。HDFS提出的自動均衡方案,可以自動地將數據從一個數據節點移動到空閑的數據節點。而且,HDFS提供的接口可以很容易地將數據從一個平臺移動到另外一個平臺。
HDFS只有單個管理服務器,所有對文件的請求都要經過它,當請求過多時,肯定會有延時,所以HDFS不太適合于那些要求低延時訪問的應用程序。
由于管理服務器把文件系統的元數據放置在內存中,文件系統所能容納的文件數目是由管理服務器的內存大小來決定,所以HDFS不太適合處理大量小文件。而且Hadoop只支持單用戶寫,不支持并發多用戶寫。
1.2 Lustre分布式文件系統
Lustre是首個基于對象存儲的開源分布式文件系統,用來解決海量存儲問題,最多可支持10000個客戶端,PB級的存儲量,IOOGB/S的傳輸速度,具有完美的安全性和可管理性。Lustre文件系統一般運行在高性能計算機系統之上,其性能優越,被越來越廣泛地應用。Lustre架構如圖2所示。
Lustre是一個全局文件系統,用戶訪問文件系統的文件數據時,通過客戶端提供的標準POSIX(Portable Operating System Interface,可移植操作系統接口)接口先訪問MDS,獲取相關的元數據信息,然后直接與相應的OSS通信,取得文件的實際數據,這和HDFS非常相似。OST上的文件數據是以分條形式保存的,這和傳統的基于塊的存儲方式有所不同。在Lustre文件系統中,MDS可以有兩個,采用Active StandBy容錯方式,當一個MDS不能正常工作時,另外一個MDS啟動服務。Lustre還實現了部分文件鎖,可以使多個客戶端在同一時間寫同一文件的不同區域,極大地提高了多用戶對同一文件并發訪問時系統的性能。
Lustre文件系統的性能和可擴展性都不錯,但硬件設備要求比較高,而且Lustre目前還沒實現MDS集群管理,雖然相比于HDFS的單主節點,Lustre的雙MDS在可用性上提高了不少,但當系統達到一定規模時,MDS會成為Lustre系統的瓶頸。
1.3 FastDFS分布式文件系統
FastDFS是一個輕量級的開源分布式文件系統,主要用來解決大容量的文件存儲和高并發訪問的問題,特別適合大中型網站使用,用來存儲資源文件,如圖片、文檔、音頻、視頻等。FastDFS采用了分組存儲方式,一個組由多臺存儲服務器組成,同組存儲服務器上的文件是完全一致的,文件上傳、刪除等操作可以在任意一臺Storage Server上進行,同組內的Storage Server之間采用推送技術PUSH方式進行同步。
Tracker Server在內存中記錄分組和Storage Server的狀態等信息,不記錄文件索引信息,占用的內存量很少。FastDFS不對文件進行分塊存儲,更加簡潔高效,并且完全能滿足絕大多數互聯網應用的實際需要。FastDFS把簡潔和高效做到了極致,比如一個分組的存儲服務器訪問壓力較大時,可以在該組增加存儲服務器來擴充服務能力。當系統容量不足時,可以增加組來擴充存儲容量。由于同組的Storage Server上的文件是完全一致的,所以一個組的存儲容量為該組內存儲服務器容量最小的那個。
1.4 MogileFS分布式文件系統
MogileFS是一個開源的分布式文件系統,可支持文件自動備份的功能,提供高可用性和高可擴展性,適合存儲靜態文件,就是一次保存,多次讀取的資源。MogileFS系統的組件都可以運行在多個機器上,所以不存在單點失敗。MogileFS可以根據不同的文件類型,復制滿足這個類別的最少要求,如果數據丟失了,可以重新建立遺失的拷貝數,這樣可以節約磁盤。MogileFS提供全局的命名空間,文件通過給定的Key來確定,客戶端通過專有API訪問MogileFS系統,對整個文件系統進行讀寫操作。
由于MogileFS系統不支持對一個文件的隨機讀寫,因此只適合做一部分應用,如圖片文件,靜態HTML文件,只提供下載的文件,即文件寫入后基本上不需要修改的應用,當然也可以生成一個新的文件覆蓋原文件。
1.5 MooseFS分布式文件系統
MooseFS是一個具有容錯功能的,高可用、可擴展的海量級分布式文件系統。MooseFS分布式文件系統支持FUSE,客戶端通過FUSE內核接口掛接遠程管理服務器上所管理的數據存儲服務器,管理共享的文件系統如同管理本地文件系統一樣。MooseFS可動態隨時增加機器或者磁盤,提供回收站功能,可回收在指定時間內刪除的文件,還可以對整個文件甚至正在寫入的文件創建文件的快照。
MooseFS把文件系統的結構緩存到Master的內存中,文件越多,Master的內存消耗越大。當元數據服務器數據丟失或者損毀時,可從日志服務器恢復。與MogileFS相比,寫操作時,同樣備份數的情況下,MooseFS要慢較多。讀操作時,當并發加大時,請求的成功率MooseFS比MogileFS要低,MooseFS的反應時間也比MogileFS要慢很多。
2、改進的HDFS
2.1 HDFS存在的問題
因為Namenode把文件系統的元數據放置在內存中,所以文件系統所能容納的文件數目是由Name.Node的內存大小來決定。一般來說,每一個文件、文件夾和Block需要占據150byte左右的空間,所以,如果有100萬個文件,每一個占據一個Block,就至少需要300MB內存;當擴展到數十億時,對于當前的硬件水平來說就沒法實現了,這樣NameNode內存容量嚴重制約了集群的擴展。HDFS最初是為流式訪問大文件開發的,如果訪問大量小文件,需要不斷從一個DataNode跳到另一個DataNode,處理大量小文件速度遠遠小于處理同等大小的大文件的速度,嚴重影響性能。其次,每一個小文件要占用一個Task,而Task啟動將耗費大量時間甚至大部分時間都耗費在啟動Task和釋放Task上。還有一個問題就是,因為MapTask的數量是由Splits來決定的,所以用MR處理大量的小文件時,就會產生過多的Map Task,線程管理開銷將會增加作業時間。舉個例子,處理10000M的文件,若每個Sprit為1M,那就會有10000個MapTasks,會有很大的線程開銷;若每個Split為100M,則只有100個Map Tasks,每個Map Task將會有更多的事情做,而線程的管理開銷也將減小很多。
2.2 HDFS改進
本文將多個小文件打包成一個歸檔文件,這樣在減少NameNode內存使用的同時,仍然允許對文件進行透明的訪問。當一個文件到達時,判斷該文件是否屬于小文件,如果是,則交給小文件處理模塊處理,否則,交給通用文件處理模塊處理。小文件處理模塊的設計思想是,先將很多小文件合并成一個大文件,然后為這些小文件建立索引,以便進行快速存取和訪問。小文件處理模塊的流程如圖3所示。
(1)小文件的歸檔管理主要由周期性執行的MapReduce任務完成。有以下幾個處理流程:掃描元數據信息表,統計未歸檔的對象信息,包括在HDFS中的URI(Uniform Resource Identifier,通用資源標志符)、對象大小等;根據配置的歸檔文件大小限制,對統計所得的對象進行分組;將每個分組中的對象文件合并到一個歸檔文件中;更新相關對象元數據信息表中的數據位置描述項;刪除舊的對象文件。
(2)歸檔文件的壓縮主要有以下幾個處理流程:掃描已刪除對象表,統計無效對象信息;對于未歸檔的無效對象文件,直接刪除;將已歸檔的無效對象按照歸檔文件分組;統計涉及的歸檔文件的空間利用率;統計利用率低于閾值的每個歸檔文件中所有有效對象信息;將歸檔文件中的有效對象數據合并到一個新的歸檔文件中;更新相關對象元數據信息表中的數據位置描述項;刪除舊的歸檔文件。
(3)歸檔文件的再歸檔主要有以下幾個處理流程:掃描歸檔文件列表,統計占用磁盤空間低于閾值的歸檔文件;根據歸檔文件大小配置參數,將統計所得歸檔文件分組;統計各分組歸檔文件涉及的對象;將每個分組中的歸檔文件合并到一個歸檔文件;將歸檔文件中的有效對象數據合并到一個新的歸檔文件中;更新相關對象元數據信息表中的數據位置描述項;刪除舊的歸檔文件。
3、分布式文件系統對比
3.1實驗環境
實驗采用操作系統為CentOS5.4(Red Hat EntERPrise Linux 4.1.2)系統,文件系統軟件分別為Hadoop-0.19.2、Lustre-1.47、FastDFS-1.23、MogileFS-2.44、MooseFS.1.6.13,內存和I/O性能測試軟件分別為Ubench和IOzone。使用8臺PC搭建環境,硬件實驗平臺中電腦CPU為Intel Core 2.66GHz,Memory為2G/4G,240G硬盤,通過100Mbps交換機局域網連接。數據集為1億個1kB,2000萬個5kB,200萬個50kB,100萬個200kB,20萬個1MB,2萬個10MB,1千個100MB文件。
3.2性能對比
現有的各種各樣分布式文件系統具有不同的性能特點,它們的功能也不盡相同。為了在具體領域更好地掌握和應用適合的分布式文件系統,本文從文件系統的幾個主要方面進行了詳細的比較分析。分析結果如表1所示。
從表1中,可以清楚地看到分布式文件系統各自的特點。在支持操作系統方面,各個系統都支持Linux操作系統,部分系統還支持Unix操作系統;在系統類型方面,HDFS等專用分布式文件系統具有較好的性能和較低的復雜度,而通用分布式文件系統在訪問方式上提供標準API,還支持FUSE,可以管理分布式文件系統如同管理本地文件系統一樣;在容錯方面,Lustre在存儲服務器上使用磁盤陣列,啟用備用元數據管理服務器;HDFS和MooseFS在存儲服務器上備份文件,在元數據日志服務器上備份日志,用于恢復元數據服務器;FastDFS和MogilesFS也在存儲服務器上備份數據,在多個調度服務器上采用負載均衡策略。它們也有很多相似的地方,比如都支持在Linux操作系統上部署,都采用全局的命名空間,都有很好的可擴展性等。
在元數據管理節點方面,FastDFS和MogileFS有多個調度服務器,并發訪問能力比較突出,Lustre有兩個元數據管理服務器,其中一個是活動服務器宕機后自動啟動的后備服務器,有效地解決了單點依賴問題,而HDFS、MooseFS和改進HDFS只有一個元數據管理服務器,存在單點依賴問題,而且元數據都保存在內存中,當文件數量超過一定范圍時,還會遇到內存瓶頸;在元數據占用內存方面,HDFS每個文件元數據占用內存大約150~200Byte之間,MooseFS每個元數據大約300Byte,而且隨著文件數量增加內存占用也越大;Lustre元數據只占用4Byte左右,當文件數量超過2000萬,內存占用也隨之增大;改進HDFS內存占用與文件數量關系不大,隨著文件數據增大稍微增長,當文件數量達到6000萬,內存性能與Lustre持平。元數據內存占用情況如圖4所示。
在文件存取方面,HDFS和MogileFS通常用來存儲靜態大文件,而MooseFS和改進HDFS可以存儲各種文件,存儲的文件一般不需要修改,只提供下載服務;FastDFS一般用于存儲音頻、視頻和文檔等,文件比較小,所以不分塊存儲文件,以文件為單位來存儲;而Lustre以分條的方式存儲文件,主要存儲密集型數據,進行高性能計算;相對于HDFS,改進的HDFS平均讀寫速度增加了一倍左右,讀速度略高于Lustre,但寫速度略遜于Lustre。文件系統讀寫平均速度如圖5所示。
4、結束語
云存儲是近年來被廣泛應用的新技術,可以廣泛應用于一些重要的領域,如氣象領域、視頻分享網站等,因此分布式文件系統也引來了更多的關注,在學術界和工業界都有很多的分布式文件系統。如何選擇合適的分布式文件系統是一個大問題,本文在架構、訪問方式、文件存儲方式等方面進行了詳細的對比,并對HDFS在I/O性能方面進行了改進,根據這些信息,用戶可以合理地選擇分布式文件系統。雖然各個分布式文件系統有各自的優勢和特點,但還有一些亟待解決的問題,下一步將進一步解決單元數據管理服務器依賴問題、多調度服務器負載均衡問題、系統容錯機制和并發讀寫等。
轉載請注明出處:拓步ERP資訊網http://www.lukmueng.com/
本文標題:云存儲文件系統對比