Skip to content
阅读进度

如何理解租约、心跳与过期 Worker? ​

返回 EachOf 项目 目录

项目版本说明

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

标准回答 ​

租约允许 Worker 在有限时间内处理任务,心跳用于续期或证明仍在工作。当前实现领取任务时在事务中锁定相关状态,生成租约 token 并保存摘要;完成时校验任务仍 leased、token 匹配且期限未过。

Worker 可能只是网络分区而非真正退出,租约过期后另一个 Worker 可能开始工作。旧 Worker 即使算出了结果,也不能越过租约校验提交。Token 必须足够不可预测,并限定在任务和当前尝试;心跳失败后执行者应停止假定自己仍有提交权。

租约不是防止重复计算的魔法,它主要控制被接受的结果。数据库时钟、超时配置、续期间隔和任务耗时分布要协调。代码阅读应对照 LeaseTask、Heartbeat 与 CompleteTask;不要凭常见队列经验声称当前调度一定使用 SKIP LOCKED。

追问与回答 ​

任务超过预估时间但仍正常计算 ​

通过受控心跳续期,或拆分任务、调整合理期限;不能给无限租约。总体取消与来源失效仍应终止任务。

只有锁是否就不需要租约 ​

数据库锁不应覆盖长时间模型调用,进程外计算仍需要可恢复所有权。事务锁与租约分别解决短期并发与跨时间执行。

易混淆点 ​

  • 以 Worker 还活着推断它仍拥有有效租约。

参考资料 ​

内容来源 ​

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