3. 任务调度平台整体架构:调度器、执行器、任务仓库、触发器、监控模块的职责与交互关系

在微服务架构下,任务调度平台不再是单体应用中的一个模块,而是由多个职责单一、独立部署的微服务组件构成的分布式系统。理解调度器、执行器、任务仓库、触发器、监控模块这五大核心组件的职责与交互关系,是设计稳定、可扩展的调度平台的基础。

3.1 五大核心组件职责概览

下表从职责边界、数据存储、典型实现三个维度,对五个核心组件进行对比:

组件 核心职责 数据存储 典型实现
调度器 (Scheduler) 解析触发规则,生成调度计划,分发任务实例 调度队列、任务实例表 Quartz Scheduler、xxl-job 调度中心
执行器 (Executor) 接收任务实例,执行具体业务逻辑,上报执行状态 执行日志、本地缓存 Java 线程池、Go Worker Pool
任务仓库 (Task Repository) 持久化任务定义、版本管理、元数据存储 关系型数据库 (MySQL/PostgreSQL) JPA Repository、MyBatis Mapper
触发器 (Trigger) 定义任务触发条件(时间、事件、依赖) 触发器配置表 Cron 表达式、事件监听器、DAG 依赖检查
监控模块 (Monitor) 采集执行指标,检测异常,发送告警 时序数据库 (Prometheus/InfluxDB) Metrics 采集、告警规则引擎

3.2 组件交互关系与核心流程

下图展示了任务从创建到执行完成的完整交互链路:

任务调度平台核心组件交互图 任务仓库 触发器 调度器 执行器 监控模块 读取任务定义 触发信号 分发任务实例 上报执行状态 告警/回调 交互要点: 调度器是中枢,负责协调触发器、任务仓库和执行器;监控模块旁路采集,不阻塞主调度链路。

3.3 组件职责详解

3.3.1 调度器 (Scheduler)

调度器是整个平台的决策中心。它从任务仓库加载任务定义,结合触发器的规则生成调度计划,并将任务实例分发给合适的执行器。调度器必须支持高可用部署,避免单点故障。

  • 核心能力:任务分片、负载均衡、失败重试、阻塞处理策略。
  • 关键设计:调度队列使用 Redis 或数据库锁保证任务不被重复调度。

3.3.2 执行器 (Executor)

执行器是实际执行任务逻辑的工作节点。每个执行器实例注册到调度器,接收任务实例后通过线程池或协程池并发执行。执行器需要上报心跳和执行结果,支持优雅关闭。

  • 核心能力:任务执行、日志记录、结果回调、资源隔离。
  • 关键设计:执行器与调度器之间通过 HTTP/RPC 通信,执行器无状态,便于水平扩展。

3.3.3 任务仓库 (Task Repository)

任务仓库负责所有任务元数据的持久化存储,包括任务定义、参数、超时设置、重试次数等。它提供版本管理能力,支持任务定义的灰度发布和回滚。

  • 核心能力:CRUD 操作、版本快照、标签分类、权限控制。
  • 关键设计:任务定义与任务实例分离,实例数据按时间分表存储。

3.3.4 触发器 (Trigger)

触发器定义了任务何时被调度。支持多种触发类型:

触发类型 描述 示例
Cron 触发 基于时间表达式周期性触发 0 0/5 * * * ?(每5分钟)
事件触发 监听消息队列或数据库变更事件 订单创建后触发结算任务
依赖触发 上游任务完成后触发下游任务 ETL 任务链中的 DAG 依赖
手动触发 运维人员通过 API 或控制台手动执行 临时数据修复任务

3.3.5 监控模块 (Monitor)

监控模块负责全链路可观测性。它采集调度延迟、执行耗时、失败率、队列积压等指标,并在异常时触发告警。监控模块不参与调度主流程,避免对核心链路造成影响。

  • 核心能力:指标采集、日志聚合、告警通知、Dashboard 展示。
  • 关键设计:使用 Prometheus + Grafana 作为指标存储和可视化方案,告警规则支持静默和升级。
设计建议: 在 OpenAPI 契约设计中,监控模块的接口应定义为“旁路上报”模式,即执行器通过异步方式上报状态,调度器不依赖监控模块的响应来继续调度,避免监控系统故障导致调度中断。

3.4 交互关系总结

五个组件的交互遵循以下原则:

  1. 调度器为中心:所有调度决策由调度器统一做出,执行器不主动拉取任务。
  2. 异步解耦:执行器上报状态、监控模块采集指标均采用异步方式,不阻塞主流程。
  3. 数据流向清晰:任务定义从仓库流向调度器,任务实例从调度器流向执行器,执行状态从执行器流向监控模块。
  4. 故障隔离:任一组件宕机不影响其他组件的独立运行,调度器通过心跳检测执行器健康状态。
架构要点: 在微服务任务调度平台中,调度器与执行器之间的通信协议(如 gRPC 或 RESTful API)是 OpenAPI 契约设计的核心边界。建议将调度器对外暴露的接口定义为“任务分发接口”和“执行器注册接口”,将执行器对外暴露的接口定义为“心跳上报接口”和“结果回调接口”,形成清晰的 API 网关分层。