为什么越来越多的企业选择RustFS作为对象存储?

0 阅读7分钟

在这里插入图片描述 如果你这两年在自托管对象存储里折腾,大概率在 MinIO、Ceph、SeaweedFS 之间反复横跳。某天技术群里有人甩了句"试了下 RustFS,4KB 小对象吞吐比 MinIO 快两倍多",你第一反应大概是:RustFS 是个啥?是不是又一个换皮 MinIO?

这篇就给完全没听过它的人,把来龙去脉讲清楚:它是什么、能做什么、数字怎么样、亮点和短板分别在哪里、怎么上手、以及圈子里为什么突然都在聊它。

一、RustFS 到底是什么

先把"对象存储"这个前提捋一遍。和块存储(直接给磁盘卷)、文件存储(目录树 + 文件)不同,对象存储把数据存成"对象":每个对象有一个全局唯一的 key、一段二进制数据、以及一组键值对元数据。你通过 HTTP API 按 key 读写,不用挂载文件系统,也不用管块设备。Amazon S3 把这个模型做成了事实标准,于是"兼容 S3 API"就等价于"能用 aws-cli、rclone、各类 SDK 和备份工具直接对接"。

RustFS 是一个开源的、兼容 S3 API 的对象存储服务,用 Rust 语言实现,采用 Apache 2.0 许可证,最终交付是一个静态链接的单二进制文件。它站的位置和 MinIO 几乎重合:都是"自己在家或机房里跑一套类 S3"的轻量选手,而不是 Ceph 那种需要专职团队运维的分布式全家桶。

也就是说,如果你已经熟悉 MinIO 的玩法,RustFS 的迁移成本接近于零——它的卖点之一就是"你的 S3 工具链照常工作"。

二、它能干什么:核心能力清单

一个对象存储值不值得用,先看 API 面覆盖到哪。RustFS 目前覆盖的是 S3 的 data-plane 和部分 control-plane 能力:

  • 基础读写:PUT / GET / DELETE / HEAD,按 bucket + key 寻址。
  • 大文件分片上传:multipart upload,单对象可以超过单次请求上限,适合 GB 级备份和镜像。
  • 预签名 URLpresigned URL 让你可以把临时可读或可写的链接发给外部,不用暴露密钥,做临时下载、上传回调很顺手。
  • 版本控制与生命周期:对象多版本、按前缀或天数过期删除,做备份保留策略和数据湖分层都需要。
  • 纠删码(Erasure Coding):数据切成 N 份、再算 M 份校验,分散到不同盘或节点。坏掉几块盘,数据仍能重建,这是对象存储抗磁盘故障的底层机制。
  • 分布式模式:加节点就能横向扩容量和吞吐,不用推倒重来换架构。

落到场景上,它被拿去当:备份目标盘、数据湖 / lakehouse 的存储底座、AI 训练的数据集仓库、容器镜像或 Helm chart 仓库、静态网站托管、以及日志归档。这些场景的共同点是"海量对象 + HTTP 访问",正好踩在对象存储的甜区。

三、结果如何:数字和边界

光说能力没用,得看跑分。下面是几个公开的、有边界的说明,别当成无脑结论:

小对象吞吐。在厂商自己的同机对比里(同一台机器、4KB 对象、并发一致),RustFS 的 PUT 吞吐大约是 MinIO 的 2.3 倍。

部署体积与常驻内存。单二进制约 93 MB(同类 Go 实现约 320 MB)。空闲内存稳定压在 100 MB 以内,没有 JVM 要调堆,也没有 etcd 要保活。对边缘节点和轻量 VM 来说,"拖一个 90 兆的文件就能跑"是个实打实的差别。

也要说清短板。在 100 KiB–1 MiB 这个区间的 GET 请求,RustFS 目前仍落后于 MinIO,项目自己的报告里也没回避这一点。 在这里插入图片描述

四、几个让运维省心的地方

抛开跑分,真正让团队把它放进选型清单的,往往是这几条结构性原因。

许可证。RustFS 用 Apache 2.0——无 copyleft、无源码公开义务。你可以把它嵌进闭源产品、做二次开发、闭源部署,没有协议层面的商业风险。对照的是 MinIO 在 2021 年从 Apache 2.0 切到 AGPLv3:只要你改了代码并作为网络服务对外提供,就得公开源码。对有私有集成、做专有存储产品的公司,这是实打实的法律摩擦。

Rust 带来的内存安全与无 GC。对象存储是长驻进程,两类最隐蔽的故障源是内存错误和 GC 停顿。C/C++ 有内存安全的历史包袱,Go 有高负载下不可预测的 GC 停顿。Rust 在编译期就堵住了一大类的内存安全问题,意味着"缓冲区溢出类 CVE"在语言层面就少了一块;对运维侧,同样负载下内存抖动更小,OOM kill 概率更低,半夜告警也少一截。

单二进制、少依赖。没有 JVM、没有外部元数据库、没有一堆 sidecar。拷过去、起进程,就完了。部署脚本和 CI 里的"它到底还依赖什么"清单短一大截。

五、和几个老面孔比,它站哪里

把几个常被一起对比的选项摆出来,各自适合不同的人: 在这里插入图片描述

  • vs MinIO:最大的分叉点是许可证(Apache 2.0 vs AGPLv3)。性能上小对象 RustFS 更猛,但 100KiB–1MiB 区间 MinIO 仍领先;两者部署都轻,迁移成本极低。
  • vs Ceph:Ceph 是全家桶,能力广、上限高,但需要专职团队和一套运维体系。RustFS 是"够用就好"的轻量替代,不适合已经重度依赖 RADOS / RBD 的生态。
  • vs AWS S3(托管):托管服务省心、有 24/7 SLA,代价是按量付费和锁定。RustFS 适合想自己掌控数据、对成本敏感、有能力运维的团队。

六、上手:四步跑起来

别只看对比,动手最快。一个最小可用路径:

# 1) 单节点起一个 RustFS 实例
docker run -d --name rustfs \
  -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=changeme \
  rustfs/rustfs
# 2) 把现有 rclone 远程直接指向它,配置零改动
rclone lsd rustfs: --dump headers

# 3) 用 s3-tests 验收真实 S3 兼容率(别只看宣传页的 100%)
S3_ENDPOINT=http://localhost:9000 \
S3_ACCESS_KEY=admin S3_SECRET_KEY=changeme \
python s3tests/s3tests.py

按这个顺序推进:先 docker run 起单节点,用 rclone 迁一个小桶过去;再跑 s3-tests 的 data-plane 用例,记下真实通过率;然后把读流量切过去观察一周延迟,稳定后再切写;真要上量,参考官方文档加节点横向扩展,别一上来就堆机器。

七、行业关注度:star 之外的信号

RustFS 在 GitHub 上突破 30,000 star,从开源算起不到 400 天。star 数字本身不是采用理由,但它背后有几条值得读的信号:一是"轻量自托管 S3"这个需求一直没被很好满足——MinIO 转 AGPL 之后,很多企业突然在找可闭源商用的替代品;二是 Rust 重写基础设施这股浪潮,在这类长驻、高并发的服务上确实有说服力;三是第三方技术博客和社区讨论开始把它和 MinIO 并列对比,说明它进了"备选清单"而不是"玩具"。

需要泼的冷水是:star 不等于生产采用。真正衡量它行不行的,是你自己 workloads 上的跑分、踩坑时搜不搜得到答案、以及出问题有没有人响应。这些要用前面那套 s3-tests 加真实流量灰度来验证,而不是看趋势图。 在这里插入图片描述

收尾:给你一个决策清单

如果你正在选型,按这个顺序自检:

  1. 是否需要自托管、掌控数据、对成本敏感?否 → 直接看托管 S3。
  2. 是否担心 AGPL 带来的商业风险?是 → Apache 2.0 的 RustFS 比 MinIO 省一层法务。
  3. 主要负载是大批小对象写入、数据湖、备份?是 → 值得测一版。

仓库在这里:github.com/rustfs/rust… 。先把第六节的 docker run 做了,比看十篇对比文都实在。