指南概览
Pulse Durable 为 Pulse 图增加检查点存储与恢复。适合已经有明确节点边界、希望在程序中断后复用已完成步骤的工作流,例如分阶段文档处理、批量任务或长时间计算。
Pulse 负责图定义、依赖调度、切面和本次执行的观测;Durable 负责保存完整节点成果、尝试状态,并在新执行中恢复有效成果。宿主仍负责启动进程、提供输入、选择运行身份和处理外部副作用。
开始之前
需要 Go 1.26 或更高版本,以及能够下载 Go 模块的环境。现行教程以目标 Durable v0.1.0 为 API 基线、依赖 Pulse v0.5.0,不代表已经发布;状态以 GitHub Releases 为准,tag 发布前安装命令尚不可用。最小示例使用 MemoryStore,恢复教程使用 filestore;也有完整的 SQLite 和 PostgreSQL 教程。
如果还不熟悉 Pulse 的图、类型化 Key 和声明出口,可以先阅读 Pulse 快速开始。Durable 教程会给出自己的完整代码与依赖版本。
按顺序完成第一次恢复
- 安装:创建模块,固定依赖,检查 Go 与 Pulse 版本。
- 快速开始:运行一个节点,读取值为
42、状态为ready的声明出口。 - 进程退出后恢复:在下游节点主动退出进程,再用新进程读取检查点并完成运行。
第三步中,上游只进入一次,下游在退出前后各进入一次。这是理解 Durable 的关键:已确认节点直接复用;未确认节点从函数开头重做。
将恢复接入业务
| 需求 | 操作页 |
|---|---|
| 将多个阶段组合为子图,并保留 Retry 进度 | 子图与重试 |
| 保存结构体、命名类型或特殊编码 | 值编码 |
| 选择存储目录,检查锁占用,接入其他后端 | 存储 |
| 使用本机 SQLite 并在第二个进程恢复 | SQLite 教程 |
| 使用 PostgreSQL,配置 DSN、权限与连接 | PostgreSQL 教程 |
业务函数已经调用外部系统,却尚未完成检查点确认时,恢复可能再次调用它。请在接入业务时确定幂等键、事务或 outbox 的边界。
核对规则与处理错误
任务页讲操作过程;参考集中定义 API 和持久记录的约束:
- 执行契约:RunID、Version、恢复兼容性、取消和恢复事件。
- 数据模型:作用域、尝试、值状态、编码与 Store 的 CAS 协议。
- 错误处理:参数错误、占用、冲突和
CheckpointError的不同处理方式。
遇到失败时,先按错误分类查明原因。存储保存报错可能发生在实际写入之后,应停止本次运行并在恢复时重读记录。重复调用 Resume 不会增加已耗尽的 Retry 预算。
当前适用范围
支持普通值、受管流、显式消息状态和静态子图;流的可靠边界见数据模型。filestore 支持本机进程退出后的恢复;MemoryStore 仅在同一进程存活期间保存记录。Durable 不提供持久等待、分布式运行管理、deterministic replay 或 exactly-once 外部副作用保证。
下一步:安装。