天天看點

盤點分布式檔案存儲系統

在項目的資料存儲中,結構化資料通常采用關系型資料庫,非結構化資料(檔案)的存儲就有很多種方式,伺服器本地存儲、Nas挂載、ftp等等,今天就來盤點一下,分布式檔案存儲系統。

一、分布式存儲簡介

1、什麼是分布式存儲

在開始介紹分布式存儲之前,先了解一下,非分布式的存儲方案。

在單機時代,将檔案直接存儲在服務部署的伺服器上——

  • 直連存儲(DAS):存儲和資料直連,拓展性、靈活性差。

為了擴充,将檔案和服務分離,通過網絡連接配接——

  • 中心化存儲(NAS、SAN):裝置類型豐富,通過網絡互連,具有一定的拓展性,但是受到控制器能力限制,拓展能力有限。同時,裝置到了生命周期要進行更換,資料遷移需要耗費大量的時間和精力。
盤點分布式檔案存儲系統

分布式存儲:通過網絡使用企業中的每台機器上的磁盤空間,并将這些分散的存儲資源構成一個虛拟的儲存設備,資料分散的存儲在企業的各個角落。

盤點分布式檔案存儲系統

2、分布式存儲的優勢

可擴充:分布式存儲系統可以擴充到數百甚至數千個這樣的叢集大小,并且系統的整體性能可以線性增長。

高可用性:在分布式檔案系統中,高可用性包含兩層,一是整個檔案系統的可用性,二是資料的完整和一緻性

低成本:分布式存儲系統的自動容錯和自動負載平衡允許在成本較低伺服器上建構分布式存儲系統。此外,線性可擴充性還能夠增加和降低伺服器的成本。

彈性存儲: 可以根據業務需要靈活地增加或縮減資料存儲以及增删存儲池中的資源,而不需要中斷系統運作

二、主流分布式檔案存儲系統

目前主流的分布式檔案系統有:GFS、HDFS、Ceph、Lustre、MogileFS、MooseFS、FastDFS、TFS、GridFS等。

1、GFS(Google File System)

​ Google公司為了滿足本公司需求而開發的基于Linux的專有分布式檔案系統。盡管Google公布了該系統的一些技術細節,但Google并沒有将該系統的軟體部分作為開源軟體釋出。

2、HDFS(Hadoop Distributed File System)

​ HDFS(Hadoop Distributed File System)是 Hadoop 項目的一個子項目。是 Hadoop 的核心元件之一, Hadoop 非常适于存儲大型資料 (比如 TB 和 PB),其就是使用 HDFS 作為存儲系統. HDFS 使用多台計算機存儲檔案,并且提供統一的通路接口,像是通路一個普通檔案系統一樣使用分布式檔案系統。

盤點分布式檔案存儲系統

3、TFS(Taobao FileSystem)

​ TFS是一個高可擴充、高可用、高性能、面向網際網路服務的分布式檔案系統,主要針對海量的非結構化資料,它構築在普通的Linux機器 叢集上,可為外部提供高可靠和高并發的存儲通路。TFS為淘寶提供海量小檔案存儲,通常檔案大小不超過1M,滿足了淘寶對小檔案存儲的需求,被廣泛地應用在淘寶各項應用中。它采用了HA架構和平滑擴容,保證了整個檔案系統的可用性和擴充性。同時扁平化的資料組織結構,可将檔案名映射到檔案的實體位址,簡化 了檔案的通路流程,一定程度上為TFS提供了良好的讀寫性能。

4、Lustre

Lustre是一個大規模的、安全可靠的,具備高可用性的叢集檔案系統,它是由SUN公司開發和維護的。該項目主要的目的就是開發下一代的叢集檔案系統,可以支援超過10000個節點,數以PB的資料量存儲系統。目前Lustre已經運用在一些領域,例如HP SFS産品等。

5、 MooseFS

MooseFS是一款相對小衆的分布式檔案系統,不需要修改上層應用接口即可直接使用,支援FUSE的操作方式,部署簡單并提供Web界面的方式進行管理與監控,同其他分布式作業系統一樣,支援線上擴容,并進行橫向擴充。MooseFS還具有可找回誤操作删除的檔案,相當于一個資源回收筒,友善業務進行定制;同時MooseFS對于海量小檔案的讀寫要比大檔案讀寫的效率高的多。

但MooseFS的缺點同樣明顯,MFS的主備架構情況類似于MySQL的主從複制,從可以擴充,主卻不容易擴充。短期的對策就是按照業務來做切分,随着MFS體系架構中存儲檔案的總數上升,Master Server對記憶體的需求量會不斷增大。并且對于其單點問題官方自帶的是把資料資訊從Master Server同步到Metalogger Server上,Master Server一旦出問題Metalogger Server可以恢複更新為Master Server,但是需要恢複時間。目前,也可以通過第三方的高可用方案(heartbeat+drbd+moosefs)來解決 Master Server 的單點問題。

6、MogileFS

由memcahed的開發公司danga一款perl開發的産品,目前國内使用mogielFS的有圖檔托管網站yupoo等。MogileFS是一套高效的檔案自動備份元件,由Six Apart開發,廣泛應用在包括LiveJournal等web2.0站點上。

7. FastDFS

是一款類似Google FS的開源分布式檔案系統,是純C語言開發的。FastDFS是一個開源的輕量級分布式檔案系統,它對檔案進行管理,功能包括:檔案存儲、檔案同步、檔案通路(檔案上傳、檔案下載下傳)等,解決了大容量存儲和負載均衡的問題。特别适合以檔案為載體的線上服務,如相冊網站、視訊網站等等。

8、GlusterFS

開源分布式橫向擴充檔案系統,可以根據存儲需求快速調配存儲,内含豐富的自動故障轉移功能,且擯棄集中中繼資料伺服器的思想。适用于資料密集型任務的可擴充網絡檔案系統,具有可擴充性、高性能、高可用性等特點。gluster于2011年10月7日被Red Hat收購。

9、 GridFS

MongoDB是知名的NoSQL資料庫,GridFS是MongoDB的一個内置功能,它提供一組檔案操作的API以利用MongoDB存儲檔案,GridFS的基本原理是将檔案儲存在兩個Collection中,一個儲存檔案索引,一個儲存檔案内容,檔案内容按一定大小分成若幹塊,每一塊存在一個Document中,這種方法不僅提供了檔案存儲,還提供了對檔案相關的一些附加屬性(比如MD5值,檔案名等等)的存儲。檔案在GridFS中會按4MB為機關進行分塊存儲。

盤點分布式檔案存儲系統

三、分布式檔案系統的對比

1、整體對比

檔案系統 開發者 開發語言 開源協定 易用性 适用場景 特性 缺點
GFS Google 不開源
HDFS Apache Java 安裝簡單,官方文檔專業化 存儲非常大的檔案 大資料批量讀寫,吞吐量高;一次寫入,多次讀取,順序讀寫 難以滿足毫秒級别的低延時資料通路;不支援多使用者并發寫相同檔案;不适用于大量小檔案
Ceph 加州大學聖克魯茲分校Sage Weil C++ LGPL 單叢集的大中小檔案 分布式,沒有單點依賴,用C編寫,性能較好 基于不成熟的btrfs,自身也不夠成熟穩定,不推薦在生産環境使用
TFS Alibaba GPL V2 安裝複雜,官方文檔少 跨叢集的小檔案 針對小檔案量身定做,随機IO性能比較高;實作了軟RAID,增強系統的并發處理能力及資料容錯恢複能力;支援主備熱倒換,提升系統的可用性;支援主從叢集部署,從叢集主要提供讀/備功能 不适合大檔案的存儲;不支援POSIX,通用性較低;不支援自定義目錄結構與檔案權限控制;通過API下載下傳,存在單點的性能瓶頸;官方文檔少,學習成本高
Lustre SUN C GPL 複雜,而且嚴重依賴核心,需要重新編譯核心 大檔案讀寫 企業級産品,非常龐大,對核心和ext3深度依賴
MooseFS Core Sp. z o.o. GPL V3 安裝簡單,官方文檔多,且提供Web界面的方式進行管理與監控 大量小檔案讀寫 比較輕量級,用perl編寫,國内用的人比較多 對master伺服器有單點依賴,性能相對較差
MogileFS Danga Interactive Perl 主要用在web領域處理海量小圖檔 key-value型元檔案系統;效率相比mooseFS高很多 不支援FUSE
FastDFS 國内開發者餘慶 安裝簡單,社群相對活躍 單叢集的中小檔案 系統無需支援POSIX,降低了系統的複雜度,處理效率更高;實作了軟RAID,增強系統的并發處理能力及資料容錯恢複能力;支援主從檔案,支援自定義擴充名;主備Tracker服務,增強系統的可用性 不支援斷點續傳,不适合大檔案存儲;不支援POSIX,通用性較低;對跨公網的檔案同步,存在較大延遲,需要應用做相應的容錯政策;同步機制不支援檔案正确性校驗;通過API下載下傳,存在單點的性能瓶頸
GlusterFS Z RESEARCH 适合大檔案,小檔案性能還存在很大優化空間 無中繼資料伺服器,堆棧式架構(基本功能子產品可以進行堆棧式組合,實作強大功能),具有線性橫向擴充能力;比mooseFS龐大 由于沒有中繼資料伺服器,是以增加了用戶端的負載,占用相當的CPU和記憶體;但周遊檔案目錄時,則實作較為複雜和低效,需要搜尋所有的存儲節點,不建議使用較深的路徑
GridFS MongoDB 安裝簡單 通常用來處理大檔案(超過16M) 可以通路部分檔案,而不用向記憶體中加載全部檔案,進而保持高性能;檔案和中繼資料自動同步

2、 特性對比

資料存儲方式 叢集節點通訊協定 專用中繼資料存儲點 線上擴容 備援備份 單點故障 跨叢集同步 FUSE挂載 通路接口
檔案 私有協定(TCP) 占用MDS 支援 存在 不支援 不支援POSIX
對象/檔案/塊 POSIX
對象 私有協定(TCP)/ RDAM(遠端直接通路記憶體) 雙MDS 未知 POSIX/MPI
占用MFS
HTTP 占用DB
檔案/塊 不存在 部分支援
私有協定(TCP)/RDAM(遠端直接通路記憶體)
占用NS

什麼是POSIX?

POSIX表示可移植作業系統接口(Portable Operating System Interface of UNIX,縮寫為 POSIX ),也就是Unix下應用程式共同遵循的一種規範。支援POSIX的應用程式意味着在各個Unix系統間提供了跨平台運作的支援。

四、選型參考

  • 适合做通用檔案系統的有:Ceph,Lustre,MooseFS,GlusterFS;
  • 适合做小檔案存儲的檔案系統有:Ceph,MooseFS,MogileFS,FastDFS,TFS;
  • 适合做大檔案存儲的檔案系統有:HDFS,Ceph,Lustre,GlusterFS,GridFS;
  • 輕量級檔案系統有:MooseFS,FastDFS;
  • 簡單易用,使用者數量活躍的檔案系統有:MooseFS,MogileFS,FastDFS,GlusterFS;
  • 支援FUSE挂載的檔案系統有:HDFS,Ceph,Lustre,MooseFS,GlusterFS。
參考:

【1】:分布式檔案系統對比與選型參考

【2】:隻知道HDFS和GFS?你其實并不懂分布式檔案系統

【3】:分布式存儲主流架構

【4】:如果要設計個分布式檔案系統,該從哪些方面考慮?

【5】: 常見分布式檔案存儲介紹、選型比較、架構設計

【6】:分布式檔案系統對比與選型參考

【7】:中小企業存儲:DAS、NAS和SAN的選擇

【8】:從DAS到分布式存儲,存儲形式總結

繼續閱讀