微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

什麼是FastDFS

FastDFS是由國人餘慶所開發,是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。前端

FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。- 來源百科git

SpringCloud集成FastDFS

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服務器

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

FastDFSClient提供上傳、下載、刪除、獲取元數據等接口。網絡

文件上傳架構

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

文件下載負載均衡

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

獲取組元數據maven

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

刪除文件

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

接口層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文件服務器是免密訪問的,若是知道文件路徑能夠在瀏覽器直接訪問。

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

示例代碼

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

 

FastDFS存儲路徑說明

示例

group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png

參數說明

  • group1表示文件存儲服務器(storage)組ID
  • M00表示存儲路徑(存儲設備)編號
  • 00/09表示兩級目錄分層,其中09表示九月份。storage配置的虛擬路徑,與磁盤選項store_path*對應。若是配置了store_path0則是M00,若是配置了store_path1則是M01,以此類推。
  • CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png表示文件名,不是用戶上傳時文件名,而是由服務器生成hash文件名

FastDFS原理分析

FastDFS部署架構

微服務架構下,SpringCloud集成分佈式文件存儲中間件:FastDFS

來源網絡

FastDFS有兩種角色:trackerstorage

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名的對應關係。

相關文章
相關標籤/搜索