任务状态同步系统生产设计:全链路、状态机、实时通知与高可用
真正可靠的任务看板,不是“WebSocket 一直在线”,而是:状态先成为可恢复的事实,通知只负责让事实更快到达,任何一层短暂故障后都能重新收敛到正确状态。
文件解析、AI 生成、视频转码、报表导出这类异步任务,通常会经过多个服务和步骤。用户真正关心的往往不是复杂的工作流编排,而是几个朴素问题:
- 我的新任务是否已经创建?
- 当前是等待、运行、成功,还是失败?
- 当前由哪个服务执行什么功能,不同功能的数据该如何展示?
- 哪个步骤正在执行,已经用了多久?
- 步骤失败、自动重试或执行器失联时,用户如何收到明确告知?
- 页面断线、刷新或切到后台后,会不会永远停在旧状态?
- 服务多副本、节点重启、网络闪断时,状态通知是否仍能恢复?
本文设计一套专注于任务状态、步骤状态和耗时展示的生产链路。它不负责启动下一步、不替代工作流引擎,也不把实时消息系统当数据库。
最终方案可以概括为:
Business API 创建 workflowId 与独立 taskId
→ Worker 按 taskId 上报状态
→ Task Status Service 事务校验与落库
→ 同事务写 MySQL Outbox
→ Outbox Relay 领取并调用 Centrifugo 发布
→ 用户摘要频道 + 任务详情频道
→ 前端按 version 合并
→ 恢复失败时重新读取数据库快照


