文件服务设计

一、需求背景

文件的上传、下载功能是软件系统常见的功能,包括上传文件、下载文件、查看文件等。例如:电商系统中需要上传商品的图片、广告视频,办公系统中上传附件,社交类系统中上传用户头像等等。文件上传下载大致流程为:

文件服务设计_第1张图片

这种方式开发起来简单、直接,但是有一些问题:

  • 重复开发: 比如对接某个OSS(Object Storage Service,简称OSS)服务商, 每个应用都需要对接该服务商,重复工作
  • 扩展性差: 当需要切换服务商时,所有涉及到的应用都需要修改、测试、上线

基于以上原因,微服务体系下的应用系统一般都有一个文件服务,用于统一管理文件上传下载等功能,大型电商系统甚至有独立的文件、图片、视频服务。此时架构体系变为:

文件服务设计_第2张图片

这种方式提供一个独立的文件微服务,该微服务向应用系统提供统一的上传、下载、查看接口,应用系统调用方式相同,并且屏蔽了底层对外调用OSS服务的接口,即使以后迁移OSS服务商,应用层面的系统也不需要变动。

这种模式也有一个小问题,比如我们调用了阿里云的OSS服务,如果所有的下载、查看功能都调用文件服务,那么文件服务的网络流量将会有非常大的压力。所以常用的做法是这样的:

文件服务设计_第3张图片

二、核心功能

文件服务的核心功能是: 上传下载, 另一方面,除了这两个核心功能,还需要其他非功能性要求:

  • 可用性:作为基础性服务,可用性要求非常高
  • 配置性:OSS服务商配置、上传下载方式等内容
  • 扩展性:能方便的进行扩展,如添加新的OSS服务商等

本课程的文件服务提供两种类型的服务:

  1. 面对应用系统的通用附件服务。提供统一的上传接口,屏蔽底层的存储方案(本地存储、FastDFS、阿里云存储、七牛云存储等),可独立运行服务。
  2. 面对用户的网盘服务。有文件夹和文件的概念,支持大文件分片上传、合并。

三、存储策略

1、本地存储

本地存储,即将上传的文件存储在本地磁盘,并通过本地提供的Nginx服务来对外提供文件的下载和查看等功能。

2、FastDFS存储

FastDFS存储,即将上传的文件存储在FastDFS分布式文件存储系统中,并通过FastDFS结合Nginx提供的服务来对外提供文件的下载和查看等功能。

3、云存储

云存储,即将上传的文件存储在第三方云平台上,例如阿里云OSS、七牛云OSS服务等,并通过这些第三方提供的OSS服务来对外提供文件的下载和查看等功能。

你可能感兴趣的:(微服务,分布式)