Watchdog 持续续租但任务一直卡住时,其他任务如何获得锁?

考查重点:锁续约与业务进度的区别。Watchdog 不判进展,卡住仍续,业务截止后确认终止或隔离再释放

本题目录

参考答案

核心回答

如果业务任务卡住,但 Redisson 客户端和续约任务仍能正常运行,Watchdog 可能持续续租,其他竞争者就可能一直拿不到这把锁。看门狗保护的是锁租约,通常不判断业务是否仍有进展;固定的租约 TTL 也不会自动变成任务总超时。

因此需要把“锁是否仍有效”和“任务是否应该继续”分别管理。等待锁的任务也应设置等待上限,避免请求无限堆积。

先确认卡在哪一层

业务线程可能阻塞在数据库、远程 HTTP、线程池等待或死锁,而续约调度仍然活着;也可能整个进程长暂停,导致续约停止,锁最终过期。两种情况的接管条件不同。

排查可结合任务开始时间、最近进度、锁 TTL 变化、续约错误、线程栈和下游超时。TTL 周期性回升说明续约仍在发生,但不证明业务有进展。不要仅凭“客户端进程活着”就把任务标记正常。

如何让其他任务安全接管

给业务设置明确的总期限、单次外部调用超时和进度判定。任务超期后先请求取消,关闭或中断可取消的阻塞调用,并在确认旧执行路径不再产生副作用后,由合法持有者释放锁。Java 中断是协作机制,发出中断请求不代表线程已经停止。

如果旧任务无法确认停止,单纯强制删除锁会让新旧任务重叠。更可靠的接管需要执行代次、资源版本或 fencing:新任务获得更高代次后,数据库或其他共享资源原子拒绝旧代次写入。对已经发出的外部调用,还需要幂等标识和结果查询,不能把删除锁当作撤回请求。

客户端完全故障时,看门狗无法续约,租约到期后其他任务可尝试获取;恢复的旧执行者依然要接受资源端的过期资格校验。

长任务怎样改造

将大任务拆成可检查点恢复的阶段,持久记录状态、owner、执行代次与进度,尽量缩短锁保护的临界区。看门狗防止正常慢任务过早失锁,任务超时防止无限占用,幂等和资源端版本控制保证重复与接管后的业务正确性。

常见追问

直接配置一个更短的 watchdog timeout 呢? 只要续约持续成功,锁仍可不断延期;而过短的租约又容易受暂停和网络延迟影响。总运行期限应作为独立业务策略。

参考资料

相关面经

2 篇

蚂蚁集团

Agent 开发工程师
实习一面
查看原面经 →
(看门狗机制下)如果任务一直卡住,其他人是不是都拿不到锁?

蚂蚁国际

AI 应用 / Agent 开发
暑期实习一面
查看原面经 →
追问
(看门狗机制下)如果任务一直卡住,其他人是不是都拿不到锁?

收录题集

1 个来源,共1 份题集

相关题目

4 题