Storforge
里程碑预计 40 分钟

收官:复盘与下一步

六个阶段走完,盘点你造出的系统和长出的能力;对照 Weka/Ceph/GPFS 的真实差距,规划三条继续深入的路。

学完这节你能做到

  • 完成 forge 1.0 的全量验收清单
  • 写出技术复盘:最难的三个 bug 与最值的三个决策
  • 选定下一步方向:贡献开源存储 / 深入内核 / 造轮子 2.0

forge 1.0:验收清单

六个阶段,五个 crate 长成七个,现在给 forge 打上 1.0 标签。 按你写变更方案的习惯,先列全量验收清单 —— 每一项都是前面某个里程碑的承诺,今天一次性兑付:

编号验收项来源
A1forge-store 万次随机 kill -9,重启全量校验通过里程碑①
A2位翻转注入,读路径报错而非返回脏数据里程碑①
A3forge-bench 单机达 NVMe 标称 IOPS 70% 以上里程碑②
A43 节点 kill 任一节点,读写不中断;kill leader 写恢复小于 2s里程碑③
A5forgefs 挂载后编译任务通过,中途拔节点,产物 checksum 正确里程碑④
A6重建期间业务 P99 受控(限速生效)里程碑④
A7模拟测试:一万种子过夜扫描零失败,决定论 grep 门禁在 CIL5 testing
A8全节点暴露 /metrics,Grafana 大盘三行齐全,三条告警各带 runbookL5 observability
A9三项负载较 L4 基线提升不低于 24%,性能回归 CI 每 PR 生效L5 tuning
A10CI 全绿:fmt、clippy -D warnings、test、bench 对比L0 起累积

有一项不过就不叫 1.0 —— 这是你从运维带来的底线:验收标准写下了就不打折。

全链路 demo:一镜到底

清单是给自己看的,demo 是给别人看的。准备一个 15 分钟、不剪辑、一条命令接一条命令的演示, 从裸盘走到故障演练:

# 1. 格式化三个节点的盘并起集群
forge-cli mkfs /dev/nvme1n1 --node-id 0        # 每节点执行
forge-node --config node0.toml &               # 三节点起服务
forge-cli cluster status                       # 三节点 alive,Raft 有 leader

# 2. 建文件系统并挂载
forge-cli fs create demo --stripe 4+2
forge-fuse mount demo /mnt/forge

# 3. 真实负载:在 forgefs 上编译一个项目
git clone <某个中型 C> /mnt/forge/src && make -C /mnt/forge/src -j16 &

# 4. 编译到一半,当着观众 kill 一个数据节点
kill -9 $(pgrep -f node2.toml)
# Grafana 上看:错误率不动,P99 短暂上抬,重建 backlog 开始下降

# 5. 编译完成,校验产物;节点回归,重建收敛
sha256sum /mnt/forge/src/build/*   # 与本地盘编译产物一致
forge-node --config node2.toml &   # 大盘上看 backlog 归零

一镜到底的意义在于没有藏起来的步骤。你看过太多「精心剪辑」的产品 demo, 自己的 1.0 不许这样。录屏存档,连同验收清单的执行记录一起进仓库 —— 这就是发布材料。

诚实对照表:forge 与真实系统的差距

吹嘘毁掉复盘的价值。对照 L0 第一课的那张表,现在你有资格把每一格填上「差多少、为什么」:

维度forge 1.0WekaCephGPFS
4k 随机写(单客户端)5 万级 IOPS数十万级,SPDK + DPDK + 独占核万级,走内核栈十万级,内核客户端
元数据扩展按 inode 哈希分片,粗粒度64k bucket,细粒度可搬迁多活 MDS,目录子树/哈希分布式 token,锁开销大
客户端路径FUSE,天花板明显自研,绕内核内核 CephFS 客户端内核模块
崩溃一致性验证模拟测试 + 故障注入厂商内部体系Teuthology 集群测试数十年生产打磨
快照/配额/分层/多协议全有全有全有
生产就绪否,教学系统

看清三件事。第一,机制上 forge 没有缺课:条带 EC、日志聚合、分片元数据、 Raft 共识、声明式重建,每个核心机制你都亲手写过 —— 这正是当初砍范围时保住的东西。 第二,量级差距来自工程深度:SPDK 对 io_uring、内核客户端对 FUSE、 64k bucket 对粗分片,每一档你都知道贵在哪,因为你在里程碑数据里见过这一档的墙。 第三,没做的功能是真没做:快照的写时复制、配额的分布式计数,都是再来一个 L 级阶段的工作量。

Checkpoint单选

forge 的 4k 随机写比 Weka 差了近一个量级。按这一路的里程碑数据,差距的大头在哪?

复盘:三个 bug 与三个决策

翻开这一路的 commit 和事故记录,按「最难的三个 bug、最值的三个决策」写复盘。 你的清单会不同,但大概率逃不出这几类:

最难的三个 bug(参考样本):WAL 恢复截断算错半条记录,dm-flakey 断电测试抓到, 根因是长度前缀写入与 crc 写入之间的 torn write —— 落盘顺序这种事,AI 第一版就是想不全; rename 跨分片两阶段协议在协调者崩溃时留下孤儿 dentry,模拟测试种子扫描抓到; 重启节点拿旧放置表返回 stale 读,也是种子扫描抓到。注意规律:三个里有两个是模拟测试抓的, 且都抓在上线前 —— 先建测试体系的钱在这里赚回来了。

最值的三个决策(参考样本):L0 就面向 trait 编程,L5 接模拟运行时时业务代码几乎零改动; 接口冻结纪律(L1 冻 BlobStore,L3 冻协议),让六个阶段没有一次伤筋动骨的返工; 自研 forge-bench 而不是只用 fio —— 它后来成了调优标尺和回归 CI 的地基,一件工具吃三个阶段。

复盘的另一半:你的能力面板

盘点系统,也盘点自己。六个阶段前你会看 iostat、懂故障域;现在你还能:读懂并写出 崩溃一致的落盘代码、给分布式系统设计测试与可观测体系、拿火焰图做有据可查的调优 —— 同时保留着运维的验收本能和故障直觉。「既懂怎么运维、又懂怎么实现」的复合视角, 在存储圈是稀缺品:排障时你能从现象直接推到代码层,选型时你能看穿白皮书的修辞。

下一步:三条路

forge 1.0 是毕业作品,不是终点。三条路都通,选让你眼睛发亮的那条:

  1. 贡献开源存储:你已经用过 openraft,它的 issue 区就是入口;Ceph 的下一代 OSD crimson(Seastar 框架,和 Weka 同款 shared-nothing 独占核思路)长期缺人; 曾经「不敢看源码」的项目,现在是你的主场。从修一个测试、复现一个 issue 开始。
  2. 深入内核与硬件:io_uring 再往下是 SPDK 用户态驱动、ublk、NVMe-oF; forge 的 Drive 层可以真的换成 SPDK,把那 30% 的差距亲手抹掉一半。
  3. 造轮子 2.0:带着复盘清单重新设计 —— 这次从第一天就上模拟测试, 元数据做成真正可搬迁的细粒度 bucket,客户端试试 ublk 绕开 FUSE。 第二遍造轮子的速度会让你自己吃惊。
AI 结对:执行 1.0 验收并生成发布材料pair with ai

这一次你是验收方,AI 是执行方 —— 角色和 L0 第一课完全一致,但你已经能逐行读懂 它生成的每个脚本。重点盯 release-acceptance.sh 有没有「宽松断言」 (比如超时给得过长、校验只抽样),验收脚本放水,1.0 就是自欺。

forge 准备打 1.0 标签,请协助完成发布验收:

1. 通读仓库,对照验收清单逐项给出当前状态(通过/不通过/缺证据),清单:万次 kill -9 校验、位翻转读路径报错、单机 70% 标称 IOPS、3 节点拔任一节点读写不中断、leader 故障写恢复小于 2s、forgefs 编译任务加故障注入、重建限速下 P99 受控、一万种子模拟扫描、/metrics 与告警规则齐全、三项负载较 L4 基线提升不低于 24%、CI 全绿;
2. 生成 scripts/release-acceptance.sh:把上述可自动化的验收项串成一键脚本,每项输出 PASS/FAIL 与证据文件路径,任一 FAIL 则退出码非 0;不可自动化的项(如录屏 demo)在脚本末尾打印人工检查清单;
3. 生成 CHANGELOG.md 的 1.0 段落:按 L1 到 L5 分组列出主要能力,措辞克制,每条能力后附对应验收项编号;
4. 生成 docs/limitations.md:诚实列出已知限制(FUSE 性能天花板、无快照/配额、元数据分片粒度、单一 EC 配置等),每条注明是设计取舍还是未完成。

要求:脚本里不许有跳过失败继续报成功的逻辑;所有断言阈值写成脚本顶部的变量并注释来源。

小结

  • forge 1.0 = 十项验收全过 + 一镜到底的全链路 demo,录屏和执行记录就是发布材料
  • 对照表要诚实:机制上没缺课,量级差距来自 SPDK/DPDK/内核客户端这些「做到头」的工程, 没做的功能就是没做
  • 复盘两份清单:最难的 bug 多数被模拟测试抓获,最值的决策都是早期的接口与测试投资
  • 你的增量不只是一个系统,是「运维 + 研发」的复合视角:从现象推到代码,从白皮书看穿实现
  • 三条路 —— 贡献 openraft/crimson、深入 SPDK 与内核、造轮子 2.0; 这门课到此结束,你的存储生涯翻到了新的一页
这是整条路线的最后一节 🎉