1. 课程导论:DAG调度在微服务中的价值、课程目标与前置知识、整体架构全景图

1.1 为什么微服务需要DAG调度?

在单体架构向微服务架构演进的过程中,任务调度场景发生了根本性变化。传统定时任务(如 @Scheduled、Quartz)只能解决“单点、单线、固定周期”的简单需求,而微服务环境下的业务流往往包含多个服务间的数据依赖、并行分支、超时熔断和补偿回滚。此时,有向无环图(DAG) 成为描述任务依赖关系最自然、最严谨的数学模型。

核心痛点对比: 传统调度 vs DAG调度
维度 传统定时任务 DAG任务调度
依赖关系 无(或硬编码顺序) 显式声明父子/并行依赖
执行拓扑 单线程或固定线程池 按DAG拓扑并行/串行执行
失败处理 重试或跳过 子任务回滚、边界补偿、状态机恢复
可观测性 单点日志 全链路追踪 + 节点级状态快照
典型场景 数据清理、报表生成 订单履约、ETL管道、AI推理流水线

1.2 课程目标与学习路径

本课程围绕 “Spring Boot + DAG调度边界架构” 展开,目标是让学员掌握从设计、实现到生产级故障排查的完整能力。具体分为四个层次:

  1. 原理层: 理解DAG拓扑排序、并行调度、边界状态机、任务补偿的核心算法。
  2. 架构层: 掌握在Spring Boot中集成DAG调度引擎的边界架构——调度层、执行层、状态层、持久化层的职责划分。
  3. 实践层: 手写轻量级DAG调度框架,并接入Spring Boot生命周期、事务、异步、监控。
  4. 排障层: 针对死锁、任务悬空、边界状态不一致、性能退化等典型故障,给出可复现的排查路径。
前置知识要求: 熟悉Spring Boot自动配置、@Async异步执行、线程池调优基础;了解有向图基本概念(节点、边、入度、拓扑排序);具备基本的Linux操作和JVM调优经验。

1.3 整体架构全景图

下图展示了本课程所定义的 “DAG调度边界架构” 核心分层与数据流。该架构将调度系统拆解为四个边界清晰的层次,每一层只通过定义好的接口与相邻层交互,从而在微服务环境中实现高内聚、低耦合。

DAG调度边界架构全景图 DAG调度边界架构全景图 调度层(Scheduler Layer) DAG定义解析 | 拓扑排序 | 触发策略(Cron/事件/手动)| 边界条件校验 执行层(Execution Layer) 任务节点并行/串行调度 | 线程池管理 | 超时控制 | 重试与熔断 状态层(State Layer) 节点状态机(Pending/Running/Success/Failed/Compensating)| 边界快照 | 事件溯源 持久化层(Persistence Layer) DAG定义存储 | 执行日志 | 状态快照 | 分布式锁 | 数据库/消息队列适配 边界接口契约 监控与告警

1.4 边界架构的核心设计原则

上述全景图体现了三个关键设计原则,这也是本课程后续所有章节的基石:

  • 单向依赖原则: 调度层 → 执行层 → 状态层 → 持久化层,禁止反向依赖或跨层调用。每一层只通过 边界接口 暴露能力。
  • 状态与执行分离: 执行层只负责“运行任务”,不关心任务当前处于什么状态;状态层独立维护节点状态机,即使执行层崩溃,状态层仍可恢复现场。
  • 可插拔持久化: 持久化层适配多种后端(MySQL、Redis、Kafka),调度层和执行层完全不知晓底层存储细节,便于在微服务中切换基础设施。
常见误区: 很多团队在实现DAG调度时,将状态判断逻辑直接写在任务代码中(如 if(task.getStatus() == Status.RUNNING)),导致状态与执行强耦合,一旦出现边界状态不一致,排查极为困难。本课程将反复强调“状态层独立”这一边界原则。

1.5 课程章节速览

模块 章节范围 核心产出
基础篇 第1-5章 DAG调度原理、Spring Boot集成基础、边界架构设计
进阶篇 第6-15章 并行调度引擎、状态机实现、补偿与回滚、分布式锁
实战篇 第16-25章 订单履约DAG、ETL管道、AI推理流水线、监控集成
排障篇 第26-30章 死锁分析、状态不一致修复、性能调优、生产案例复盘