设计

资料整理

核心结构

DAG

数据库存储

  • carp。存储节点和连线。
  • orca。存储依赖节点id,参考 StageExecution#getRequisiteStageRefIds()
  • dolphinscheduler。存储节点的上游节点和下游节点。t_ds_workflow_definitiont_ds_task_definitiont_ds_workflow_task_relation。任务相关的表:t_ds_workflow_instancet_ds_relation_workflow_instancet_ds_task_instancet_ds_task_instance_contextt_ds_relation_sub_workflow

数据结构

拓扑排序。对以 DAG 为数据结构的任务进行编排时,需通过拓扑排序处理任务前后依赖,执行 fan-in 和 fan-out 效果,

任务结构

  • dag
    • workflow
    • pipeline

任务一般都是 dag,大致上分为 2 类:workflow 和 pipeline。

对于 CI/CD 系统来说,还有些阶段性划分,比如 github 上的项目管理,阿里云云效的流水线:

github_project

codeup_pipeline

codeup_pipeline_stage

它们会先执行串行stage,每个stage内的task组成一个dag

任务管理

  • 启动
  • 停止
  • 暂停
  • 恢复

任务触发

  • 回调
  • 用户触发

子任务串联

  • 队列+事件监听
  • EventBus

队列定义

状态流转

  • 状态机

接口定义

  • DAG
    • 基于 JGraph 封装的 DAG
    • 存储基于 carp-framework-dag
  • 任务结构
    • WorkflowDefitionWorkflowInstanceWorkflowState
    • 任务层级。workflow -> stage -> task
    • 任务依赖。需同时
      • 直接通过 dag 的 node + edge 表示依赖关系
      • 手动添加依赖 stageA -成功> stageB,stageA -失败> stageC
  • 任务执行。过滤器执行链 + 监听器:filter + handler -> listener
  • 状态流转。
    • 状态机