调度平台核心概念:DAG、任务节点、调度策略、索引在调度中的角色

在CI/CD流水线中,调度平台承担着“编排引擎”与“执行大脑”的双重角色。要理解索引选择变更与自动回滚机制,必须先掌握调度平台的四大核心概念:DAG、任务节点、调度策略以及索引(Index)。其中,索引是连接调度实例与CI/CD制品版本的“数字坐标”,也是实现精准回滚的关键锚点。

2.1 DAG:流水线的骨架

DAG(有向无环图)是调度平台描述任务依赖关系的标准模型。每个任务是一个节点,依赖关系用有向边表示,且图中不允许存在循环依赖。在CI/CD场景中,DAG定义了从代码编译、单元测试、集成测试到部署上线的完整执行路径。

关键特征: DAG保证了任务执行的确定性——只有所有上游节点成功,下游节点才会触发。这种“无环”特性天然适合CI/CD流水线,避免死循环导致的资源耗尽。
CI/CD 流水线 DAG 示例 代码检出 编译构建 单元测试 集成测试 制品归档 生产部署

2.2 任务节点:流水线的执行单元

每个DAG节点对应一个具体的任务。在调度平台中,任务节点通常包含以下属性:

属性 说明 CI/CD 场景示例
任务类型 Shell、Python、SQL、HTTP、子流程等 Shell 执行编译脚本
超时时间 任务最大执行时长,超时自动失败 编译超时 30 分钟
重试策略 失败后重试次数与间隔 网络抖动重试 3 次
资源标签 指定执行该任务的worker/agent GPU 节点执行模型训练
参数传递 上游输出作为下游输入 构建产物路径传递给部署任务
实战建议: 在CI/CD流水线中,建议将“制品版本号”作为任务节点的全局参数传递。这样,当调度平台触发回滚时,可以通过索引快速定位到历史版本对应的制品,避免“回滚了调度实例,但制品版本不一致”的问题。

2.3 调度策略:触发与执行规则

调度策略决定了DAG何时被触发、以何种频率执行。在CI/CD场景中,常见的调度策略包括:

  • 定时调度: 按Cron表达式周期性触发,适用于夜间构建、定期回归测试。
  • 事件驱动: 监听Git仓库的Push、Merge Request、Tag等事件,触发流水线。
  • 依赖调度: 等待上游DAG或外部系统完成后再触发,适用于多阶段发布。
  • 手动触发: 运维人员通过Web UI或API手动启动流水线,常用于紧急修复或回滚。
注意: 索引变更通常发生在“事件驱动”和“手动触发”场景中。当Git Push触发新流水线时,调度平台会生成新的索引;当手动回滚时,需要将索引指向历史版本。如果调度策略与索引管理脱节,回滚后可能触发错误的依赖关系。

2.4 索引(Index)在调度中的角色

索引是调度平台为每次DAG实例分配的唯一递增数字标识。在CI/CD流水线中,索引承担着三重核心角色:

  1. 版本锚点: 索引与制品版本(如Docker镜像Tag、JAR包版本)一一对应。例如,索引 #1024 对应镜像 myapp:v1.2.3-build.1024。
  2. 执行顺序标识: 索引严格递增,确保调度实例的执行顺序可追溯。当出现故障时,可以通过索引快速定位“从哪个版本开始出现问题”。
  3. 回滚坐标: 自动回滚时,调度平台将当前索引切换到目标索引,并重新执行该索引对应的DAG实例。索引的连续性保证了回滚后不会产生“版本跳跃”导致的兼容性问题。
索引在调度实例中的角色 #1 #2 #3 #4 索引与制品版本映射关系 #1 → v1.0.0 | #2 → v1.1.0 | #3 → v1.2.0 | #4 → v1.3.0(故障) 回滚目标:将索引从 #4 切换到 #3,重新执行 v1.2.0 对应的DAG实例

2.5 核心概念关系总结

概念 类比 在索引变更与回滚中的角色
DAG 流水线的“设计蓝图” 回滚时重新执行DAG,确保依赖关系不变
任务节点 流水线的“执行步骤” 每个节点携带制品版本参数,索引变更时更新参数
调度策略 流水线的“触发开关” 手动回滚策略需要绕过定时/事件触发,直接指定索引
索引 流水线的“版本坐标” 回滚的核心操作:将当前索引指向历史版本
核心结论: 索引是调度平台中连接“DAG定义”与“制品版本”的桥梁。在CI/CD流水线中,索引变更的本质是“将DAG实例的制品版本指针从当前版本切换到目标版本”。自动回滚机制的核心,就是通过索引的快速切换,实现DAG实例的“版本级”回退,同时保持DAG结构和调度策略不变。