第2-3-1章 文件存儲服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

目錄

  • 文件存儲服務
    • 1. 需求背景
    • 2. 核心功能
    • 3. 存儲策略
      • 3.1 本地存儲
      • 3.2 FastDFS存儲
      • 3.3 云存儲
      • 3.4 minio
    • 4. 技術設計
文件存儲服務全套代碼及資料全部完整提供,點此處下載
1. 需求背景文件的上傳、下載功能是軟件系統常見的功能,包括上傳文件、下載文件、查看文件等 。例如:電商系統中需要上傳商品的圖片、廣告視頻,辦公系統中上傳附件,社交類系統中上傳用戶頭像等等 。
文件上傳下載大致流程為:
第2-3-1章 文件存儲服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章插圖
這種方式開發起來簡單、直接,但是有一些問題:
  • 重復開發: 比如對接某個OSS(Object Storage Service,簡稱OSS)服務商,每個應用都需要對接該服務商,重復工作
  • 擴展性差: 當需要切換服務商時,所有涉及到的應用都需要修改、測試、上線
基于以上原因,微服務體系下的應用系統一般都有一個文件服務,用于統一管理文件上傳下載等功能 , 大型電商系統甚至有獨立的文件、圖片、視頻服務 。此時架構體系變為:
第2-3-1章 文件存儲服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章插圖
這種方式提供一個獨立的文件微服務,該微服務向應用系統提供統一的上傳、下載、查看接口,應用系統調用方式相同 , 并且屏蔽了底層對外調用OSS服務的接口,即使以后遷移OSS服務商,應用層面的系統也不需要變動 。
這種模式也有一個小問題,比如我們調用了阿里云的OSS服務 , 如果所有的下載、查看功能都調用文件服務,那么文件服務的網絡流量將會有非常大的壓力 。所以常用的做法是這樣的:
第2-3-1章 文件存儲服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章插圖
2. 核心功能文件存儲服務的核心功能是:上傳和下載 。除了這兩個核心功能,還具有:
  • 可用性:作為基礎性服務,通過集群化部署實現高可用
  • 配置性:結合nacos配置中心,可動態配置上傳下載的方式等配置
  • 擴展性:采用策略設計模式能方便的進行擴展,如添加新的OSS服務商等
本系統的文件服務提供兩種類型的服務:
? 1、面對應用系統的通用附件服務
?提供統一的上傳接口,屏蔽底層的存儲方案(本地存儲、FastDFS、MinIo、阿里云存儲、七牛云存儲等),可獨立運行服務
? 2、面對用戶的網盤服務
?有文件夾和文件的概念 , 支持大文件分片上傳、合并
? 3、面對大屏展示的數據統計服務
?有云盤首頁數據概覽,按照類型/時間等維度統計各種類型文件的大小和數量等
3. 存儲策略3.1 本地存儲本地存儲 , 即將上傳的文件存儲在本地磁盤,并通過本地提供的Nginx服務來對外提供文件的下載和查看等功能 。
3.2 FastDFS存儲FastDFS存儲 , 即將上傳的文件存儲在FastDFS分布式文件存儲系統中,并通過FastDFS結合Nginx提供的服務來對外提供文件的下載和查看等功能 。
3.3 云存儲云存儲,即將上傳的文件存儲在第三方云平臺上,例如阿里云OSS、七牛云OSS服務等,并通過這些第三方提供的OSS服務來對外提供文件的下載和查看等功能 。
3.4 minioMinIO 是一個基于Apache License v2.0開源協議的對象存儲服務 。它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大?。蛹竗b到最大5T不等 。
4. 技術設計本系統的文件存儲服務以品達通用權限系統為腳手架,在此基礎之上進行開發 。為了能夠提供統一的上傳接口從而屏蔽底層的存儲方案,需要進行相應的接口設計:
第2-3-1章 文件存儲服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章插圖
FileStrategy:文件策略頂層接口
AbstractFileStrategy:抽象文件策略處理類,實現FileStrategy接口 。實現主要的文件上傳處理流程,但是真正上傳的過程需要其子類來完成 。
LocalServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存在本地磁盤 。
FastDfsServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存到FastDFS上 。
AliServiceImpl:具體的文件策略處理類 , 是AbstractFileStrategy的子類,負責將上傳的文件保存到阿里云OSS上 。
MinioServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存到Minio上 。

推薦閱讀