Skip to content
阅读进度

Operations DAG 如何组织异步工作? ​

返回 EachOf 项目 目录

项目版本说明

这些问答整合历史设计与实现资料;当前 main 分支 README 以工作包描述建设状态。具体能力、实验数据与设计目标的边界见项目状态与证据。

标准回答 ​

一次业务操作可以拆成有依赖关系的任务,例如先提取再泛化或生成向量。DAG 表达前置关系,任务状态保存在数据库,Worker 领取已满足依赖的工作。这样进程重启后可以继续判断哪些完成、哪些待处理,而不依赖某个内存 goroutine 是否还在。

当前代码在领取前检查任务状态、not-before、未完成依赖、Space 状态和来源是否仍有效。任务具有 leased、retry_wait、commit_pending、succeeded、dead、canceled 等运行状态,失败不是简单回到一个无限重试队列。

需要区分操作完成与某一个任务完成。依赖图过细会增加调度与事务成本,过粗则难以复用和诊断;拆分粒度应以独立失败、重试和提交边界为依据。不能从“使用 DAG”推导出无限并行能力。

追问与回答 ​

上游失败后下游应该怎么办 ​

根据失败类别决定等待重试、取消或进入终止态,不能在输入未成立时继续运行。报告应给出阻止推进的具体依赖。

为什么不用内存队列先做完 ​

短任务可以更简单,但长任务和进程故障需要持久进度。选择持久调度是为恢复和治理付出复杂度,并非任何小功能都必须用 DAG。

易混淆点 ​

  • 用提交到线程池表示任务已经可靠持久化。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。