- 分布式文件系統
|
|
|
|
|
|
|
|
分布式文件系統,作為網盤的基礎,應用底層文件管理。而分布式文件系統之上,用戶文件的權限,用戶目錄管理都是由非分布式文件系統管理。
分布式文件系統需要關心的主要內容:
- 文件分布/數據分布:文件是否分片,文件存儲按照什么算法來存儲(DHT)
- 冗余保護/副本:是否有綴於,綴於是否可以回復。
- 數據可靠性:當數據出現問題,是否可以發現,如何回復。
- 備份:如何提供被被封工作。
- 故障恢復:出現問題是否可以回復。
- 擴展性:當容量不夠時,是否可以無限增加容量。
- 安裝/部署:是否需要修改內核,部署是否方便。
- 開發語言:是否使用常用開發語言。
- 適合場景:對不同文件大小有常用的支持。
除了一下文件系統,還有HDFS等分布式文件存儲系統,MongoDB的GridFs等文件系統。
|
MooseFS(MFS) |
Ceph(Swfit) |
GlusterFS(類似的有FastDFS) |
Lustre |
Metadata server |
單個MDS。存在單點故障和瓶頸。 |
多個MDS,不存在單點故障和瓶頸。MDS可以擴展,不存在瓶頸。 |
無,不存在單點故障。靠運行在各個節點上的動態算法來代替MDS,不需同步元數據,無硬盤I/O瓶頸。 |
雙MDS(互相備份)。MDS不可以擴展,存在瓶頸。 |
FUSE(用戶態文件訪問) |
支持 |
支持 |
支持 |
支持 |
訪問接口 |
POSIX |
POSIX |
POSIX |
POSIX/MPI |
文件分布/數據分布 |
文件被分片,數據塊保存在不同的存儲服務器上。 |
文件被分片,每個數據塊是一個對象。對象保存在不同的存儲服務器上。 |
Cluster Translators(GlusterFS集群存儲的核心)包括AFR、DHT(和Stripe三種類型。 AFR相當於RAID1,每個文件都被復制到多個存儲節點上。Stripe相當於RAID0,文件被分片,數據被條帶化到各個存儲節點上。 Translators可以組合,即AFR和stripe可以組成RAID10,實現高性能和高可用。 |
可以把大文件分片並以類似RAID0的方式分散存儲在多個存儲節點上。 |
冗余保護/副本 |
多副本 |
多副本 |
鏡像 |
無 |
數據可靠性 |
由數據的多副本提供可靠性。 |
由數據的多副本提供可靠性。 |
由鏡像提供可靠性。 |
由存儲節點上的RAID1或RAID5/6提供可靠性。假如存儲節點失效,則數據不可用。 |
備份 |
|
|
|
提供備份工具。支持遠程備份。 |
故障恢復 |
手動恢復 |
當節點失效時,自動遷移數據、重新復制副本。 |
當節點、硬件、磁盤、網絡發生故障時,系統會自動處理這些故障,管理員不需介入。 |
無 |
擴展性 |
增加存儲服務器,可以提高容量和文件操作性能。但是由於不能增加MDS,因此元數據操作性能不能提高,是整個系統的瓶頸。 |
可以增加元數據服務器和存儲節點。容量可擴展。文件操作性能可擴展。元數據操作性能可擴展。 |
容量可擴展。 |
可增加存儲節點,提高容量可文件操作性能,但是由於不能增加MDS,因此元數據操作性能不能提高,是整個系統的瓶頸。 |
安裝/部署 |
簡單 |
簡單 |
簡單 |
復雜。而且Lustre嚴重依賴內核,需要重新編譯內核。 |
開發語言 |
C |
C++ |
C |
C |
適合場景 |
大量小文件讀寫 |
小文件 |
適合大文件。 對於小文件,無元數據服務設計解決了元數據的問題。但GlusterFS並沒有在I/O方面作優化,在存儲服務器底層文件系統上仍然是大量小文件,本地文件系統元數據訪問是瓶頸,數據分布和並行性也無法充分發揮作用。因此,GlusterFS的小文件性能還存在很大優化空間。 |
大文件讀寫 |
產品級別 |
小型 |
中型 |
中型 |
重型 |
應用 |
國內較多 |
無 |
較多用戶使用 |
HPC領域。 |
優缺點 |
實施簡單,但是存在單點故障。 |
不穩定,目前還在實驗階段,不適合於生產環境。 |
無元數據服務器,堆棧式架構(基本功能模塊可以進行堆棧式組合,實現強大功能)。具有線性橫向擴展能力。
由於沒有元數據服務器,因此增加了客戶端的負載,占用相當的CPU和內存。 但遍歷文件目錄時,則實現較為復雜和低效,需要搜索所有的存儲節點。因此不建議使用較深的路徑。 |
很成熟、很龐大。 |
- 雲存儲平台學習
- Seafile
包含:群組功能,用戶可以創建和加入群組, 在群組中共享文件。這對團隊協作很有用。
文件組織成資料庫。每個資料庫可以單獨同步和共享。
在線文件協作,包括文件在線預覽、評論、推薦等等。 Markdown, text,源代碼等文本格式可以直接在線編輯。
SeaFile主要是“文件屬性、路徑管理系統”。底層存儲系統可以采用Swift和Cept。
- 360等網盤底層
lustre更加適合分布式運算方面的,比如高性能計算節點什么的,在網盤業務這塊,個人覺得mooseFS、glusterfs更加靠譜一些吧。Lustre不適合做類似網盤的使用。首先Lustre沒有磁盤容錯功能;即使實現服務容錯也需要交叉互連的盤陣,構建成本較高。其次我認為在網盤服務中,對於存儲系統不需要有太強的一致性語義;而lustre采用的是POSIX強一致性語義。lustre靠的數據分條來提高IO性能的,不知道這個和網盤的IO訪問模式是否兼容。還有就是lustre是內核態系統,比較復雜,維護較困難。
115網盤用了fastdfs
http://blog.csdn.net/wugeiswuge/article/details/19159055