1. 课程导论:DAG调度在微服务中的价值、课程目标与前置知识、整体架构全景图
1.1 为什么微服务需要DAG调度?
在单体架构向微服务架构演进的过程中,任务调度场景发生了根本性变化。传统定时任务(如 @Scheduled、Quartz)只能解决“单点、单线、固定周期”的简单需求,而微服务环境下的业务流往往包含多个服务间的数据依赖、并行分支、超时熔断和补偿回滚。此时,有向无环图(DAG) 成为描述任务依赖关系最自然、最严谨的数学模型。
核心痛点对比: 传统调度 vs DAG调度
| 维度 | 传统定时任务 | DAG任务调度 |
|---|---|---|
| 依赖关系 | 无(或硬编码顺序) | 显式声明父子/并行依赖 |
| 执行拓扑 | 单线程或固定线程池 | 按DAG拓扑并行/串行执行 |
| 失败处理 | 重试或跳过 | 子任务回滚、边界补偿、状态机恢复 |
| 可观测性 | 单点日志 | 全链路追踪 + 节点级状态快照 |
| 典型场景 | 数据清理、报表生成 | 订单履约、ETL管道、AI推理流水线 |
1.2 课程目标与学习路径
本课程围绕 “Spring Boot + DAG调度边界架构” 展开,目标是让学员掌握从设计、实现到生产级故障排查的完整能力。具体分为四个层次:
- 原理层: 理解DAG拓扑排序、并行调度、边界状态机、任务补偿的核心算法。
- 架构层: 掌握在Spring Boot中集成DAG调度引擎的边界架构——调度层、执行层、状态层、持久化层的职责划分。
- 实践层: 手写轻量级DAG调度框架,并接入Spring Boot生命周期、事务、异步、监控。
- 排障层: 针对死锁、任务悬空、边界状态不一致、性能退化等典型故障,给出可复现的排查路径。
前置知识要求: 熟悉Spring Boot自动配置、@Async异步执行、线程池调优基础;了解有向图基本概念(节点、边、入度、拓扑排序);具备基本的Linux操作和JVM调优经验。
1.3 整体架构全景图
下图展示了本课程所定义的 “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章 | 死锁分析、状态不一致修复、性能调优、生产案例复盘 |