Skip to content
阅读进度

Lease、Heartbeat、重试、Dead Letter 与幂等怎样一起处理宕机? ​

返回 EachOf 项目 目录

项目版本说明

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

标准回答 ​

Lease 让 Worker 在有限时间内拥有任务处理权,Heartbeat 延长健康任务的租约;超时后任务可以重试,持续失败的任务进入 Dead Letter 等待排查。重试意味着可能重复执行,幂等负责让重复处理不造成重复业务效果。

  • 任务及其阶段状态应持久化,进程重启后仍知道哪些待处理、哪些已完成;内存队列本身不满足这个条件。
  • 网络断开可能让租约过期,但旧 Worker 仍在算。提交时应核对处理代次或其他有效拥有权,防止旧任务与新任务同时生效。
  • 可恢复错误适合受控重试,永久错误应及时隔离;Dead Letter 需要原因、次数和人工重放入口,重放仍须遵守幂等。

通俗例子 ​

A 领任务后失去心跳,B 在租约过期后接手。A 随后恢复并提交结果:不能只看它拿着原任务 ID 就放行,需要判断旧处理权是否仍有效。

深入解释 ​

**任务必须可恢复:**任务及其阶段状态应持久化,进程重启后仍知道哪些待处理、哪些已完成;内存队列本身不满足这个条件。

**租约不代表旧进程已停止:**网络断开可能让租约过期,但旧 Worker 仍在算。提交时应核对处理代次或其他有效拥有权,防止旧任务与新任务同时生效。

**失败分流要可操作:**可恢复错误适合受控重试,永久错误应及时隔离;Dead Letter 需要原因、次数和人工重放入口,重放仍须遵守幂等。

追问与回答 ​

Exactly-once 做到了吗? ​

简历只确认重试与幂等,通常应说明允许重复执行、控制重复效果;不要扩大为每个处理步骤只运行一次。

心跳多久一次? ​

依据任务时长、容错恢复目标和存储压力解释真实参数;简历没有给出数值。

易混淆点 ​

拿到租约不代表永远拥有任务,心跳超时也不证明进程已经死亡。

进一步举证 ​

  • 补齐任务状态、租约字段、心跳间隔和重试上限。
  • 准备提交前宕机、提交后回执丢失、旧 Worker 恢复三类结果。

内容来源 ​

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