需求按優先級順序以下:html
1)存放3TB以上中小型文件,圖片爲主,平均在500~700k,通常在1M之內。java
2)要集羣化,支持負載均衡,高可用高性能。有大企業使用背書最好。nginx
3)提供Java程序上傳文件的手段。Java代碼能夠在Windows環境下調試。git
4)必須開源,做者能保持更新。github
5)有運維監控手段,能快速定位出問題的服務器。算法
6)(加分項)新增存儲服務器時,不須要更改Nginx負載均衡和Java程序的配置。docker
看了一大堆資料,沒完美的解決方案,稍爲符合的候選者只有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 方式存放。 http://www.javashuo.com/tag/filer能夠上傳到指定目錄。但因爲java的sdk都是直連master與volume,因此研發/測試環境不能共用同一臺文件服務器。 http://www.javashuo.com/tag/filer支持文件列表,但不支持FUSE |
集羣由多臺http://www.javashuo.com/tag/master與多臺http://www.javashuo.com/tag/Volume服務器組成。volume之間的複製行爲由複製策略所決定。 支持多機房,多種複製策略。 |
PB級存儲方案 增長volume服務器能增長容量,但有效增長多少與複製策略有關。 |
支持預壓縮成gzip格式文件,直接吐流成gzip | 支持etag,If-Modified-Since等 | 語言SDK:實際全部SDK上都是經過REST接口訪問。有Java版本。 REST接口:http://www.javashuo.com/tag/Volume與http://www.javashuo.com/tag/filer服務器提供不一樣層級的接口,volume是key-value方式的,filer是相似目錄的方式。 http讀文件:http://www.javashuo.com/tag/filer服務器提供 |
綜合來講,想簡單易上手,seaweedfs的生態圈比較齊全,並且做者一直在更新。FastDFS也是不錯的選擇。