外观
如何理解租约、心跳与过期 Worker?
项目版本说明
这些问答整合历史设计与实现资料;当前 main 分支 README 以工作包描述建设状态。具体能力、实验数据与设计目标的边界见项目状态与证据。
标准回答
租约允许 Worker 在有限时间内处理任务,心跳用于续期或证明仍在工作。当前实现领取任务时在事务中锁定相关状态,生成租约 token 并保存摘要;完成时校验任务仍 leased、token 匹配且期限未过。
Worker 可能只是网络分区而非真正退出,租约过期后另一个 Worker 可能开始工作。旧 Worker 即使算出了结果,也不能越过租约校验提交。Token 必须足够不可预测,并限定在任务和当前尝试;心跳失败后执行者应停止假定自己仍有提交权。
租约不是防止重复计算的魔法,它主要控制被接受的结果。数据库时钟、超时配置、续期间隔和任务耗时分布要协调。代码阅读应对照 LeaseTask、Heartbeat 与 CompleteTask;不要凭常见队列经验声称当前调度一定使用 SKIP LOCKED。
追问与回答
任务超过预估时间但仍正常计算
通过受控心跳续期,或拆分任务、调整合理期限;不能给无限租约。总体取消与来源失效仍应终止任务。
只有锁是否就不需要租约
数据库锁不应覆盖长时间模型调用,进程外计算仍需要可恢复所有权。事务锁与租约分别解决短期并发与跨时间执行。
易混淆点
- 以 Worker 还活着推断它仍拥有有效租约。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q153