超超哥AI云计算超哥讲AI 出品

社群入口

AI 超哥 Codex 副业群

扫码加入群聊,一起交流 AI、Codex 与副业实践。

原图注明二维码于10月20日前有效;若提示过期或无法入群,请等待更新二维码。

AI 超哥 Codex 副业群入群二维码在新窗口打开原图

确认、重试、幂等与故障恢复

Redis、缓存与异步任务#Python全栈#第十五阶段#Redis、缓存与异步任务#确认、重试、幂等与故障恢复约 820 字 · 2 分钟阅读
追问显示
点击任意追问卡片可收起 / 展开

早确认与 acks_late 分别怎样影响任务失败?

追问 取到任务、开始执行、完成业务和确认之间有哪些窗口?Worker 子进程退出时,还需核对哪些拒绝或重新入队设置?

至少一次与至多一次处理分别意味着什么?

追问 重复执行和丢执行如何权衡?为什么配置延迟确认不等于得到业务上的“恰好一次”?

怎样让任务可幂等执行?

追问 唯一业务键、条件更新、状态机与外部接口幂等参数怎样组合?先查“未处理”再执行为何仍存在并发竞态?

哪些失败适合 retry,哪些应立即结束?

追问 临时网络错误、429、参数错误和权限不足如何区别?重试次数、退避、抖动和最终失败通知怎样设计?

Celery retry 与普通重新投递有什么差别?

追问 任务标识、异常信号和后续代码执行怎样变化?autoretry 范围过宽为何可能反复执行程序缺陷或不可重复副作用?

数据库提交与投递任务之间怎样避免丢任务或读取未提交数据?

追问 提交后投递能避免什么,仍会留下什么窗口?Outbox 怎样把待投递事实与业务变更一起保存,再可靠分发?

Redis Broker 的 visibility_timeout 如何影响重新投递?

追问 长任务、延迟确认与 ETA/countdown 在所用版本下怎样受影响?超时设置过短或过长分别可能产生重复和恢复迟缓,为什么不能靠调大值实现恰好一次?

任务网络超时、软时间限制与硬时间限制有什么区别?

追问 终止进程、捕获清理与底层调用超时怎样配合?并发池和操作系统支持为何需要核对,强制终止能否撤销已完成的远程操作?

revoke 与业务取消应该怎样区分?

追问 未执行任务和正在执行任务如何处理?强制终止为何可能误伤或破坏资源状态,任务如何在检查点配合取消标记?

任务执行完业务后、确认之前 Worker 退出,会发生什么?

追问 重新投递时怎样判断操作已经成功?数据库结果、文件写入与外部通知各怎样避免重复效果或提供对账依据?

核对资料: Celery 任务指南、Celery Redis Broker 与结果后端。