调度系统工作流(DAG)
DAG是有向无环图的意思,调度系统中工作流就是以DAG的方式组织Task的依赖关系。
公司自研调度系统工作流
相关概念
- Job
定义执行的任务和调度策略。 - DAG
组织 Job 之间的依赖关系。 - Task
系统根据 Job 调度策略生成的执行任务。
调度过程
- 创建 Job (根据需要创建 DAG)
- JobManager 根据 Job 的调度策略定时创建 Task,没有依赖的 Job 的 Task 直接标记为准备执行状态,有依赖的 Job 的 Task 标记为初始化的状态(父任务执行完成后触发状态修改)。
- 任务调度器获取准备执行状态的 Task,根据一些权限资源的限制和 Workers 的状态给 Task 分配最合适的 Worker,并将任务下发到 WorkerManager。
- WorkerManager 接收到任务下发的请求,再将任务发送到指定的 Worker。
- Worker 接收任务并执行,执行完成后向上回馈状态。
- JobManager 接收到 Task 执行的回馈,触发子 Job 对应时间节点的 Task 状态修改。
Dolphin Scheduler 工作流
相关概念
- 流程定义
以拖拽的方式组织任务节点间的依赖,形成可视化的 DAG。 - 流程实例
流程实例是流程定义的实例化,通过定时调度或者手动调度可以对流程进行实例化并生成流程实例。 - 任务实例
任务实例是流程定义中的任务节点的实例,关联着一个流程实例,是具体执行的最小单位。 - 调度方式
调度方式包括定时调度和手动调度。定时调度是系统采用 Quartz 调度器根据配置的 Cron 策略定时生成流程实例的过程。手动调度是用户手动触发一次流程实例化的过程。
调度过程
- 定义流程
- 配置调度方式
- 系统根据调度的方式生成流程实例
- Master 抽取需要执行的流程实例,并根据任务的依赖关系,生成一系列的任务实例,并放入任务的队列中(Master 会等待整个流程实例执行完成,根据依赖任务的执行状态,来控制任务实例的生成)。
- Worker 节点根据自身的运行情况,去任务队列中获取需要执行的任务实例并运行。