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

文件存儲服務

全套程式碼及資料全部完整提供,點此處下載

1. 需求背景

文件的上傳、下載功能是軟體系統常見的功能,包括上傳文件、下載文件、查看文件等。例如:電商系統中需要上傳商品的圖片、廣告影片,辦公系統中上傳附件,社交類系統中上傳用戶頭像等等。

文件上傳下載大致流程為:
在這裡插入圖片描述

這種方式開發起來簡單、直接,但是有一些問題:

  • 重複開發: 比如對接某個OSS(Object Storage Service,簡稱OSS)服務商, 每個應用都需要對接該服務商,重複工作
  • 擴展性差: 當需要切換服務商時,所有涉及到的應用都需要修改、測試、上線

基於以上原因,微服務體系下的應用系統一般都有一個文件服務,用於統一管理文件上傳下載等功能,大型電商系統甚至有獨立的文件、圖片、影片服務。此時架構體系變為:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KoK2p2bo-1668380032703)(img/1585712078385.png)]

這種方式提供一個獨立的文件微服務,該微服務嚮應用系統提供統一的上傳、下載、查看介面,應用系統調用方式相同,並且屏蔽了底層對外調用OSS服務的介面,即使以後遷移OSS服務商,應用層面的系統也不需要變動。

這種模式也有一個小問題,比如我們調用了阿里雲的OSS服務,如果所有的下載、查看功能都調用文件服務,那麼文件服務的網路流量將會有非常大的壓力。所以常用的做法是這樣的:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GYZtvmJF-1668380032703)(img/1585712407005.png)]

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 minio

MinIO 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務介面,非常適合於存儲大容量非結構化的數據,例如圖片、影片、日誌文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。

4. 技術設計

本系統的文件存儲服務以品達通用許可權系統為腳手架,在此基礎之上進行開發。為了能夠提供統一的上傳介面從而屏蔽底層的存儲方案,需要進行相應的介面設計:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hYIx3jwx-1668380032704)(img/image-20200424152528386.png)]

FileStrategy:文件策略頂層介面

AbstractFileStrategy:抽象文件策略處理類,實現FileStrategy介面。實現主要的文件上傳處理流程,但是真正上傳的過程需要其子類來完成。

LocalServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存在本地磁碟。

FastDfsServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存到FastDFS上。

AliServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存到阿里雲OSS上。

MinioServiceImpl:具體的文件策略處理類,是AbstractFileStrategy的子類,負責將上傳的文件保存到Minio上。

注意:本系統目前提供的存儲策略有以上四種方式(即本地存儲、FastDFS存儲、Minio存儲、阿里雲OSS存儲),後期也可以根據需要擴展其他的存儲策略。這種設計方式其實就是策略模式的一個具體應用。

全套程式碼及資料全部完整提供,點此處下載