FastDFS是由國人餘慶所開發,是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。前端
FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。- 來源百科git
maven依賴github
<dependencies> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.25.2-RELEASE</version> </dependency> </dependencies>
bootstrap.yml配置bootstrap
fdfs: soTimeout: 30000 connectTimeout: 20000 thumbImage: width: 150 height: 150 trackerList: - 192.168.1.156:22122
定義配置類及客戶端操做類瀏覽器
@Configuration @Import(FdfsClientConfig.class) public class FastDFSConfig { }
定義客戶端操做類:FastDFSClient服務器
FastDFSClient提供上傳、下載、刪除、獲取元數據等接口。網絡
文件上傳架構
文件下載負載均衡
獲取組元數據maven
刪除文件
接口層Controller
上傳接口接收到前端上傳文件請求並獲取MultipartFile文件對象,經過fdw.uploadFile(file)上傳到 192.168.1.156文件服務器。
MultipartFile file = request.getFile(iter.next()); fdw.uploadFile(file);
若是文件上傳成功,會返回圖片存儲相對路徑。
group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png
通常文件上傳到fastdfs文件服務器是免密訪問的,若是知道文件路徑能夠在瀏覽器直接訪問。
示例代碼
示例
group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png
參數說明
FastDFS部署架構
來源網絡
FastDFS有兩種角色:tracker和storage。
tracker負責文件訪問的跟蹤和負載均衡。storage負責存儲文件,它的功能包括:文件存儲、文件同步、提供文件訪問接口,storage還負責管理文件的元數據,這些數據是以鍵值對的形式表示的,如:width=1024,鍵是「width」,值是「1024」。
全部服務器都是對等的,不存在Master-Slave關係,存儲服務器採用分組方式,同組內存儲服務器上的文件徹底相同,不一樣組的storage server之間不會相互通訊。
tracker和storage能夠是一個或多個服務器。在tracker或storage的集羣中,任什麼時候候均可以從中刪除服務器,對線上服務沒有任何影響。tracker集羣中的服務器是點對點的。由storage server主動向tracker server報告狀態信息,tracker server之間一般不會相互通訊
卷/組
存儲服務器以 卷/組 形式組織,以獲取高容量。存儲系統包括一個或多個卷,卷與卷之間的文件是相互獨立的。整個存儲系統的總容量等於全部卷的容量之和。一個文件捲包括一個或多個存儲服務器,一個卷中的存儲服務器之間的文件是同樣的。一個文件卷中的服務器會互相備份,且這些服務器之間是負載均衡的。當添加一個存儲服務器到一個卷的時候,卷中的文件會自動複製到新的服務器,複製完之後,系統會把新服務器切換到線上,已提供存儲服務。
當存儲容量不足時,你能夠添加一個或多個捲來擴展存儲容量。一個文件的標識包括兩部分:卷名和文件名
目前FastDFS不支持可視化管理界面維護,同時用戶在把文件上傳的服務器時,原來的文件名變成了FastDFS自創的hash文件名,因此若是有須要,能夠在業務層表設計存儲源文件名與hash名的對應關係。