#云原生征文# 如何为项目构建高效的统一文件存储方案 原创 精华
1. 背景
在项目的建设过程中,遇到越来越多的第三方私有或公有化存储云服务,有阿里 OSS、华为云 OBS、七牛云 Kodo 等,各存储厂商对接标准、数据、SDK尽不相同,这对项目的实施和运维带来了很大的挑战,在和团队沟通以及调研过程中发现项目存在以下主要痛点
:
- 项目中附件上传下载实现五花八门,代码难以维护
- 存储参数配置凌乱,无法统一维护和配置,运维头大
- 项目无法快速接入不同第三方云存储,业务要大改一通且维护不同的代码分支
- 上传下载功能(前后端)常被业务重复开发,浪费资源
- 通过网关、nginx 等简单包装代理方式处理第三方存储,丢失 CDN 及高可用性,浪费流量、计算时间等资源
所以急需为各项目开发一套统一的存储接入标准,屏蔽各厂商接入差异,增强业务快速实施及产品化的能力,为了解决以上问题,团队内部设计和打造了统一存储接入组件,至目前为止,已在众多项目落地实践,并得到大家的好评,同时也希望更多的小伙伴可以加入使用,后续也会准备将核心技术组件部分开源出来
2. 存储组件简介
统一文件存储组件是一个面向业务应用的文件存储抽象层,以插拔方式集各主流文件存储技术和数据于一身,目前已支持华为云OBS、阿里云OSS、MINIO开源分布式存储、自研单机存储等,通过不同语言提供标准化的接口和使用方式,简便快捷的为业务开发支撑文件上传、下载、安全处理等能力
3. 存储组件特点
- 存储统一配置,高效管控
- 统一接入标准,快捷简便
- 业务快速复用,降本提效
- 内置主流存储,开箱即用
- 插拔式的设计,快速扩展
- 多维权限策略,安全可靠
- 基于项目沉淀,成熟稳定
4. 功能一览
5. 整体设计
统一存储组件整体为了满足项目业务简便、轻量、扩展灵活、安全、性能等原则来设计的,主要职责是按标准进行接入,文件流不直接经过存储服务,这为业务大大节省了在性能、时间、资源上的消耗。
6. 上传资源场景
下图展示了一个前端浏览器上传资源的场景,描述是如何通过JS-SDK触发上传动作,拉取配置,获取凭证、推流等环节的;在设计JS-SDK前我针对各大主流对象存储平台进行了分析研究,最后将整个上传业务流程以及返回的数据模型进行了抽象,形成了一套标准的逻辑体系。
7. 下载私有资源场景
下载资源分两种,一种是公开资源,一种是私有资源,对于私有资源,业界的处理都是通过临时授权地址对资源进行下载或浏览的,所以关键问题就是要通过文件的标识去拿到这个临时仿问地址,同时业务需要考虑临时仿问地址的过期时间,以及为了安全需要通过后台服务调用JAVA-SDK才能拿到这个临时仿问地址。
8 应用存储接入配置
在项目使用统一存储前,需要在统一存储配置管理中添加配置,为应用分配存储类型(HUAWEI/TALKWEB/ALIYUN/MINIO)以及相关的第三方存储配置信息
9. java-sdk使用三步曲
为了简化使用,JAVA-SDK内置了SpringBoot自动装配机制,开关打开storageClient对象就会自动装箱IOC容器
当然为了非SpringBoot项目同时也是支持手工实例化方式。
9.1 添加依赖
9.2. 参数配置
9.3 使用示例
10. js-sdk 小试牛刀
JS-SDK使用Webpack+NodeJs+TypeScript构建基于浏览器umd规范lib包,兼容不同环境下的稳定运行
同时,此处有一个优化设计,JS-SDK内部会根据不同存储厂商动态加载相应的JS逻辑并缓存,避免JS-SDK过于臃肿的同时也使得SDK可扩展、上传逻辑独立等特点。
10.1 引入封装好的 sdk 文件
建议项目保持 SDK 发布版本文件名不要修改,方便后续技术支持和升级
vue项目引用方式有多种
10.2 初始化上传对象
10.3 单文件上传
10.4 断点续传方法
-
实例化对象
参考以上10.2 -
以断点续传方式上传(分片上传)
- 暂停上传
- 恢复上传
【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598
告诉我,你为何这么屌
纯干货
给力,干货实用
厉害,赞起!
写得很好,学习了
学习学习 小编有点刁
干货,收藏了!
学习了👍
大神。。。
请问,第8步骤,应用存储接入配置,在哪里配置的?
哪位知道,9.1 添加pom依赖,无法加载问题呢
近期准备开源出来,届时可以自动加载依赖和访问存储配置页面,敬请期待
近期准备开源出来,届时可以自动加载依赖和访问存储配置页面,敬请期待