在項目的數據存儲中,結構化數據通常采用關系型數據庫,非結構化數據(文件)的存儲就有很多種方式,服務器本地存儲、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 | 不開源 | ||||||
HDFS | Apache | Java | Apache | 安裝簡單,官方文檔專業化 | 存儲非常大的文件 | 大數據批量讀寫,吞吐量高;一次寫入,多次讀取,順序讀寫 | 難以滿足毫秒級別的低延時數據訪問;不支持多用戶並發寫相同文件;不適用於大量小文件 |
Ceph | 加州大學聖克魯茲分校Sage Weil | C++ | LGPL | 安裝簡單,官方文檔專業化 | 單集群的大中小文件 | 分布式,沒有單點依賴,用C編寫,性能較好 | 基於不成熟的btrfs,自身也不夠成熟穩定,不推薦在生產環境使用 |
TFS | Alibaba | C++ | GPL V2 | 安裝復雜,官方文檔少 | 跨集群的小文件 | 針對小文件量身定做,隨機IO性能比較高;實現了軟RAID,增強系統的並發處理能力及數據容錯恢復能力;支持主備熱倒換,提升系統的可用性;支持主從集群部署,從集群主要提供讀/備功能 | 不適合大文件的存儲;不支持POSIX,通用性較低;不支持自定義目錄結構與文件權限控制;通過API下載,存在單點的性能瓶頸;官方文檔少,學習成本高 |
Lustre | SUN | C | GPL | 復雜,而且嚴重依賴內核,需要重新編譯內核 | 大文件讀寫 | 企業級產品,非常龐大,對內核和ext3深度依賴 | |
MooseFS | Core Sp. z o.o. | C | GPL V3 | 安裝簡單,官方文檔多,且提供Web界面的方式進行管理與監控 | 大量小文件讀寫 | 比較輕量級,用perl編寫,國內用的人比較多 | 對master服務器有單點依賴,性能相對較差 |
MogileFS | Danga Interactive | Perl | GPL | 主要用在web領域處理海量小圖片 | key-value型元文件系統;效率相比mooseFS高很多 | 不支持FUSE | |
FastDFS | 國內開發者余慶 | C | GPL V3 | 安裝簡單,社區相對活躍 | 單集群的中小文件 | 系統無需支持POSIX,降低了系統的復雜度,處理效率更高;實現了軟RAID,增強系統的並發處理能力及數據容錯恢復能力;支持主從文件,支持自定義擴展名;主備Tracker服務,增強系統的可用性 | 不支持斷點續傳,不適合大文件存儲;不支持POSIX,通用性較低;對跨公網的文件同步,存在較大延遲,需要應用做相應的容錯策略;同步機制不支持文件正確性校驗;通過API下載,存在單點的性能瓶頸 |
GlusterFS | Z RESEARCH | C | GPL V3 | 安裝簡單,官方文檔專業化 | 適合大文件,小文件性能還存在很大優化空間 | 無元數據服務器,堆棧式架構(基本功能模塊可以進行堆棧式組合,實現強大功能),具有線性橫向擴展能力;比mooseFS龐大 | 由於沒有元數據服務器,因此增加了客戶端的負載,占用相當的CPU和內存;但遍歷文件目錄時,則實現較為復雜和低效,需要搜索所有的存儲節點,不建議使用較深的路徑 |
GridFS | MongoDB | C++ | 安裝簡單 | 通常用來處理大文件(超過16M) | 可以訪問部分文件,而不用向內存中加載全部文件,從而保持高性能;文件和元數據自動同步 |
2、 特性對比
文件系統 | 數據存儲方式 | 集群節點通訊協議 | 專用元數據存儲點 | 在線擴容 | 冗余備份 | 單點故障 | 跨集群同步 | FUSE掛載 | 訪問接口 |
---|---|---|---|---|---|---|---|---|---|
HDFS | 文件 | 私有協議(TCP) | 占用MDS | 支持 | 存在 | 不支持 | 支持 | 不支持POSIX | |
Ceph | 對象/文件/塊 | 私有協議(TCP) | 占用MDS | 支持 | 支持 | 存在 | 不支持 | 支持 | POSIX |
Lustre | 對象 | 私有協議(TCP)/ RDAM(遠程直接訪問內存) | 雙MDS | 支持 | 不支持 | 存在 | 未知 | 支持 | POSIX/MPI |
MooseFS | 塊 | 私有協議(TCP) | 占用MFS | 支持 | 支持 | 存在 | 不支持 | 支持 | POSIX |
MogileFS | 文件 | HTTP | 占用DB | 支持 | 不支持 | 存在 | 不支持 | 不支持 | 不支持POSIX |
FastDFS | 文件/塊 | 私有協議(TCP) | 無 | 支持 | 支持 | 不存在 | 部分支持 | 不支持 | 不支持POSIX |
GlusterFS | 文件/塊 | 私有協議(TCP)/RDAM(遠程直接訪問內存) | 無 | 支持 | 支持 | 不存在 | 支持 | 支持 | POSIX |
TFS | 文件 | 私有協議(TCP) | 占用NS | 支持 | 支持 | 存在 | 支持 | 未知 | 不支持POSIX |
什么是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】:分布式文件系統對比與選型參考
【3】:分布式存儲主流框架
【6】:分布式文件系統對比與選型參考