S3 协议,现有工具直接连
aws-cli、rclone 与 S3 SDK 走标准 SigV4。大文件自动 multipart,支持 UploadPartCopy、ListMultipartUploads、partNumber、v1 列表与 HEAD Range;浏览器也能分块上传与断点续传。
aws --endpoint-url http://127.0.0.1:9000 s3 ls
aws s3 cp ./backup.tar s3://backup/
吞吞(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 能力做进同一条数据路径,不靠外部组件拼装。
aws-cli、rclone 与 S3 SDK 走标准 SigV4。大文件自动 multipart,支持 UploadPartCopy、ListMultipartUploads、partNumber、v1 列表与 HEAD Range;浏览器也能分块上传与断点续传。
aws --endpoint-url http://127.0.0.1:9000 s3 ls
aws s3 cp ./backup.tar s3://backup/
每盘一份命名空间镜像,分片按 quorum 写入。拔盘可读、可修,启动与周期任务负责清理残骸。
静态槽位拓扑、跨节点 quorum 读写、读修复、heal、scrub 与 rebalance,节点故障不靠重启恢复。
SSE-S3 / SSE-KMS、对象锁与保留期、匿名桶策略、STS 临时凭据、SK 加密存库,以及监听器/节点间/出站全链路 TLS;权限从管理员到桶主再到三档读写删。
事件通知接 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 控制台。
2026-10-30 发布 v1.24.0:M8-2 运行态复制扩展到 inventory 与 lifecycle 游标——inventory_runs/cursors/incremental 与 lifecycle_cursors 经 level-5 Raft 命令复制(独立激活标记;旧本地历史不迁移)。启用 feature 5 前需全集群升级并移除/升级旧节点;桶删除改为 apply 同事务级联。
fmt 与 clippy -D warnings 0 警告;库测试、S3 全量 e2e、E2E_LONG、M8 与 M9 分组验证;独立安全复审按 Critical/High 清零把关。
每个里程碑都带着可运行的测试与文档往前走。吞吞不是一次写完的,它是被一轮轮验收喂大的。
单盘直存、Multipart、Range GET、多盘 EC 8+4、gRPC mesh、跨节点 quorum 与混沌用例。
版本控制、生命周期、桶策略、审计、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。
补齐 S3 协议细节、全链路 TLS、控制面作业/清单/分层/访问点与滚动升级;四闸、全量 e2e 与安全复审收口。
AP/账户、TLS/CMK、tier 流式、多站点复制、Select Parquet、Inventory 跨账户与生命周期门控;强一致四组、控制面长跑、S3 全量 e2e 与 Web 9/9 复跑。
WebIdentity、BZIP2、CMK 删除/rewrap、MPU 跨节点、OSSCTL2/LC-0、M6 token 远端、Batch 抢占/跨账户、M8 leader 门控、tier 清扫/预留;E2E_LONG、M8 tier/repl、M9 四组与安全复审收口。
存储内核不依赖框架,S3 适配层只做协议翻译,服务端负责把控制台、S3 与节点间通信装进一个 axum Router。
Docker 是最快路径。想改代码、做单机调试,就用源码构建。两种方式都会自动创建数据目录与管理员。
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
# 需要 Rust 1.89+ 与 protoc
git clone https://github.com/erikwang2013/oss.git
cd oss
cargo build --release -p oss-server
OSS_ADMIN_USER=admin \
OSS_ADMIN_PASSWORD='change-me-please' \
./target/release/oss-server serve
# 控制台
cd web && npm ci && npm run dev
把 endpoint 指向 oss,剩下的交给 aws-cli。建桶、上传、列目录、删除,都是标准 S3 操作。
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 与验收记录。完整历史在版本日志页。
功能版:M8-2 inventory 三表与 lifecycle 游标 Raft 复制(feature 5)、独立激活守卫、桶删除级联。
功能版:M8-2 jobs/Restore 受理行 Raft 复制(feature 4)、重试抖动修复、LC-4 与 4 节点 re-ingest e2e。
功能版:桶配额并发、follower 权限追赶、tier-audit、升级 preflight 与单机→集群 re-ingest。
文档补丁:同步文档与站点,清理已删除的旧兼容线引用;无代码变更。
功能版:控制台一致读、账户管理员 UI、tier 摘要绑定、AP 端点 registry,修复 Raft follower 滞后误 404。
补丁:账户软字节配额告警、shrink 4→3 真进程 e2e、修复 v1.20.0 源码归档的 Cargo.lock。
Wave2 修复:mesh 入站 TLS 热轮换、Raft 账户命令、缩容 topology v4 与离线 apply/verify/commit/rollback、真实滚动 e2e。
Wave1 地基:DP-1 混版门控、能力级别 1..3/OSSCTL3、租户与 M8 运行态快照、维护模式与缩容只读规划。
文档精简:README 移除进度/验收/计划,英文 README 更新;功能与 API 无变化。
架构切片:账户 MVP、AP 跨账户、DP-0 数据面握手、M7 对账、M8 运行态 fencing、CMK 运维与 WebIdentity 加固。
backlog 第二轮:WebIdentity、BZIP2、CMK 删除/rewrap、MPU 跨节点、OSSCTL2、Batch 抢占/跨账户、M8 leader 门控。
硬化收口:AP 匿名/账户、TLS 热加载与 CMK、tier 流式、多站点版本复制、Select Parquet、Inventory 跨账户。
能力边界清零:S3 协议补全、全链路 TLS、控制面边界与滚动升级。
灾备恢复基线快照、Raft RPC target 校验、stretch 配对镜像比较、cutover 字段级冲突。
同步强一致:sync 桶、stretch 2×6、3-voter Raft 控制面与 witness。
控制面:访问点、Object Lambda、Batch、Inventory、分层 Restore 与控制台。
多站点异步复制:站点对、changelog 快照出货与对象 outbox。
oss 的对外协议是 S3,直接用 aws-cli、rclone 或任意 S3 SDK 接入,不引入私有客户端。
Release 提供源码归档。当前没有预编译二进制,推荐用 Docker Compose 或按安装文档从源码构建。
项目由个人持续维护。扫码打赏不会解锁额外功能,但会让下一次迭代来得更快一点。
点击二维码放大
点击二维码放大