RFD 0419: Only YOU can prevent unwinding sagas
本文是 Oxide Computer 的公开 RFD 419,探讨如何为分布式 saga 编写正确的节点。文章首先定义正确 saga 节点需满足的四个属性:补偿动作应尽量回滚前向动作或使系统保持一致、前向动作必须幂等、原子性(避免多步状态变更)以及必须得到已知结果。随后列举常见陷阱,包括在参数中使用名称引发 TOCTOU、动态状态变更的循环、无补偿动作的节点、中间状态可见导致并发 saga 冲突,以及删除与创建 saga 交错执行。文章强调 saga 并非事务,节点执行间隔可能很长,作者必须考虑重复执行、并发执行和跨时间重复的“企鹅”问题,并建议通过软删除和幂等端点来支持重试。最后指出这些约束需扩展到被调用的守护进程及其嵌套路径,但未给出强制机制,依赖代码作者和评审者的纪律。
推荐收录。本文系统总结了分布式 saga 节点正确性的四个核心属性(补偿、幂等、原子、已知结果),并列举了大量来自 Oxide 真实工程(如磁盘删除、快照创建、NIC 附加)的陷阱与应对模式,如避免参数用名、处理动态步数、防范并发 saga 交错。对设计分布式任务编排、微服务补偿流程或需要保证最终一致性的后端工程师极具参考价值,可直接迁移其检查清单。主要不足是缺少自动化强制手段,依赖作者与评审者纪律。