1.应用系统架构
整个架构中,模块之间使用http协议通信,并且每个模块的作用如下:
1)Web/API服务器的作用是提供UMS系统的认证和鉴权,即验证Web客户端或者开发者API请求接口的合法性;
2)文件管理服务器的作用是提供对外操作minIO服务器的接口,根据目前UMS系统的业务需求,只提供了获取上传文件presignedURL,设置过期时间, 设置对外访问
策略,创建存储桶,生成下载文件URL的功能;那么什么是presignedURL呢?它是对象所有者使用自己的安全凭证来创建预签名的 URL,以授予有限时间内的上传或下
载对象权限,从而与其他用户共享对象,注:即使是私有对象使用presignedURL也可以共享给他人,并且presignedURL最大有效期为7天。
其中文件管理服务器获取上传文件presignedURL的方法直接使用了minIO官方API,当然你也可以自己实现presignedURL方法,此外,由于下载presignedURL最大保留时间为7天,不符合UMS系统业务需求,所以,文件管理服务器自己实现了一个生成下载URL的方法,此链接的过期时间可任意设置,但前提要把存储桶的对外访问策略设置为public。由此,客户端就可以直接使用上传presignedURL上文件到minIO服务器,使用下载链接直接下载文件即可。
3)minIO集群作用是存储实体文件,该集群采用去中心化无共享架构,各节点间为对等关系,连接至任一节点均可实现对集群的访问,minIO集群前端增加了Nginx实现反向代理;minIO节点之间的通信使用的都是rpc。此外,管理minIO服务器除了上面提到的SDK以外,官方还提供了命令行和web页面的形式,内容分别如下:
1.# minIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)
2.$ wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
3.$ chmod +x mc
4.$ ./mc -h
5.ls 列出文件和文件夹。
6.mb 创建一个存储桶或一个文件夹。
7.cat 显示文件和对象内容。
8.pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
9.share 生成用于共享的URL。
10.cp 拷贝文件和对象。
11.mirror 给存储桶和文件夹做镜像。
12.find 基于参数查找文件。
13.diff 对两个文件夹或者存储桶比较差异。
14.rm 删除文件和对象。
15.events 管理对象通知。
16.watch 监视文件和对象的事件。
17.policy 管理访问策略。
18.config 管理mc配置文件。
19.update 检查软件更新。
20.version 输出版本信息
把Nginx代理ip和端口号或者minIO集群中任意节点的ip和端口号输入浏览器,输入minIO的账户名和密码即可登录,界面如下:
2.具体交互逻辑
首先,客户端要请求业务服务器(WebServer/APIServer)获取上传文件的凭证(presignedURL),然后,业务服务器响应一个上传文件URL和下载文件的URL,客户端使用上传URL上传文件到文件服务器,使用下载URL作为请求后端的文件参数,如发送邮件消息支持上传本地图片,上传到后端的图片即可使用文件下载URL作为参数。
该方案的优点如下:
- 客户端直接上传文件到minIO服务器,不经过业务服务器,减轻业务服务器的压力,提高可用性
- 数据库服务器只存储文件的下载URL,减少数据库的存储量
- 支持上传超大文件,比如3G以上等,硬件性能足够的情况下,minIO服务器单个文件最大可达5T
- 上传文件的数量没有限制
- 可以解决同名文件覆盖问题
可以适配任何兼容S3协议的文件服务器,满足不同客户的要求
以上内容来自于文章:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。