MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
在互联网越来越普及的当下,各种 APP 如雨后春笋。用户通过 APP 可以进行远程办公、查看新闻咨询、理财、社交、教育等等。在上面这些场景中,避免不了需要查看图片、音频、视频。那么问题来了?这些图片、视频、音频是怎样的存储的呢?
传统开发中,我们可以使用 tomcat 类似的服务器进行映射目录实现资源访问(在 server.xml 文件中进行配置)。例如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- 增加的静态资源映射配置 --> <Context path="/static" docBase="D:\static" reloadable="true" crossContext="true"></Context> </Host>
也可以使用 nginx 对静态资源进行代理。例如:
server { listen 8080; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; # 代理 html 目录 index index.html index.htm; } }
随着 APP 用户量的增加,服务器需要存储海量的图片、音频和视频。此时,再使用上面方式就显得不足了。当然,如果资金充足,可以购买成熟对象存储服务产品,例如:阿里云对象存储OSS(Object Storage Service)。如果不想购买存储服务产品,则可以自己搭建对象存储服务,MinIO 就是你的选择。
MinIO 使用 Amazon S3 v2 / v4 API。可以使用 MinIO SDK,MinIO Client,AWS SDK 和 AWS CLI 访问 MinIO 服务器。
MinIO 使用 Minio Erasure Code 来防止硬件故障。也许会损坏一半以上的 driver,但是仍然可以从中恢复。
MinIO 服务器可以容忍分布式设置中高达(N / 2)-1 节点故障。而且,您可以配置 MinIO 服务器在 MinIO 与任意 Amazon S3 兼容服务器之间存储数据。
MinIO 服务器通过其兼容 AWS SNS / SQS 的事件通知服务触发 Lambda 功能。支持的目标是消息队列,如 Kafka,NATS,AMQP,MQTT,Webhooks 以及 Elasticsearch,Redis,Postgres 和 MySQL 等数据库。
MinIO 为加密数据提供了机密性,完整性和真实性保证,而且性能开销微乎其微。使用 AES-256-GCM,ChaCha20-Poly1305 和 AES-CBC 支持服务器端和客户端加密。加密的对象使用 AEAD 服务器端加密进行防篡改。
除了 MinIO 自己的文件系统,还支持 DAS、 JBODs、NAS、Google 云存储和 Azure Blob 存储。
基于 MinIO 轻量的特点,它得到类似 Java、Python 或 Go 等语言的 sdk 支持
学习成本低,安装运维简单,开箱即用
目前 MinIO 论坛推广给力,有问必答
提供 Java 客户端、JS 客户端
社区不够成熟,业界参考资料较少
不支持动态增加节点,MinIO 创始人的设计理念就是动态增加节点太复杂,后续会采用其它方案来支持扩容