第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上 。

推荐阅读