目录
- 文件存储服务
- 1. 需求背景
- 2. 核心功能
- 3. 存储策略
- 3.1 本地存储
- 3.2 FastDFS存储
- 3.3 云存储
- 3.4 minio
- 4. 技术设计
1. 需求背景文件的上传、下载功能是软件系统常见的功能,包括上传文件、下载文件、查看文件等 。例如:电商系统中需要上传商品的图片、广告视频,办公系统中上传附件,社交类系统中上传用户头像等等 。
文件上传下载大致流程为:
文章插图
这种方式开发起来简单、直接,但是有一些问题:
- 重复开发: 比如对接某个OSS(Object Storage Service,简称OSS)服务商,每个应用都需要对接该服务商,重复工作
- 扩展性差: 当需要切换服务商时,所有涉及到的应用都需要修改、测试、上线
文章插图
这种方式提供一个独立的文件微服务,该微服务向应用系统提供统一的上传、下载、查看接口,应用系统调用方式相同 , 并且屏蔽了底层对外调用OSS服务的接口,即使以后迁移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. 技术设计本系统的文件存储服务以品达通用权限系统为脚手架,在此基础之上进行开发 。为了能够提供统一的上传接口从而屏蔽底层的存储方案,需要进行相应的接口设计:
文章插图
FileStrategy:文件策略顶层接口
AbstractFileStrategy:抽象文件策略处理类,实现FileStrategy接口 。实现主要的文件上传处理流程,但是真正上传的过程需要其子类来完成 。
LocalServiceImpl:具体的文件策略处理类,是AbstractFileStrategy的子类,负责将上传的文件保存在本地磁盘 。
FastDfsServiceImpl:具体的文件策略处理类,是AbstractFileStrategy的子类,负责将上传的文件保存到FastDFS上 。
AliServiceImpl:具体的文件策略处理类 , 是AbstractFileStrategy的子类,负责将上传的文件保存到阿里云OSS上 。
MinioServiceImpl:具体的文件策略处理类,是AbstractFileStrategy的子类,负责将上传的文件保存到Minio上 。
推荐阅读
- 天涯明月刀捏脸数据放在哪,捏脸导出到哪个文件夹
- Kotlin Mp3文件标签信息读取和写入
- 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实现
- 第五人格或许可以找鹤翁帮忙怎么做
- Number,String类型 第一百零八篇:最常用的基本数据类型
- Java 【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK 输出日志并以文件形式保存
- 第五人格给鹤翁盛水任务完成攻略
- 第五人格或许可以找鹤翁帮忙位置图示
- -第五人格鹤翁盛水方法攻略
- 第五人格鹤翁位置在哪