跳转到主要内容
图以 Pregel 风格的 plan → execute → commit 超步运行。一个超步中的任务可以并行执行,但更新始终按编译计划顺序通过 reducer 合并,因此相同输入和相同外部结果产生稳定状态。

Pending writes 为什么重要

节点成功后,其结果在兄弟节点完成前先被持久化。如果同一超步的另一节点失败、进程退出或触发 interrupt,恢复时会复用已成功结果,只重新执行缺失任务。 task identity 由 graph version、基准 checkpoint、namespace 和 task path 生成,不包含 Worker ID 或交付 attempt。这使租约回收和 run 重试仍能命中原 pending write。

持久化模式

状态与副作用

LingxiGraph 保证 checkpoint commit 幂等,并避免重复归并状态;它无法自动撤销已经发生的外部 API 调用。节点调用支付、邮件、工单等有副作用服务时,必须把 runtime.idempotency_key 传给下游并在业务侧建立唯一约束。
外部调用采用至少一次语义。进程可能在远端成功之后、checkpoint 提交之前退出;没有下游去重就可能重复产生副作用。

历史、fork 与恢复

  • get_state(config) 获取最新或指定 checkpoint;
  • get_state_history(config) 按 lineage 读取历史;
  • fork(config, values, as_node=...) 从历史状态创建明确的新分支;
  • interrupt(value) 产生耐久暂停,使用 Command(resume=...) 或 Run resume API 继续。
回滚不属于 thread 并发策略。需要从旧状态重跑时创建 fork,使 lineage 可审计且不会破坏原历史。