Skip to content
阅读进度

后台任务为什么能恢复? ​

返回 EachOf 项目 目录

项目版本说明

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

标准回答 ​

任务会失败、超时和重复执行,所以系统要能重新分配任务,并让重复提交不会造成重复副作用。

用“领任务”理解租约 ​

一个 Worker 从 Core 领取 Task,同时取得有期限的执行资格,叫Lease(租约)。处理期间发送**Heartbeat(心跳)**告诉 Core 自己仍在工作。进程崩溃或失联后,租约到期,任务可以重新安排。

这比“在内存里标记正在执行”更可靠,因为处理器或主机重启后,任务状态仍保存在外部。

为什么重复执行不可避免 ​

Worker 做完了,提交请求的回复却在网络中丢失。Worker 无法判断服务端有没有成功,只能查询或重试。租约过期后,新旧 Worker 也可能短时间都以为自己在做同一项任务。

EachOf 的架构约束是任务至少一次执行(at-least-once),提交路径具备幂等性(idempotency)。它不等于任务永远只运行一次,而是重复交同一结果不会重复制造本应只有一份的权威数据。

幂等不只是加一个请求 ID ​

外部操作根据范围、类型、调用者、输入、有效策略等形成语义约束。同一个幂等键对应同一请求,返回原操作;同一个键被拿来提交不同请求,应报冲突。

在已查看的抽取提交实现中,陈述与事件采用确定性标识和已存在检查等方式处理重复写入。不同任务的幂等细节要按各自提交路径检查。

故障场景怎么解释 ​

场景机制目的
处理器中途退出租约、心跳、重新调度工作不被永久卡住。
模型接口暂时失败有限重试与失败状态恢复短暂故障,同时避免无休止消耗。
结果提交两次幂等提交避免重复写入。
上游任务最终失败依赖管理,取消受影响后继不拿不存在的输入继续计算。
旧 Worker 晚交结果任务/租约校验与来源版本检查防止过期结果覆盖当前状态。

与你熟悉的 Android 怎么联系 ​

可以把 Processor 类比为后台工作执行者,把 Core 调度器类比为管理任务生命周期的服务。但线程池只管理当前进程中的线程,不能直接提供跨机器租约、持久化任务和提交一致性。

自查:幂等能保证模型每次输出相同吗?

不能。模型输出是否一致与提交副作用是否重复是两回事。幂等关注同一业务操作重复请求、重复提交时,系统状态是否被重复或错误改变。

内容来源 ​

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