这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
今天要学习的项目中需要用的对象存储技术, 这次我们的技术选型使用的是采用golang开发的轻量级高可用对象存储minIO.
简介
minIO是什么: Minio是一个开源的分布式文件存储系统,它基于 Golang 编写,虽然轻量,却拥有着不错的高性能,可以将各种类型的文件存储到多个主机,可以存储到多个Linux,或者多个Windows,或者多个Mac,Minio中存储最大文件可以达到5TB。任何类型的文件都是支持的.
minIO的优点:
- 站点复制: 站点复制扩展了存储桶复制的功能,以包括所有站点上相同的 IAM、安全令牌、访问密钥和存储桶功能。站点复制将多个 MinIO 部署链接在一起,并使存储桶、对象和身份和访问管理 (IAM) 设置在所有连接的站点之间保持同步。
- 开箱即用: MinIO在安装的过程是黑盒的,你不用去深入关注它的架构,也不需要你进行零件组装,基本上可以做到开箱即用。
- 容器化支持: MinIO提供了与k8s、etcd、docker等容器化技术深度集成方案,可以说就是为了云环境而生的。
- AWS S3 兼容: Amazon的S3 API是对象存储领域的事实标准。MinIO是S3兼容性的事实上的标准,是第一个采用API和第一个添加对S3 Select支持的标准之一。包括微软Azure在内的750多家公司使用MinIO的S3网关,这一数字超过了业内其他公司的总和。
单节点使用
- 下载go语言支持的SDK
go get github.com/minio/minio-go/v7
复制代码
- 本地启动服务
在终端,使用minio server启动一个本地minio实例,
Start minio server on "/home/shared" directory.
$ minio server /home/shared
运行起来之后, 可以在本地使用minIO console使用可视化界面进行操作, 具体参考官方文档min.io/docs/minio/…
此时即可新建一个bucket然后利用goAPI进行文件上传服务的搭建. 例如: 首先客户端发起文件上传操作到API,服务将文件存储到服务器本地文件夹中,生成返回一个文件摘要,摘要包括路径,文件ID等一些基本信息,然后将这些摘要信息和用户业务数据组装成一个DTO,最终存储到数据库中。
参考文档: