调度系统工作流(DAG)

调度系统工作流(DAG)

DAG是有向无环图的意思,调度系统中工作流就是以DAG的方式组织Task的依赖关系。

公司自研调度系统工作流

相关概念

  1. Job
    定义执行的任务和调度策略。
  2. DAG
    组织 Job 之间的依赖关系。
  3. Task
    系统根据 Job 调度策略生成的执行任务。

调度过程

  1. 创建 Job (根据需要创建 DAG)
  2. JobManager 根据 Job 的调度策略定时创建 Task,没有依赖的 Job 的 Task 直接标记为准备执行状态,有依赖的 Job 的 Task 标记为初始化的状态(父任务执行完成后触发状态修改)。
  3. 任务调度器获取准备执行状态的 Task,根据一些权限资源的限制和 Workers 的状态给 Task 分配最合适的 Worker,并将任务下发到 WorkerManager。
  4. WorkerManager 接收到任务下发的请求,再将任务发送到指定的 Worker。
  5. Worker 接收任务并执行,执行完成后向上回馈状态。
  6. JobManager 接收到 Task 执行的回馈,触发子 Job 对应时间节点的 Task 状态修改。

Dolphin Scheduler 工作流

相关概念

  1. 流程定义
    以拖拽的方式组织任务节点间的依赖,形成可视化的 DAG。
  2. 流程实例
    流程实例是流程定义的实例化,通过定时调度或者手动调度可以对流程进行实例化并生成流程实例。
  3. 任务实例
    任务实例是流程定义中的任务节点的实例,关联着一个流程实例,是具体执行的最小单位。
  4. 调度方式
    调度方式包括定时调度和手动调度。定时调度是系统采用 Quartz 调度器根据配置的 Cron 策略定时生成流程实例的过程。手动调度是用户手动触发一次流程实例化的过程。

调度过程

  1. 定义流程
  2. 配置调度方式
  3. 系统根据调度的方式生成流程实例
  4. Master 抽取需要执行的流程实例,并根据任务的依赖关系,生成一系列的任务实例,并放入任务的队列中(Master 会等待整个流程实例执行完成,根据依赖任务的执行状态,来控制任务实例的生成)。
  5. Worker 节点根据自身的运行情况,去任务队列中获取需要执行的任务实例并运行。