← [ BACK_TO_NOTES ]

Async Task Queue

Async Task Queue 是将耗时操作从请求-响应链路中解耦出来的模式。在 AI Agent 应用中,它用于后台处理消息持久化、Embedding 生成、评估任务等。

#concept #evergreen #backend #architecture

[!info] related notes

Async Task Queue

[!abstract] 一句话定义 Async Task Queue 把耗时、可延迟完成的工作从请求—响应链路移到后台 Worker。它缩短前台等待并削峰,但把原本同步可见的错误,转化为任务状态、重复执行、积压、重试和最终一致性问题。

基本模型

Client
→ API validates request
→ persist task / enqueue
→ return task_id

Broker / Queue
→ Worker claims task
→ execute side effect
→ ACK / retry / fail
→ update task status

关键不变量:API 返回“已受理”不等于任务已经成功完成。

什么时候值得异步

适合:

  • 图片、视频、OCR、Embedding 等长任务;
  • 邮件、通知、报表、数据导出;
  • 批量 Eval、索引重建;
  • 突发流量需要削峰;
  • 第三方服务慢或不稳定,但结果允许稍后完成。

不适合:

  • 用户必须立即知道成败的短事务;
  • 强依赖当前请求事务原子提交的动作;
  • 没有任务状态、重试和观测能力的小系统。

任务状态机

pending
→ running
→ succeeded
→ failed / retrying / cancelled / dead-lettered

建议保存:

  • task_id / idempotency key;
  • task type 与 version;
  • payload reference;
  • status、attempt、next_run_at;
  • owner / lease;
  • created / started / completed time;
  • last error 与 trace ID。

[!warning] Queue 不是任务数据库 Broker 负责交付,业务系统仍应有可查询的任务状态和结果。只靠消息是否还在 Queue,无法稳定回答用户“任务现在怎么样”。

ACK、Lease 与故障窗口

典型 Worker 流程:

receive / claim
→ mark or lease running
→ execute
→ persist result
→ ACK

如果执行成功后、ACK 前崩溃,Broker 会再次投递。于是任务处理通常需要:

At-least-once Delivery
+ Idempotent Worker
+ Durable Task State

如果先 ACK 再执行,Worker 随后崩溃则可能永久丢任务。

Retry 不是简单重新入队

Retry 需要:

  • 区分瞬时错误和永久错误;
  • 最大次数或总时间预算;
  • Backoff + Jitter;
  • 幂等副作用;
  • Dead Letter / Manual Review;
  • 保存每次 Attempt 的错误证据。

不可解析 Payload、权限失败或业务前置条件不满足,通常不应原样无限重试。

Backpressure 与积压

Queue Depth 增长只说明“进入速度长期高于离开速度”,还要定位原因:

producer rate increased?
consumer count decreased?
per-task latency increased?
downstream dependency slow?
poison task retry loop?
hot partition / unfair routing?

治理手段:扩 Worker、限流入口、降低任务成本、按优先级隔离、设置有界容量、丢弃低价值任务或降级。

延迟、优先级与定时任务

  • Delayed Queue:到时间后才可消费;
  • Priority Queue:高优先任务先调度;
  • Scheduled Job:由调度器产生任务;
  • Retry Queue:失败后按下一次执行时间回到主链路。

优先级过多容易让低优先任务永久饥饿,必须监控等待时间而不只看总 Queue Depth。

取消语义

取消至少有三种状态:

pending task  → remove / mark cancelled
running task  → request cancellation cooperatively
completed task→ cannot undo; may need compensation

“用户点击取消”不等于已经撤销外部副作用。Worker 必须在安全检查点读取取消状态,并明确不可逆阶段。

最小工程检查表

  • API 返回 task_id,可查询状态和结果。
  • Enqueue 与业务事务之间有 Outbox / 原子持久化策略。
  • Worker 支持幂等、Lease、超时和取消。
  • Retry 有分类、预算、Backoff 和 DLQ。
  • Queue 有界,并监控 Depth、Age、Lag、Attempt 和成功率。
  • Payload 有版本,敏感数据使用引用而不是整份复制。
  • 部署和关闭时能停止接新任务并排空/释放在途任务。
创建于 2026/6/30 更新于 2026/9/4
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本