1. 课程导论:DAG任务调度在微服务架构中的位置、为什么需要关注服务边界与限界上下文

1.1 微服务架构中的DAG任务调度:从单体到分布式

在单体架构时代,任务调度通常是一个内嵌的cron表达式或一个简单的线程池。进入微服务架构后,业务逻辑被拆分为多个独立的服务,原本线性的任务流演变为复杂的、跨服务的依赖关系。DAG(有向无环图)任务调度因此成为微服务编排的核心模式。

DAG任务调度在微服务架构中的典型位置如下图所示:

核心定位: DAG调度服务位于业务服务层与基础设施层之间,作为编排中枢,负责解析任务依赖、触发执行、收集状态并处理失败重试。
DAG任务调度在微服务架构中的位置 DAG任务调度在微服务架构中的位置 业务服务层 订单服务 | 支付服务 | 库存服务 | 通知服务 DAG任务调度服务(编排中枢) DAG解析 | 依赖管理 | 状态追踪 | 失败重试 基础设施层 消息队列(Kafka/RabbitMQ) | 数据库(PostgreSQL/Redis) | 容器编排(K8s) 说明:DAG调度服务不直接执行业务逻辑,而是通过事件驱动或RPC调用触发下游服务

1.2 为什么需要关注服务边界与限界上下文

在微服务架构中,DAG任务调度面临一个核心矛盾:任务依赖的全局性与服务边界的独立性。如果不加约束地让调度服务直接感知所有服务的内部细节,将导致以下问题:

问题 表现 后果
紧耦合 调度服务直接调用业务服务的数据库或内部API 业务服务变更导致调度频繁修改
边界模糊 任务定义中混入多个领域的逻辑 职责不清,难以维护和测试
数据一致性 跨服务事务缺乏明确的边界控制 分布式事务失败后难以回滚
可观测性差 任务状态散落在多个服务中 排查问题需要跨服务追踪
架构警示: 忽视服务边界,DAG调度服务会退化为“分布式单体”——表面上服务化了,实际上仍然是一个紧耦合的调度大泥球。

1.3 限界上下文:为DAG调度划定“势力范围”

领域驱动设计(DDD)中的限界上下文(Bounded Context)为DAG任务调度提供了清晰的边界划分依据。每个限界上下文拥有独立的领域模型、数据存储和业务规则,上下文之间通过上下文映射(Context Map)进行协作。

在DAG调度场景中,典型的限界上下文划分如下:

DAG调度相关的限界上下文划分 DAG调度相关的限界上下文划分 调度上下文 DAG定义 任务依赖解析 执行计划生成 执行上下文 任务实例管理 状态追踪 失败重试策略 监控上下文 执行日志 指标采集 告警通知 上下文映射规则:调度上下文 → 执行上下文(事件驱动) 执行上下文 → 监控上下文(异步上报) 核心原则:每个限界上下文只关注自己领域内的职责,通过事件或API进行松耦合协作 避免跨上下文直接访问数据库或内部模型

1.4 课程核心收益

通过本课程,你将掌握:

  • 如何识别DAG调度中的限界上下文——从业务需求出发,划分清晰的领域边界。
  • 如何设计上下文之间的映射关系——使用事件、API网关、消息队列等模式进行协作。
  • 如何避免常见的边界陷阱——如“共享数据库”、“万能调度服务”、“状态耦合”等反模式。
  • 如何落地可扩展的DAG调度架构——结合DDD战术模式(聚合、实体、值对象、领域事件)实现调度服务。
学习建议: 本章是后续所有章节的基础。建议在阅读后续内容前,先梳理你当前项目中DAG调度涉及的服务和依赖关系,尝试画出初步的限界上下文草图。