S3 compatible · Rust 2024

把对象,吞进自己的云。

吞吞(oss)是 Rust 编写的 S3 兼容对象存储。单盘、纠删码、多站点、3-voter 强一致,再叠加全链路 TLS 与控制面滚动升级——一套服务端跑起来。

  • Apache-2.0
  • aws-cli / rclone 可用
  • Docker 一键起
项目宠物吞吞,一只装着三块彩色对象立方体的存储桶
5 个 crateoss-server · xl-s3 · xl-store · xl-client · xl-proto
EC 8+4多盘分片、quorum 写与读时修复
3 votersA/B 数据站点 + C control witness
v1.24.0 功能版2026-10-30 · M8-2 feature 5

项目介绍

吞吞(oss)是一块自己养大的对象存储:Rust 2024 编写,S3 兼容,从单盘一直长到跨站点强一致。

它不是只把文件存进去的薄壳,而是把存储内核、纠删码、集群 mesh、多站点复制、控制面和安全能力放在同一套代码里。你可以只跑一个进程做本地备份,也可以配置 3 个 voter 和 witness,让控制面在站点故障时继续工作。

项目从单盘切片开始,依次完成可用性、分布式、运维与 IAM、安全、数据流、多站点、控制面,走到 sync 桶与 Raft 强一致。2026-10-23 的能力边界清零补齐了 S3 协议细节、全链路 TLS、控制面作业/清单/分层/访问点与滚动升级;2026-10-24 的 v1.15.0 完成 AP/账户、TLS/CMK、tier 流式与多站点复制等硬化收口,v1.16.0 又补上 WebIdentity、MPU 跨节点、OSSCTL2、Batch 抢占与 M8 leader 门控等 backlog,v1.17.0 继续推进账户 MVP、DP-0 数据面握手、M7 对账与 M8 运行态 fencing;2026-10-25 的 v1.18.0 精简 README 并更新英文 README 与站点,无功能变更;2026-10-26 的 v1.19.0 完成 Wave1 地基:DP-1 数据面混版门控、能力级别 1..3 与 OSSCTL3、租户与 M8 运行态快照、维护模式与缩容只读规划;2026-10-27 的 v1.20.0 修复 Wave2 缺口:mesh gRPC 入站 TLS 物料热轮换、账户写路径改走 Raft、缩容 topology v4 与离线 apply/verify/commit/rollback,并补上真实滚动 e2e;2026-10-28 的 v1.20.1 补上账户软字节配额告警、缩容 4→3 真进程 loopback e2e,并修复 v1.20.0 源码归档的 Cargo.lock 错误;同日的 v1.21.0 补上控制台一致读、账户管理员 UI、tier 归档/直读摘要绑定与 AP 端点 registry,并修复 Raft follower 滞后导致的成员操作误 404;2026-10-29 的 v1.21.1 同步文档与站点;同日的 v1.22.0 修复桶配额并发与 follower 权限误 403,并补 tier-audit 与升级/迁移脚本;2026-10-30 的 v1.23.0 把 jobs/job_tasks 与 Restore 受理行纳入 Raft 复制(feature level 4),并修复任务重试抖动;同日的 v1.24.0 把 inventory 三表与 lifecycle 游标纳入复制(feature level 5)。每个阶段都有可运行的 e2e、验收记录和对应文档。

它适合想理解对象存储内部实现的人,也适合需要一套可自托管、可审计、能继续改的 S3 兼容服务的团队。代码是开放的,边界也写清楚了:能做什么,不能做什么,都在 README 和版本日志里。

一块对象存储,
该有的都有。

从单机盘到跨站点控制面,oss 把常用的 S3 能力做进同一条数据路径,不靠外部组件拼装。

S3 协议,现有工具直接连

aws-cli、rclone 与 S3 SDK 走标准 SigV4。大文件自动 multipart,支持 UploadPartCopy、ListMultipartUploads、partNumber、v1 列表与 HEAD Range;浏览器也能分块上传与断点续传。

v1 listMPUpartNumberRange
aws --endpoint-url http://127.0.0.1:9000 s3 ls
aws s3 cp ./backup.tar s3://backup/

EC 8+4,多盘也不怕掉一块

每盘一份命名空间镜像,分片按 quorum 写入。拔盘可读、可修,启动与周期任务负责清理残骸。

8 data4 parity

分布式 mesh

静态槽位拓扑、跨节点 quorum 读写、读修复、heal、scrub 与 rebalance,节点故障不靠重启恢复。

quorumslotshealscrub

安全与锁定

SSE-S3 / SSE-KMS、对象锁与保留期、匿名桶策略、STS 临时凭据、SK 加密存库,以及监听器/节点间/出站全链路 TLS;权限从管理员到桶主再到三档读写删。

SSETLSretentionSTSanonymous

数据会流动

事件通知接 Kafka(SASL/SSL),S3 Select 做查询,桶复制与多站点复制负责把版本送到另一端;读访问也会发 ObjectAccessed 事件。

多站点与强一致控制面

sync 桶 remote-first 写与删,stretch 2×6 数据面,3-voter Raft 控制面,witness、11 表快照、cutover 与 force recovery;控制面支持滚动升级窗口,数据面仍非滚动。图为多站点复制拓扑,强一致控制面在其上叠加 Raft 与 witness。

控制台与作业

访问点(含 -s3alias / DeleteObjects / SourceIp)、Object Lambda 与 Batch(WASM)、Inventory(Parquet/Hive)、分层(本地冷盘 / 远端 GC)与生命周期完整 Filter,以及一个能看见集群状态的 React 控制台。

v1.24.0 功能版

2026-10-30 发布 v1.24.0:M8-2 运行态复制扩展到 inventory 与 lifecycle 游标——inventory_runs/cursors/incremental 与 lifecycle_cursors 经 level-5 Raft 命令复制(独立激活标记;旧本地历史不迁移)。启用 feature 5 前需全集群升级并移除/升级旧节点;桶删除改为 apply 同事务级联。

consistent readaccounts UItier digestAP registry

发布前四闸

fmt 与 clippy -D warnings 0 警告;库测试、S3 全量 e2e、E2E_LONG、M8 与 M9 分组验证;独立安全复审按 Critical/High 清零把关。

fmtclippye2esecurity

从单盘,到强一致。

每个里程碑都带着可运行的测试与文档往前走。吞吞不是一次写完的,它是被一轮轮验收喂大的。

内核与分布式

存储内核与分布式底座

单盘直存、Multipart、Range GET、多盘 EC 8+4、gRPC mesh、跨节点 quorum 与混沌用例。

运维与安全

运维、IAM 与安全

版本控制、生命周期、桶策略、审计、heal/scrub、rebalance、多 set、SSE、对象锁与 STS。

数据流与多站点

数据流与多站点

事件通知 + Kafka、S3 Select、桶复制、站点对、LWW 控制面 changelog、快照出货与对象 outbox。

控制面与强一致

控制面与强一致

访问点、Object Lambda、Batch、Inventory、分层 Restore、sync 桶、stretch 2×6、3-voter Raft 与 witness。

2026-10

能力边界清零

补齐 S3 协议细节、全链路 TLS、控制面作业/清单/分层/访问点与滚动升级;四闸、全量 e2e 与安全复审收口。

2026-10-24

v1.15 硬化收口

AP/账户、TLS/CMK、tier 流式、多站点复制、Select Parquet、Inventory 跨账户与生命周期门控;强一致四组、控制面长跑、S3 全量 e2e 与 Web 9/9 复跑。

2026-10-24

v1.16 backlog 第二轮

WebIdentity、BZIP2、CMK 删除/rewrap、MPU 跨节点、OSSCTL2/LC-0、M6 token 远端、Batch 抢占/跨账户、M8 leader 门控、tier 清扫/预留;E2E_LONG、M8 tier/repl、M9 四组与安全复审收口。

查看完整版本日志

五个 crate,一条单向依赖。

存储内核不依赖框架,S3 适配层只做协议翻译,服务端负责把控制台、S3 与节点间通信装进一个 axum Router。

  • xl-store:提交协议、xl.meta、EC、盘布局与锁。
  • xl-s3:s3s trait 实现、SigV4、SSE、对象锁与访问点路由。
  • xl-proto / xl-client:gRPC mesh 协议与节点间客户端。
  • oss-server:控制台 API、上传、作业引擎、Raft 与 S3 fallback。

两条命令,先跑起来。

Docker 是最快路径。想改代码、做单机调试,就用源码构建。两种方式都会自动创建数据目录与管理员。

  1. 准备环境Docker 与 Compose,或者 Rust 1.89 与 protoc。
  2. 启动服务Docker 默认映射 9000 与 8080,源码模式默认 9000。
  3. 登录控制台首次启动会生成管理员口令,登录后创建访问密钥。
  4. 连接 S3把 endpoint、AK、SK 填进 aws-cli 或 rclone。
docker-compose.yml
git clone https://github.com/erikwang2013/oss.git
cd oss
docker compose up -d --build

# 首次启动后读取管理员口令
cat docker/secrets/generated.env

# S3: http://127.0.0.1:9000
# 控制台: http://127.0.0.1:8080

用你熟悉的 S3 工具。

把 endpoint 指向 oss,剩下的交给 aws-cli。建桶、上传、列目录、删除,都是标准 S3 操作。

  • 大文件自动 multipart,支持 Range GET 与断点续传。
  • 版本控制、生命周期、桶策略与对象锁按桶开启。
  • sync 桶写入先到远端,远端不可达时返回 503,不静默降级。

打开使用说明

aws-cli
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_DEFAULT_REGION=us-east-1

aws --endpoint-url http://127.0.0.1:9000 s3 mb s3://backup
aws --endpoint-url http://127.0.0.1:9000 s3 cp ./data.tar s3://backup/
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://backup/
aws --endpoint-url http://127.0.0.1:9000 s3 rm s3://backup/data.tar

最近的版本。

每个已发布版本都有对应的 tag、Release 与验收记录。完整历史在版本日志页。

v1.24.0

功能版:M8-2 inventory 三表与 lifecycle 游标 Raft 复制(feature 5)、独立激活守卫、桶删除级联。

查看
v1.23.0

功能版:M8-2 jobs/Restore 受理行 Raft 复制(feature 4)、重试抖动修复、LC-4 与 4 节点 re-ingest e2e。

查看
v1.22.0

功能版:桶配额并发、follower 权限追赶、tier-audit、升级 preflight 与单机→集群 re-ingest。

查看
v1.21.1

文档补丁:同步文档与站点,清理已删除的旧兼容线引用;无代码变更。

查看
v1.21.0

功能版:控制台一致读、账户管理员 UI、tier 摘要绑定、AP 端点 registry,修复 Raft follower 滞后误 404。

查看
v1.20.1

补丁:账户软字节配额告警、shrink 4→3 真进程 e2e、修复 v1.20.0 源码归档的 Cargo.lock。

查看
v1.20.0

Wave2 修复:mesh 入站 TLS 热轮换、Raft 账户命令、缩容 topology v4 与离线 apply/verify/commit/rollback、真实滚动 e2e。

查看
v1.19.0

Wave1 地基:DP-1 混版门控、能力级别 1..3/OSSCTL3、租户与 M8 运行态快照、维护模式与缩容只读规划。

查看
v1.18.0

文档精简:README 移除进度/验收/计划,英文 README 更新;功能与 API 无变化。

查看
v1.17.0

架构切片:账户 MVP、AP 跨账户、DP-0 数据面握手、M7 对账、M8 运行态 fencing、CMK 运维与 WebIdentity 加固。

查看
v1.16.0

backlog 第二轮:WebIdentity、BZIP2、CMK 删除/rewrap、MPU 跨节点、OSSCTL2、Batch 抢占/跨账户、M8 leader 门控。

查看
v1.15.0

硬化收口:AP 匿名/账户、TLS 热加载与 CMK、tier 流式、多站点版本复制、Select Parquet、Inventory 跨账户。

查看
v1.14.0

能力边界清零:S3 协议补全、全链路 TLS、控制面边界与滚动升级。

查看
v1.13.1

灾备恢复基线快照、Raft RPC target 校验、stretch 配对镜像比较、cutover 字段级冲突。

查看
v1.13.0

同步强一致:sync 桶、stretch 2×6、3-voter Raft 控制面与 witness。

查看
v1.12.0

控制面:访问点、Object Lambda、Batch、Inventory、分层 Restore 与控制台。

查看
v1.11.0

多站点异步复制:站点对、changelog 快照出货与对象 outbox。

查看

完整版本日志

标准 S3 API,现有工具直接连。

oss 的对外协议是 S3,直接用 aws-cli、rclone 或任意 S3 SDK 接入,不引入私有客户端。

  • API 文档:端点、认证、最小请求与协议边界。
  • oss README:安装、配置、完整 S3 操作与运维命令(随发布同步)。
  • 支持 SigV4、Multipart Upload、Range、版本控制、生命周期、桶策略、对象锁、事件通知、Select、复制与访问点。
aws-cli官方 CLI,路径风格直接连兼容
rclone同步、挂载与断点续传兼容
SDK任意 S3 SDK(SigV4)兼容
Console浏览器控制台分块上传与管理说明

下载 v1.24.0

Release 提供源码归档。当前没有预编译二进制,推荐用 Docker Compose 或按安装文档从源码构建。

赞赏二维码

赞赏二维码

扫码请吞吞喝一杯,感谢支持。

架构图

架构图

滚轮/双指缩放,拖动平移,双击切换适配/2×;点击背景或按 Esc 关闭。