⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/rustfs-object-storage/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

现在刷 GitHub Trending,榜上大部分都是 AI 相关的,大模型、Agent、MCP 工具,十个项目八个带 AI。基础设施类的项目想上一次榜,机会很小。

所以 RustFS 确实非常难得。一个做对象存储的基础软件,2025 年 7 月正式发布,一年时间 Star 数破三万,我写这篇文章的时候已经三万四千多了。这期间它 9 次登上 GitHub Trending 总榜,50 多次拿下 Rust 语言榜第一,没沾 AI 概念的光,纯靠存储这件事本身卷出来。

仓库首页实时截图,Star 与 Fork 计数同时可见

一半是对手让出来的位置

Star 增长曲线,拐点出现在 2025 年 7 月

这件事得从 2025 年说起。5 月,MinIO 社区版一刀砍掉 Web 控制台的管理功能,删了 11 万行代码,控制台只剩一个光秃秃的文件浏览器;10 月,社区版的安装包和 Docker 镜像停发;12 月直接官宣进入维护模式,仓库归档,新功能不再有了。

MinIO 官方主力转去闭源收费的商业版 AIStor。用了这么多年的对象存储标杆,说不维护就不维护,很多企业和个人开发者一下没了着落,急需找开源平替。RustFS 就是在这个窗口里补上来的。

窗口是别人让出来的,但接不接得住是另一回事。

定位很直白,就是来当平替的

官方项目主视觉

它是一个用 Rust 写的分布式对象存储,S3 兼容,Apache 2.0 协议,国内团队做的。定位不绕弯子,就是 MinIO 的平替。从功能清单看,基本是照着 MinIO 一条一条对齐的。

官方公布的数字是这样的,Docker 镜像拉取超过 1000 万次,全球装机量 270 万,贡献者 160 多位。官方的说法是它是世界上增长最快的对象存储系统。这话是不是第一不好说,但在对象存储这种慢热的基础软件品类里,一年从 0 涨到三万 Star,确实不多见。

Apache 2.0 这个选择值得一提。同类里不少项目用 AGPL,商用时要考虑开源义务;Apache 2.0 没有这层顾虑,这也是它敢喊平替的底气之一。

保证数据完好,靠的是三件配套的机制

存储最重要的还是数据别丢,这块它给的东西挺全。

第一件是纠删码。数据切成数据片加校验片,坏几块盘数据照样完整。达到同样的可靠性,纠删码的磁盘开销比传统三副本能省出一半左右,而且盘越多省得越多。对一个要买几十块盘的团队来说,这一条直接决定预算。

第二件是 bitrot 保护和后台自愈。硬盘用久了会有 bitrot,数据放在盘上慢慢坏掉,平时不读根本不知道。它有巡检机制,扫到坏数据会自动修复,不用等到真出事才发现。

第三件是对象锁和版本控制。开了对象锁以后,锁定期内的数据改不了也删不掉,能防误操作,也能防勒索软件,这年头这条不是锦上添花。

那个被砍掉的网页界面,它整个拿出来免费给

控制台总览界面

MinIO 砍掉的那个控制台,RustFS 这边是全功能免费给的。建桶、传文件、配权限、桶复制、生命周期管理、查看审计日志,界面上全能点。官方的说法是所有功能都可以在控制台操作,不用被逼着去背命令行。

对运维来说这一点很实在。遇到问题打开网页就能处理,不用到处翻文档找命令。MinIO 用户对这件事的感受应该最深,因为被拿走的就是这个。

协议上它给得比 MinIO 还宽一点。S3 是最基本的完全兼容,AWS CLI、s3cmd、各语言的 S3 SDK,原来接 MinIO 的代码一行不用改。除 S3 之外还有 WebDAV、Swift API、FTP 和 SFTP,另外还支持 OpenStack Keystone 认证。不过要留意,Swift 和 SFTP 是编译时要显式开启的特性,不是装上就有;WebDAV 和 FTPS 才是默认构建里带的。

安全那块是 IAM 加 OIDC,用户、用户组、策略分层管,单点登录支持 Keycloak、Authing、LDAP;KMS 能接 Vault 和 AWS KMS,服务端加密支持 SSE,审计日志内置。有一点得写准,Vault 支持的是 KV2 与 Transit 后端,Local 和 Static 那两个后端只用于开发测试,别拿去上生产。国产化方面,麒麟、统信这类系统都有适配,跑信创项目可以留意。

还有一个挺讨巧的地方,官方单独做了一个 MCP Server,把存储操作包装成 AI 能直接调用的工具。装好之后,支持 MCP 的客户端就能直接列出所有桶、查看文件、上传下载、建桶删桶。配置就是在客户端的 MCP 配置里填上地址和密钥,官方给了二进制和 Docker 两种用法。一个存储项目主动往 AI 工具链上靠,这个动作本身就说明它在想什么。

运维工具上,命令行有自己的 rc 对标 MinIO 的 mc,用惯 mc 的切过去没什么学习成本;集群侧桶复制、站点复制、存储池扩容和退役、数据分层到远端 S3 都是现成的,事件通知支持 webhook,Kubernetes 环境有 Helm Chart 和 Operator。

表格能力刚放出来,但官方自己标的是预览

S3 Tables 架构图

最近它把 S3 Table 放出来并开源了,这块值得单独说。MinIO 也有 S3 Table,但只放在商业版里卖,按 RustFS 官方的说法,企业要用这项功能得付十几万甚至几十万美金。

S3 Table 是 AWS 先做的东西,让对象存储支持表格式,写进桶里的数据就是一张张能查的表,Spark、DuckDB 这些计算引擎连上来就能读写,不用自己再搭一套元数据服务。

RustFS 的做法是把 Apache Iceberg 的 REST Catalog 做进了存储内核。一个进程、一个 9000 端口,同时提供标准 S3 接口和 Iceberg REST Catalog 接口;Spark、DuckDB、PyIceberg 不用装插件,连上就能建表写数据查数据。

S3 Tables 控制台界面

用起来也不复杂,在控制台建桶的时候点一下启用表存储桶,这个桶就变成表桶了,命名空间和表都能在界面上管理,表的结构和快照都能看。

S3 Table 表详情

来源作者照着官方文档里的 Spark 例子跑了一遍,配好地址和密钥,建命名空间、建表、写数据,跑完刷新控制台就能看到表,整个过程没什么卡点;官方文档里 PyIceberg 和 DuckDB 的例子也是现成的。

但有一条得说清楚,官方特性表里 S3 Tables 这一项标的状态是预览,不是已发布。预览在官方定义里意味着「带 opt-in 开关或有限兼容性声明」。所以来源那句建议是对的,先在测试环境玩明白,再往生产上放。

顺带提一句它的方向。官方给 RustFS 的定位是面向 AI 数据中心的存储基础设施,除 S3 Table 外,RDMA、DPU 卸载这类低延迟数据路径也在推进,官方还提到今年 4 月加入了 NVIDIA Inception 加速器。这些动作基本都是围绕 AI 场景做的。

搬家的成本,难点在数据不在代码

正在用 MinIO 的人最关心的应该是切换成本,可以拆成三块看。

代码这块基本不用动。RustFS 兼容 S3,原来项目里用的 AWS SDK、各语言的 S3 SDK、MinIO 的 SDK,把连接地址和密钥换成 RustFS 的就能跑。个别边缘接口可能有差异,官方仓库里有 S3 兼容性清单,关键业务切之前对着查一遍。

工具也不用换。AWS CLI、s3cmd 这些直接能用,连 MinIO 自家的 mc 都可以继续用,等用熟了想换成 RustFS 自己的 rc 也来得及。

难的是数据。老数据还在 MinIO 里,要用 mc mirror 或者 rclone 这类工具把桶同步过来,它们都支持 S3 到 S3 的拷贝,数据量大就分批跑。这里有个坑要注意,mc mirror 只搬对象的当前版本,如果桶开了版本控制、历史版本还要留,就得换个搬法。

稳妥的做法是迁移期间两套系统同时在线,新业务先写到 RustFS,老数据慢慢搬;全部搬完、正式切流量之前再跑一次增量同步,把这期间 MinIO 上新改动的数据补齐,验证没问题再把 MinIO 下线。这样整个过程对业务基本没有影响。

另外官方仓库里也提到,RustFS 支持和 MinIO、Ceph 这些 S3 兼容平台之间做迁移和共存,磁盘格式层面的兼容也在推进,不过这一项目前同样标的是预览。

一条 Docker 命令跑起来,但有个坑要先说

官方下载页的服务端安装段

本机跑起来就一条命令。

docker run -d --name rustfs -p 9000:9000 -p 9001:9001 -v rustfs-data:/data rustfs/rustfs:latest

但用 Docker 之前有个坑必须先处理。 容器是以非 root 用户 rustfs(UID/GID 10001:10001)运行的,如果你要把宿主机的目录挂进去,得先保证那个目录对这个用户可写,否则启动时直接权限拒绝。官方中文文档给的示例是先建目录再改属主。

mkdir -p data logs
chown -R 10001:10001 data logs

不想用 Docker 的话,Linux 上跑官方的一键脚本。

curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh

装完打开 http://localhost:9001 就是控制台,9000 是数据端口、9001 是界面端口,别搞混。建桶、传文件、配权限,界面上点一点就完事;想试 S3 Table,建桶的时候把「启用表存储桶」打开,然后接 Spark 或者 DuckDB。

还有一条安全提醒必须说。 官方下载页的注意事项里写着,装完请立即修改 RUSTFS_ACCESS_KEY 和 RUSTFS_SECRET_KEY,禁止使用默认值 rustfsadmin。一个存储服务挂着默认密钥暴露在网上是什么后果,不用多讲。

如果服务跑在 Kubernetes 上,可以用官方 Operator 部署,多租户管理和存储池扩容都能自动化,安装两条命令。

helm repo add operator https://operator.rustfs.com
helm install operator operator/rustfs-operator

装完会起两个 pod,一个是 Operator 自己,一个是它自带的控制台。创建租户提交一个 Tenant 配置就行,比如指定 4 个节点、每个节点 4 块盘,剩下的调度、初始化、部署都交给 Operator。

官网的下载页里 Windows、macOS、Linux 都有对应版本,安装方式也有源码编译、二进制包、Docker、Kubernetes 四条路,按自己的环境选就行。

换不换,看完这四条再决定

对象存储这个领域已经很多年没有新玩家发展得这么快了。一年三万 Star,功能和 MinIO 基本对齐,控制台完整免费,S3 Table 这种别人收费的功能也开源了,协议还是 Apache 2.0,商用基本不用操心。

但决定动手之前,有四条边界得先记住。

一是 S3 Table 与 MinIO 磁盘格式兼容这两项,官方标的状态都还是预览,别按已发布的功能去规划。

二是要长期跑生产,默认密钥这件事当天就得改掉,容器挂载目录的属主也得先处理。

三是 S3 兼容是「已支持特性范围内的广泛兼容」,不是逐条 100% 对齐,官方有兼容性清单,关键业务切之前值得逐条过一遍。

四是它的快速成长里有相当一部分是 MinIO 让出来的窗口,接下来能不能把窗口变成护城河,还得看后续版本。

MinIO 停止维护之后,这个位置总要有人来填。从现在的功能完成度和社区势头看,RustFS 是最接近的一个。不管有没有替换打算,都可以花点时间装一个试试。

仓库地址是 https://github.com/rustfs/rustfs 。最后交代一句,我没有实际部署过 RustFS,上面的功能描述来自官方 README 与来源正文,来源作者那段 Spark 例子实测是他自己跑的。

文章目录
  1. 1. 一半是对手让出来的位置
  2. 2. 定位很直白,就是来当平替的
  3. 3. 保证数据完好,靠的是三件配套的机制
  4. 4. 那个被砍掉的网页界面,它整个拿出来免费给
  5. 5. 表格能力刚放出来,但官方自己标的是预览
  6. 6. 搬家的成本,难点在数据不在代码
  7. 7. 一条 Docker 命令跑起来,但有个坑要先说
  8. 8. 换不换,看完这四条再决定