外观
持久化工作流与异步任务系统
目录
1. 面试结论
30 秒专业短答| 持久化工作流把长任务状态和事件写入可靠存储,使重试、恢复、定时、补偿和人工介入可审计。主链路是“提交业务任务与幂等键 → 持久化状态并投递步骤 → Worker 执行并提交结果 → 失败重试补偿或人工处理”。消息至少一次投递不等于业务 exactly-once;副作用必须幂等或可补偿,项目中必须用 Trace、失败样本和成本指标验证。
面试官为什么问: 看你能否把框架名词拆成控制流、数据契约、失败边界与选型依据,而不是只会调用 API。
2. 概念、原理与边界
小白先这样理解:快递中转每到一站都扫码,断电后从最后记录继续
快递中转每到一站都扫码,断电后从最后记录继续;任务状态对应扫码记录,队列对应运输线,补偿对应退件流程。技术上仍要由确定性代码处理权限、状态提交和终止;生活类比没有覆盖并发、版本与分布式失败。
核心机制
- 提交业务任务与幂等键:把输入和约束变成可校验契约。
- 持久化状态并投递步骤:执行主题的核心计算或控制决策。
- Worker 执行并提交结果:提交结果,并保留版本和证据。
- 失败重试补偿或人工处理:成功收口;失败按类别重试、降级或人工处理。
边界: 消息至少一次投递不等于业务 exactly-once;副作用必须幂等或可补偿。概念本身与框架无关,框架只是实现路径。
3. 技术栈与横向选型
| 技术点 ID | 技术点/环节 | 类型 | 采用方案 | 链路职责 | 版本/证据边界 |
|---|---|---|---|---|---|
| TP-WF-CORE | 持久化工作流与异步任务系统核心链路 | 机制与参考实现 | 持久化状态机加任务队列 | 完成“提交业务任务与幂等键 → 持久化状态并投递步骤 → Worker 执行并提交结果 → 失败重试补偿或人工处理” | 设计参考;动态能力以 2026-07-14 官方资料和项目基准为准 |
| 技术点 ID | 候选方案 | 优点 | 缺点/代价 | 适用场景 | 不适用场景 | 选择结论与依据 |
|---|---|---|---|---|---|---|
| TP-WF-CORE | Temporal 类工作流 | 能力完整,便于标准化 | 抽象、依赖或运维成本更高 | 约束与生态匹配的生产项目 | 只验证最小机制 | 当前参考方案;须用同数据、同预算基准验证 |
| TP-WF-CORE | 队列加数据库状态机 | 路径直接,边界透明 | 需要自行补齐工程能力 | 小规模、强定制或机制验证 | 复杂协作和快速交付 | 需求简单时优先;复杂度超过维护能力再切换 |
4. 架构与调用流程
图:架构|持久化工作流与异步任务系统组件边界
替代文本: 输入经过提交业务任务与幂等键、持久化状态并投递步骤、Worker 执行并提交结果和失败重试补偿或人工处理形成结果,策略与观测横跨链路提供约束和证据。
图表加载中…
读图结论: 核心机制位于中间两步,策略控制执行边界,观测层负责证明结果和定位失败。
架构图说明静态职责,不代表所有步骤都必须拆成独立服务;是否拆分取决于隔离、扩缩容和故障域。
图:技术调用流程|持久化工作流与异步任务系统成功与失败路径
替代文本: 调用方提交请求,控制层执行前置校验后调用核心组件;有效结果被验证并返回,异常结果进入止损、降级或人工处理。
图表加载中…
读图结论: 失败不能统一重试;先区分未执行、可重试和结果未知,再决定恢复动作。
调用流程把模型或框架能力放在受控运行时内部,授权、验证和最终完成判定不交给概率模型。
5. 最小实现与证据
python
def run(request, policy, engine, verifier):
checked = policy.validate(request)
result = engine.execute(checked)
verifier.assert_valid(result)
return result这段伪代码刻意只保留四个边界:输入校验、核心执行、结果断言和返回。生产实现还需超时、取消、幂等、版本与审计。
最小证据集: 一个正常样本、一个边界样本、一个失败注入;记录输入、输出、版本、Trace、延迟和成本。没有这些证据时,只能说“完成设计”,不能声称已上线或提升。
6. 项目落地与面试追问
示例项目: 在内部 AI 助手中用 TP-WF-CORE 承担核心链路。上线前以固定任务集比较 Temporal 类工作流 与 队列加数据库状态机,验收任务成功率、关键错误率、P95、单位任务成本和人工接管率。
面试追问:
- 持久化工作流与异步任务系统解决什么问题,又不解决什么?
- 四步链路中哪一步必须由确定性代码控制?
- 为什么当前选择 Temporal 类工作流,何时改用 队列加数据库状态机?
- 如何证明不是 Demo 恰好成功?
- 发生“消息重复或 Worker 崩溃造成重复副作用”时先查什么?
7. 生产风险与排障
生产风险演练
| 现象 | 影响 | 定位证据 | 根因 | 临时止损 | 长期修复 | 回归验证 | 监控与防复发 |
|---|---|---|---|---|---|---|---|
| 同一业务键出现多个外部执行记录 | 消息重复或 Worker 崩溃造成重复副作用,影响正确性、稳定性或成本 | event history、message_id、business_key、external log | 投递确认与业务提交之间存在双写窗口 | 按业务键暂停重复任务并对账 | 幂等收件箱、事务外盒或补偿 Saga | 重复投递、宕机恢复和乱序消息测试 | 按租户、任务和版本监控失败率、尾延迟、成本与降级率 |
排障顺序固定为:先止损并固定版本,再找首次异常证据,最后修复、重放和灰度;不要先换模型或扩大重试。
8. 参考资料
- 持久化工作流与异步任务系统一手资料,访问日期:2026-07-14。
- 本文项目与指标均为设计或故障演练证据,不代表仓库已有线上实测。
9. 总结
一句话记忆: 持久化工作流把长任务状态和事件写入可靠存储,使重试、恢复、定时、补偿和人工介入可审计。
- 核心链路:提交业务任务与幂等键 → 持久化状态并投递步骤 → Worker 执行并提交结果 → 失败重试补偿或人工处理。
- 选型:Temporal 类工作流 与 队列加数据库状态机 必须在同约束下比较。
- 边界:消息至少一次投递不等于业务 exactly-once;副作用必须幂等或可补偿。
- 排障:固定版本,沿 Trace 找首次异常,再重放验证。