分佈式文件系統選型小記

分佈式文件系統選型小記

Q&A

分佈式文件系統是什麼?

  • 分佈式文件系統(Distributed File System,DFS)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,是通過計算機網絡與節點(可簡單的理解爲一臺計算機)相連。

爲什麼要使用分佈式文件系統?

  • 提高擴展能力,避免單點故障。

如何找到適合自己的分佈式文件系統?

  • 對分佈式文件系統進行相關調研選型。

本文主要是介紹分佈式文件系統的選型,關於定義和爲何使用,請查詢相關資料。

需求說明

目前要找的文件系統至少滿足以下條件:

  • 寫相對多、讀相對多、從不修改、基本不刪除
  • 能夠存儲海量大於100M的文件
  • 非常穩定、高可用、可擴容、可運維部署
  • 上手簡單、易維護、社區相對活躍

常用分佈文件系統概述

第一輪篩選

常用分佈式文件系統有:GFS、TFS、BFS、HDFS、Ceph、MinIO、MogileFS、MooseFS、FastDFS、GridFS等。

1.GFS(Google File System)
Google公司爲了滿足本公司需求而開發的基於Linux的專有分佈式文件系統。但是Google並沒開源,我們暫時不考慮。

2.TFS是一個高可擴展、高可用、高性能、面向互聯網服務的分佈式文件系統,主要針對海量的非結構化數據,可爲外部提供高可靠和高併發的存儲訪問。TFS爲淘寶提供海量小文件存儲,通常文件大小不超過1M,所以我們暫時也不考慮。

3.BFS是一個高吞吐量、低延遲、高容錯性、高效維護簡單的小文件系統,是基於facebook haystack 用golang實現。 bfs 更適合圖片存儲,小文件存儲所以暫時不考慮。

參考鏈接:https://www.toutiao.com/i6272104949560115714/

4.MooseFS
支持FUSE,相對比較輕量級,對master服務器有單點依賴,用perl編寫,性能相對較差,由於可能會實時訪問所以暫時也不考慮。

參考鏈接:
https://moosefs.com
https://www.cnblogs.com/hjc4025/p/9956988.html

5.MogileFS
由memcahed的開發公司danga一款perl開發的產品,目前國內使用mogielFS的有圖片託管網站yupoo等。MogileFS是一套高效的文件自動備份組件,由Six Apart開發,廣泛應用在包括LiveJournal等web2.0站點上。

參考鏈接:https://github.com/mogilefs

6.HDFS(Hadoop Distributed File System)
Hadoop 實現了一個分佈式文件系統,簡稱HDFS。Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網絡搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapReduce算法的一種開源應用,是Google開創其帝國的重要基石。

7.FastDFS
由淘寶的餘慶先生所開發的一個輕量級、高性能、純C語言開發的開源分佈式文件系統。它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。適合以文件爲載體的在線服務,如視頻網站等等。

參考鏈接:https://github.com/happyfish100/fastdfs

8.Minio
是一個基於Go語言的對象存儲服務。它實現了大部分亞馬遜S3雲存儲服務接口,可以看做是是S3的開源版本,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。區別於分佈式存儲系統,minio的特色在於簡單、輕量級,對開發者友好,認爲存儲應該是一個開發問題而不是一個運維問題。

參考鏈接:
https://docs.min.io/cn
https://blog.csdn.net/tianshan2010

9.Ceph
是加州大學聖克魯茲分校的Sage Weil攻讀博士時開發的分佈式文件系統。
由於 ceph 使用 btrfs 文件系統, 而btrfs 文件系統需要 Linux 2.6.34 以上的內核才支持。ceph目前還不足夠成熟,它基於的btrfs本身也不成熟,它的官方網站上也明確指出不要把ceph用在生產環境中。

參考鏈接:
https://github.com/ceph/ceph
https://ceph.com

10.GridFS
MongoDB是一種知名的NoSql數據庫,GridFS是MongoDB的一個內置功能,它提供一組文件操作的API以利用MongoDB存儲文件,GridFS的基本原理是將文件保存在兩個Collection中,一個保存文件索引,一個保存文件內容,文件內容按一定大小分成若干塊,每一塊存在一個Document中,這種方法不僅提供了文件存儲,還提供了對文件相關的一些附加屬性(比如MD5值,文件名等等)的存儲。

參考鏈接:
https://docs.mongodb.com/manual/core/gridfs/
https://www.jianshu.com/p/d135aa7dfe9c

幾種備選分佈式文件系統比較

存儲系統 HDFS FastDFS MinIO Ceph GridFS
開發語言 Java C Go C++ C++
開源協議 Apache GPL V3 Apache V2 LGPL
存儲方式 文件(偏大) 文件/快 文件 對象/文件塊 塊/文檔
在線擴容/冗餘備份/單點故障 支持/支持/存在 支持/支持/不存在 暫時不支持/支持/不存在 支持/支持/不存在 支持/支持/不存在
易用性 安裝簡單,官方文檔專業化 安裝簡單,社區相對活躍 安裝簡單,無中文社區 安裝簡單,官方文檔專業化 安裝簡單
優點 大數據批量讀寫,吞吐量高 支持主從文件,支持自定義擴展名;主備Tracker服務,增強系統的可用性 簡約的對象存儲服務器系統,這是一種輕量級、高度併發的解決方案 分佈式,沒有單點依賴,用C編寫,性能較好 可以訪問部分文件,而不用向內存中加載全部文件,從而保持高性能;文件和元數據自動同步

分類篩選

第二輪篩選

適合做通用文件系統的有:Ceph、MooseFS、MinIO;
適合做中小文件存儲的文件系統有:Ceph、FastDFS、MinIO;
適合做大文件存儲的文件系統有:HDFS、MinIO、Ceph、GridFS;
輕量級文件系統有:FastDFS、MinIO;
簡單易用,用戶活躍的文件系統有:HDFS、FastDFS;
綜上:Ceph目前不夠成熟穩定,官方也明確指出不要把ceph用在生產環境中,暫不考慮;
經初步篩選剩下的文件系統有:HDFS、FastDFS、MinIO、GridFS。

第三輪步篩選

MinIO:上手簡單,適合存儲大容量非結構化的數據, 基本滿足當前業務需求但是目前沒有中文社區。
FastDFS:功能精簡,支持在線擴容、冗餘備份,部分支持跨集羣同步,不存在單點故障,性能較好。但是不支持FUSE掛載和POSIX訪問接口。
HDFS:適合批量數據處理.可以部署在廉價的機器上。可以部署在廉價的機器上,但是不適合大量小文件,通過犧牲響應延時來換取高的吞吐量。
GridFS:能夠簡化技術棧,如果已經使用了MongoDB,那麼使用GridFS,就不需要其它獨
立的存儲工具了(很遺憾我們當前還沒有引入MongoDB),不過性能不如直接訪問文件系統快。無法修改文檔。如果要修改GridFS裏面的文檔,只能是先刪除再添加(對我們當前業務沒有影響)

綜述

目前提供的建議選型參考爲FastDFS或MinIO,
如果想減少技術棧的話可以考慮HDFS或GridFS,
如果不在乎響應時間可以考慮HDFS。

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章