调度平台核心概念:DAG、任务节点、调度策略、索引在调度中的角色
在CI/CD流水线中,调度平台承担着“编排引擎”与“执行大脑”的双重角色。要理解索引选择变更与自动回滚机制,必须先掌握调度平台的四大核心概念:DAG、任务节点、调度策略以及索引(Index)。其中,索引是连接调度实例与CI/CD制品版本的“数字坐标”,也是实现精准回滚的关键锚点。
2.1 DAG:流水线的骨架
DAG(有向无环图)是调度平台描述任务依赖关系的标准模型。每个任务是一个节点,依赖关系用有向边表示,且图中不允许存在循环依赖。在CI/CD场景中,DAG定义了从代码编译、单元测试、集成测试到部署上线的完整执行路径。
关键特征: DAG保证了任务执行的确定性——只有所有上游节点成功,下游节点才会触发。这种“无环”特性天然适合CI/CD流水线,避免死循环导致的资源耗尽。
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流水线中,索引承担着三重核心角色:
- 版本锚点: 索引与制品版本(如Docker镜像Tag、JAR包版本)一一对应。例如,索引 #1024 对应镜像
myapp:v1.2.3-build.1024。 - 执行顺序标识: 索引严格递增,确保调度实例的执行顺序可追溯。当出现故障时,可以通过索引快速定位“从哪个版本开始出现问题”。
- 回滚坐标: 自动回滚时,调度平台将当前索引切换到目标索引,并重新执行该索引对应的DAG实例。索引的连续性保证了回滚后不会产生“版本跳跃”导致的兼容性问题。
2.5 核心概念关系总结
| 概念 | 类比 | 在索引变更与回滚中的角色 |
|---|---|---|
| DAG | 流水线的“设计蓝图” | 回滚时重新执行DAG,确保依赖关系不变 |
| 任务节点 | 流水线的“执行步骤” | 每个节点携带制品版本参数,索引变更时更新参数 |
| 调度策略 | 流水线的“触发开关” | 手动回滚策略需要绕过定时/事件触发,直接指定索引 |
| 索引 | 流水线的“版本坐标” | 回滚的核心操作:将当前索引指向历史版本 |
核心结论: 索引是调度平台中连接“DAG定义”与“制品版本”的桥梁。在CI/CD流水线中,索引变更的本质是“将DAG实例的制品版本指针从当前版本切换到目标版本”。自动回滚机制的核心,就是通过索引的快速切换,实现DAG实例的“版本级”回退,同时保持DAG结构和调度策略不变。