文件服务设计

news2024/11/16 5:29:51

一、需求背景

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

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

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

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

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

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

二、核心功能

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

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

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

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

三、存储策略

1、本地存储

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

2、FastDFS存储

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

3、云存储

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java诊断工具】Arthas使用指南

文章目录一、简介二、解决什么问题 & 适用场景解决问题:适应场景:三、安装&启动四、相关命令五、来自天边的"海市蜃楼"六、结束一、简介 Arthas 是Alibaba开源的Java诊断工具。安装在系统所在服务器。通过全局视角实时查看应用 load、…

人工智能论文术语集39

Resume 简历(但在AI领域一般指:复位)Perform arithmetic operations 执行算数操作performance measurement and improvement techniques 性能测试和改进技术draw stuff with your mouse 用鼠标画东西the Color Palette 调色板high dynamic ra…

41 42Ping-Pong操作

提高电路吞吐率的结构——Ping-Pong操作 1.Ping-Pong操作原理 作用:为了让两个不匹配的模块进行对接,并且在对接的过程中让这两个模块能够同时工作,提高数据处理的吞吐率(也称throughput效能) 常见的不匹配&#xff1…

Semaphore 源码解读

一、Semaphore Semaphore 通过设置一个固定数值的信号量,并发时线程通过 acquire() 获取一个信号量,如果能成功获得则可以继续执行,否则将阻塞等待,当某个线程使用 release() 释放一个信号量时,被等待的线程如果可以成…

idea初学笔记

注:初学需安装idea专业版,方便学习使用idea运行内存配置从eclipse工具开发 转 idea工具开发,可设置idea快捷键同eclipse快捷键 file -> Settings -> Keymap -> 选择Eclipse -> OK设置idea项目整体编码格式file -> Settings -> Editor …

mysql五种索引类型---实操版本

背景 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保存一下索引…

Linux【进程理解】

文章目录Linux【进程理解】一、冯诺依曼体系结构二、操作系统OS1.深入理解操作系统2.深入理解系统调用和库函数四、 进程(一)描述进程-PCB(二)组织进程和查看进程(三)通过系统调用创建进程-fork初识&#x…

【python】XML格式文件读写详解

注:最后有面试挑战,看看自己掌握了吗 文章目录XML介绍格式XML与AJAX与HTML区别联系生成XML文件案例用SAX模块处理XML用DOM模块处理XML🌸I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢:…

三:BLE协议架构简介

低功耗蓝牙体系整体架构说明1. PHY(物理层)2. LL(链路层)3. HCI(主机与控制器通信接口)4. L2CAP(逻辑链路控制及适配协议)5. ATT(属性协议)6. GATT(通用属性规范)7. GAP(通用访问规范)8. SM(安全管理)整体架构说明 架构层说明PHY1. 物理层2. 控制射频的发送和接收LL1. 链路层2.…

Java开发 - Quartz初体验

前言 在上一篇博客中,我们对单点登录有了初步了解,这也让我们独立做系统有了最基础的保障。但在业务开发中,总是会出现一些定期处理的任务,我们首先想到的是Timer,但由于其调度功能单一,我们实际并不会用它…

sqlmap工具说明

目录 1 工具简介 3 1.1 简述 3 1.2 背景及需求 3 1.3 主要功能 3 2 功能确认 4 2.1 安装和使用 4 2.1.1 Windows操作系统 4 2.1.2 Linux操作系统 6 2.1.3 Kali 7 2.2 添加目标 7 2.2.1 参数-u 7 2.2.2 参数-m 8 2.2.3 参数-r 9 2.3 指定参数 11 2.4 爆破数据库 11 2.5 爆破表 …

【LeetCode】剑指 Offer(16)

目录 题目:剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer …

Uipath DataTable-Build Data Table(构建数据表)

Build Data Table(构建数据表) 活动描述 Build Data Table(构建数据表):通过在“构建数据表向导”窗口可以构建数据表。 使用如下图: Build Data Table(构建数据表)属性配置 属性 作用 DisplayName 在设计器面板中设置活动显示的名称 Private 如…

List、Set、Map众多集合框架等你来学,让我们一起精进Java框架的知识点吧

文章目录一、各集合特性二、HashMap深入解析三、遍历集合元素的若干方式一、各集合特性 1. ArrayList特性 不唯一,有序:实现了List接口,该接口是序列,所以不唯一且按顺序保存不同步:因为ArrayList.add(&am…

Java 编写Vue组件(VueGWT的初尝试)

在之前,我曾写过这样的文章《不会前端没事,用GWT Boot和Spring Boot构建Web程序》,这篇文字使用的Domino UI来做前端页面,由于现在更流行VUE,并且VUE的页面更具现代化,所以我尝试了一下VueGWT。 VueGWT 有…

Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported

前言 前端项目使用( npm run dev ) 运行vue项目时,出现错误:Error: error:0308010C:digital envelope routines::unsupported 经过探索,发现问题所在,主要是nodeJs V17版本发布了OpenSSL3.0对算法和秘钥大小增加了更为严格的限制…

xFormers安装使用

xFormers是一个模块化和可编程的Transformer建模库,可以加速图像的生成。 这种优化仅适用于nvidia gpus,它加快了图像生成,并降低了vram的使用量,而成本产生了非确定性的结果。 下载地址: https://github.com/faceb…

C++ | 你真的了解namespace吗?

文章目录一、前言二、命名冲突三、命名空间1、域作用限定符2、命名空间的概念👉示例1👉示例23、命名空间的定义4、命名空间的使用① 指定命名空间访问【做项目】② 使用using部分展开【做项目】③ 使用using namespace全局展开【日常练习】5、小结解答&a…

【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本

使用了6年的实时操作系统,是时候梳理一下它的知识点了 摘要: 本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 文章目录…

【开放域目标检测】一:Open-Vocabulary Object Detection Using Captions论文讲解

出发点是制定一种更加通用的目标检测问题,目的是借助于大量的image-caption数据来覆盖更多的object concept,使得object detection不再受限于带标注数据的少数类别,从而实现更加泛化的object detection,识别出更多novel的物体类别…