需求按優先順序順序如下: 1)存放3TB以上中小型文件,圖片為主,平均在500~700k,一般在1M以內。 2)要集群化,支持負載均衡,高可用高性能。有大企業使用背書最好。 3)提供Java程式上傳文件的手段。Java代碼可以在Windows環境下調試。 4)必須開源,作者能保持更新。 5)有運維監控 ...
需求按優先順序順序如下:
1)存放3TB以上中小型文件,圖片為主,平均在500~700k,一般在1M以內。
2)要集群化,支持負載均衡,高可用高性能。有大企業使用背書最好。
3)提供Java程式上傳文件的手段。Java代碼可以在Windows環境下調試。
4)必須開源,作者能保持更新。
5)有運維監控手段,能快速定位出問題的伺服器。
6)(加分項)新增存儲伺服器時,不需要更改Nginx負載均衡和Java程式的配置。
看了一大堆資料,沒完美的解決方案,稍為符合的候選者只有3個:
框架 | 簡介 | 文件存放方式 | 支持高可用 | 容量擴展手段 | 瀏覽器 gzip 支持 | 瀏覽器端緩存 | 程式訪問 |
FastDFS |
我知道國內很多創業公司都在用,自己也用了一段時間,比較穩定,網友寫了不少中文資料,但官方幾乎沒有文檔。建議用fastdfs-nginx-module吐流,而不是反向代理直接訪問某個storage伺服器。 運維方面:出現不能訪問時,要查分佈在多個地方的日誌(nginx > nginx fastdfs module >storage > tracker),不熟悉的人不太好查原因。 主頁:https://github.com/happyfish100/fastdfs 部署方式說明:http://blog.csdn.net/xifeijian/article/details/38567839 Docker:https://hub.docker.com/r/hhland/fastdfs/ ,https://hub.docker.com/r/season/fastdfs/ |
key-value 方式存放。 沒有上傳目錄的概念,研發/測試環境需要獨立部署自用的文件伺服器。 不支持文件列表,不支持FUSE |
集群可由多台Tracker與多台Storage伺服器組成。 多台tracker之間沒有集群,由客戶端解決failover問題。 storage伺服器以group為單位組織,同一group下的不同storage伺服器文件完全相同,主要用於負載均衡和容錯,類似硬碟RAID10的方案。 不支持多機房。 |
TB級存儲方案 1.同一storage伺服器可以在配置中指定多個store_path來增加硬碟。 2.支持以group為單位增加伺服器來擴展容量。 3.總容量為所有group加起來 |
由反向代理臨時壓縮 | 支持If-Modified-Since |
語言SDK:通過專用SDK,支持Java。 REST介面:無 http讀文件:可通過storage伺服器的http服務,也可以通過裝了fastdfs-nginx-module的nginx提供。建議使用後者。 |
百度BFS (待研究) |
功能強大,但網上文檔非常少,百度搜索未發現使用經驗文章。介紹說百度整個公司都在用。 主頁:https://github.com/baidu/bfs Docker:提供Dockerfile,但沒放到Docker Hub。 |
目錄方式存放。 支持文件列表,支持FUSE |
集群由NameServer,MetaServer,ChunkServer組成。 NameServer使用raft演算法,依賴Neuxs或Zookeeper選出Leader,失效時自動重選Leader ChuckServer的高可用:待分析 對多機房,多伺服器支持最好。 |
PB級存儲方案
|
待分析 | 待分析 |
語言SDK:通過專用SDK訪問,不支持Java,但可以通過FUSE橋接實現,Windows下估計需要用Cygwin才能訪問。 REST介面:無 http讀文件:NameServer提供訪問。 |
seaweedfs |
功能強大,似乎非常有潛力,中文資料少。Doc中說"中通快遞"在用。 由於沒用過,運維不好說是否方便。 主頁:https://github.com/chrislusf/seaweedfs 部署與使用說明:http://blog.chinaunix.net/uid-25057421-id-5676348.html |
key-value 方式存放。 可以上傳到指定目錄。所以研發/測試環境可以共用同一臺文件伺服器。 filer支持文件列表,但不支持FUSE |
集群由多台master與多台volume伺服器組成。volume之間的複製行為由複製策略所決定。 支持多機房,多種複製策略。 |
PB級存儲方案 增加volume伺服器能增加容量,但有效增加多少與複製策略有關。 |
支持預壓縮成gzip格式文件,直接吐流成gzip | 支持etag,If-Modified-Since等 |
語言SDK:實際所有SDK上都是通過REST介面訪問。有Java版本。 REST介面:volume與filer伺服器提供不同層級的介面,volume是key-value方式的,filer是類似目錄的方式。 http讀文件:filer伺服器提供 |
綜合來說,想簡單易上手,seaweedfs的生態圈比較齊全,而且作者一直在更新。FastDFS也是不錯的選擇。