scheduler 主要负责哪些业务场景
1) 定时调度:把“到点该跑的 Job”变成可执行的 run/attempt
- 扫描 cron/interval 等 schedule
- 当
next_run_at <= now 时,创建 run/attempt(入队)
- 计算并写回下一次
next_run_at
没有 scheduler:定时任务不会自动触发(除非你手动触发或已有队列残留)。
2) 编排推进:Workflow 这种“要按 DAG 推进步骤”的执行(如果你的实现是 scheduler tick 驱动)
在你们的实现里,workflow 的执行通常需要一个“tick/推进者”去:
- 从 DB 里 claim
workflow_runs(queued/running)
- 创建/推进
workflow_step_runs
- 根据 step 完成情况继续触发下游 step
没有 scheduler:workflow 可能会卡在 queued/running 的某个阶段(除非你把推进逻辑放在 worker 或 api 里)。
3) 清理与修复:超时/卡死检测、状态机收敛(看项目实现)
常见会做:
- attempt 超时标记失败
- run/workflow_run 状态收敛(所有子项结束后置 succeeded/failed)
- 补偿 next_run_at/队列一致性
worker / api 各自的典型职责
- worker:拿 attempt 执行(ssh/http/webhook 等),执行完上报结果/日志。
- api:CRUD、手动触发、查询展示。
- scheduler:把“计划/编排”变成“队列里的可执行单元”,并推动整体状态机。
- agent: 是一个“守护进程/控制器”,用于拉起/守护 worker(例如在目标机上启动 worker,或按需启动 worker)