MinIO-S3开源替代品

26 阅读6分钟

去年因为工作的原因接触使用了MinIO,这里特此记录一下,分享MinIO的使用过程与体会;

image.png

写在前面 - 49年入国军

image.png

MinIO已经将协议修改为AGPLv3,并且阉割了WebUI控制台功能;截止2025年12月,MinIO进入不再维护的状态,正式标记了该开源产品的日落;如果不考虑社区后续支持,或是测试验证需求,MinIO仍然是不错的选择;当前开发者在积极探索MinIO的替代品,对于该项目感兴趣的同学,可以关注如下产品:

替代品开源协议S3 兼容性特点适合场景缺点
SeaweedFSApache 2.0✔️(通过 S3 Gateway)高性能、专为海量小文件优化、O(1) 寻址、轻量图片/日志/边缘存储、中小规模对象存储需要独立元数据服务(如 etcd)、S3 功能较基础
Ceph (RGW)LGPL✔️(RADOS Gateway 提供 S3 API)企业级分布式存储、支持块/文件/对象三合一大型企业、云平台、已有 Ceph 基础设施架构复杂、运维成本高、学习曲线陡峭
RustFSMIT/Apache✔️(目标是 MinIO 替代)专为替代 MinIO 设计、Rust 编写、API 高度兼容技术尝鲜者、愿意参与早期生态仍处于 Alpha 阶段,生产环境风险高
MinIO 社区 Fork(如 openminio)GPL / 社区自定✔️(延续原版)保留 MinIO UI 和功能暂时过渡、希望延续 MinIO 体验长期维护性和安全性不确定

接下来让我们进入正片:)

MinIO是什么

MinIO是一个高性能、开源的对象存储系统,专为云原生环境(如 Kubernetes、Docker)设计,100% 兼容 Amazon S3 API。它用 Go 语言编写,以单个二进制文件形式发布,无外部依赖,既可以作为轻量级单机服务运行,也能构建跨数据中心的分布式集群。

对于从未接触过S3的同学,可能有必要解释下S3是什么;S3即Amazon Simple Storage Service(Amazon S3),是亚马逊AWS(Amazon Web Services)提供的一种对象存储服务。它是云计算领域最基础、最广泛使用的存储服务之一。

S3是一个可通过互联网访问的、无限容量、高可靠、安全且按需付费的“云端硬盘”,但它不是传统意义上的硬盘,而是以“对象”为单位存储数据。当前各大云厂商都有对标的同类项的产品服务面向客户(如GCP的GCS,华为云的OBS,阿里云的OSS)。

特性S3(对象存储)文件存储(如 NAS)块存储(如 EBS)
结构扁平(Key 唯一标识)树状目录无结构(需格式化)
访问方式HTTP/REST APINFS/SMBSCSI(挂载为磁盘)
扩展性无限自动扩展有限需手动扩容
适用负载海量静态数据共享文件协作数据库、操作系统盘

选择MinIO

在当时,我正面临一个项目上的问题:我需要一个大文件的存储系统——传统的数据库主要提供快速、稳定的查询与写入能力,同时需要提供事务一致性;但并不适用于大文件的读写。在这一场景下,S3类服务比较符合业务的诉求。但此时正处于业务的初期,团队并不想将业务与云服务进行集成,因此我选择MinIO作为业务的文件存储系统。

快速启动MinIO

使用 Docker 快速启动:

docker run -p 9000:9000 -p 9001:9001 \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=12345678" \
  -v /data:/data \
  minio/minio server /data --console-address ":9001"
  • 9000:S3 API 端口
  • 9001:Web 控制台端口
    访问 http://localhost:9001 即可管理Bucket(桶)和文件。通过MINIO_ROOT_USERMINIO_ROOT_PASSWORD登录。

image.png

通过控制台可以管理桶和对象;同时提供丰富的访问、身份、监控等管理能力。

image.png

桶(Bucket) :类似文件夹,用于组织对象,名称全局唯一。

image.png

对象(Object) :存储的基本单元,包含数据 + 元数据 + 唯一标识(Key)。

image.png

image.png

快速基于MinIO开发

MinIO提供了多种语言的SDK供开发者使用:

语言安装/获取方式
Gogo get github.com/minio/minio-go/v7
Pythonpip3 install minio
JavaMaven / Gradle / JAR
.NETInstall-Package Minio
JavaScriptnpm install --save minio
Haskell通过 .cabal 或 hpack
C++vcpkg install minio-cpp
Rustcargo add minio

当然,也可以通过MinIO提供的S3兼容API来进行访问。

什么情况下选择MinIO

最后分享下对于什么情况下应该选择使用MinIO的个人理解:

  1. 不希望在自己的系统中集成云服务:可能由于敏感数据合规要求的原因,数据无法上云;或是对云服务的使用无相关经验;或是对上云成本相对敏感。那么在本地部署MinIO是一个不错的选择。
  2. 小型项目或处于初期的项目:MinIO可以单机(容器)部署,同时对未来也有较好的扩展性;由于采用了S3兼容的API,也方便后续系统转向接入云上的S3类产品。
  3. 对依赖对象存储的服务进行验证,或本身就希望学习或测试S3类产品:同样由于其对S3的兼容性,MinIO可以很好的满足这一点。

补充对MinIO特性的总结:

  • 高性能:MinIO 被官方称为“世界上最快的对象存储”。它利用并行化和分布式架构,能够充分利用多核处理器和高速网络(如100Gbe),实现极高的数据读写吞吐量(例如,在特定硬件上读取速度可达325GB/秒)7。
  • S3 兼容:完全兼容 Amazon S3 API 协议。这意味着任何为 AWS S3 开发的应用程序、工具或 SDK 都可以无缝地与 MinIO 对接,无需修改代码,极大地降低了迁移和集成成本13。
  • 云原生与轻量:天然为容器化环境(如 Docker、Kubernetes)设计,支持自动化编排和运维。其本身轻量级的特性使其可以轻松部署在边缘计算节点上2。
  • 高可用与可扩展:采用去中心化的分布式架构。通过将数据分片并分布在多个节点上,MinIO 可以实现线性的水平扩展,并自动处理节点故障,确保数据的高可靠性和服务的持续可用48。
  • 安全性:提供包括客户端加密、服务器端加密(SSE-KMS)在内的多种安全机制,并支持与第三方密钥管理系统集成2。
  • AI 基础设施集成:在 AI 领域,MinIO 已成为关键的数据基础设施。例如,截至2025年,它已被集成到英特尔® Tiber™ AI Cloud 中,并与 H2O.ai、Apache Spark、TensorFlow 等主流机器学习框架深度集成,为 AI 应用的开发和训练提供可扩展的数据存储支持12。