点击蓝字,关注我们
工作流服务是Apache DolphinScheduler的核心组件,负责工作流定义管理、工作流实例生命周期以及任务执行控制。本文详细概述了工作流服务的架构、关键组件以及它们之间的交互方式。
1
概述
工作流服务管理DolphinScheduler中工作流的整个生命周期,包括工作流定义、工作流实例创建、工作流执行、工作流状态管理以及任务协调。它为创建、运行和监控数据管道奠定了基础。
2
关键组件
2
关键组件
工作流服务主要由两个组件组成:
2.1. ProcessService
ProcessService接口及其实现类ProcessServiceImpl为工作流定义和实例管理提供核心功能。它处理工作流定义创建、工作流实例创建、任务定义管理以及工作流状态跟踪。
2.2. ExecutorService
ExecutorService接口及其实现类ExecutorServiceImpl提供执行工作流和控制其执行的功能。它包括触发工作流、回填工作流、检查工作流有效性以及控制工作流执行(暂停、停止、恢复)的方法。
3
工作流定义管理
工作流服务为工作流定义提供全面管理,包括创建、更新、版本控制以及验证工作流定义。
3.1. 工作流定义结构
DolphinScheduler中的工作流定义(WorkflowDefinition)包含:
- 元数据
代码、名称、描述、项目代码等。 - 全局参数
可在整个工作流中使用的变量。 - 任务定义
构成工作流的任务的定义。 - 任务关系
定义任务之间的依赖关系(形成有向无环图)。 - 位置信息
工作流的可视化表示。
3.2. 创建和更新工作流定义
工作流定义管理功能包括:
-
创建新的工作流定义。 -
更新现有的工作流定义。 -
保存工作流内的任务定义。 -
管理任务关系以定义工作流结构。
工作流定义管理的关键操作包括:
saveWorkflowDefine保存工作流定义元数据。 saveTaskDefine保存与工作流关联的任务定义。 saveTaskRelation保存任务之间的关系。 genDagGraph
-
从工作流定义生成有向无环图(DAG)。
3.3. 工作流版本管理
DolphinScheduler支持工作流定义的版本控制,允许用户跟踪更改并在不同版本之间切换。
工作流版本管理的关键操作包括:
switchVersion在工作流定义的不同版本之间切换。 findWorkflowDefinition通过代码和版本查找工作流定义。 findWorkflowDefinitionByCode通过代码查找工作流定义的最新版本。
4
工作流执行
工作流服务管理工作流的执行,包括启动工作流、控制工作流执行以及处理工作流执行状态。
4.1. 工作流执行生命周期
DolphinScheduler中的工作流执行生命周期涉及:
4.2. 启动工作流
工作流可以通过不同方式启动:
- 手动触发
按需启动工作流。使用ExecutorService中的 triggerWorkflowDefinition方法。 - 定时触发
根据调度计划启动工作流。通过调度服务创建并使用工作流服务执行。 - 回填
针对历史日期多次运行工作流。使用 ExecutorService中的backfillWorkflowDefinition方法。 - 子工作流
作为另一个工作流的一部分启动工作流。由父工作流中的子工作流任务启动。
4.3. 工作流实例构建
当触发工作流时,通过ProcessService中的constructWorkflowInstance方法创建工作流实例。此过程包括:
-
查找工作流定义。 -
生成新的工作流实例或恢复现有实例。 -
处理全局参数。 -
设置执行选项(优先级、工作线程组等)。 -
设置工作流实例的初始状态。
4.4. 控制工作流执行
工作流服务提供方法来控制正在运行的工作流的执行:
- 暂停
暂停正在运行的工作流。 - 恢复
恢复已暂停的工作流。 - 停止
停止正在运行的工作流。 - 重新运行
重新运行已完成的工作流。 - 恢复
恢复失败的工作流。
ExecutorService中的controlWorkflowInstance方法实现。
5
任务管理
工作流服务管理工作流中的任务,包括任务定义、任务实例和任务执行。
5.1. 任务定义管理
任务定义指定工作流中任务的配置。工作流服务提供以下方法:
-
创建任务定义。 -
更新任务定义。 -
管理任务定义版本。 -
创建任务之间的关系。
关键操作包括:
saveTaskDefine保存任务定义。 saveTaskRelation保存任务之间的关系。 switchTaskDefinitionVersion在任务定义版本之间切换。
5.2. 任务执行控制
工作流服务提供方法来控制单个任务的执行:
executeTask在工作流中执行特定任务。 forceStartTaskInstance强制启动任务实例。 forceWorkflowInstanceSuccessByTaskInstanceId强制将任务设置为成功状态。
6
与其他组件的集成
工作流服务与DolphinScheduler的其他组件集成,以提供完整的工作流管理系统。

关键集成包括:
- 数据库持久化
工作流服务使用各种映射器和数据访问对象(DAO)来持久化工作流定义、实例、任务及其关系。 - Master Server
工作流服务提供Master Server用于创建和管理工作流实例的方法。 - Worker Server
工作线程向工作流服务报告任务执行状态。 - 注册中心
工作流服务与注册中心(ZooKeeper / JDBC)交互以进行服务发现和协调。 - 警报服务
工作流服务可以为工作流执行事件触发警报。
7
工作流执行状态
工作流服务管理工作流执行状态,跟踪工作流实例在其生命周期中的进展状态。

工作流执行状态在WorkflowExecutionStatus枚举中定义,包括:
- RUNNING_EXECUTION
工作流正在运行。 - SUCCESS
工作流成功完成。 - FAILURE
工作流失败。 - PAUSE
工作流已暂停。 - STOP
工作流已停止。 -
以及针对不同工作流条件的各种其他状态。
工作流服务在工作流执行过程中更新这些状态,并提供查询和操作它们的方法。
8
命令系统
命令系统是工作流服务的关键部分,支持工作流的异步执行控制。

命令指定要在工作流上执行的操作:
- START_PROCESS
启动新的工作流。 - RECOVER_TOLERANCE_FAULT_PROCESS
恢复失败的工作流。 - COMPLEMENT_DATA
针对历史日期多次运行工作流。 - REPEAT_RUNNING
重新运行已完成的工作流。 - EXECUTE_TASK
在工作流中执行特定任务。
命令由API服务器或调度服务创建,并由Master服务器处理,然后Master服务器使用工作流服务来管理生成的工作流实例。
9
全局参数
工作流服务管理工作流的全局参数,这些参数是可在整个工作流中使用并传递给任务的变量。
全局参数在工作流定义中定义,可以是:
- 输入参数
在启动工作流时提供。 - 输出参数
在工作流执行期间生成。 - 系统参数
由系统自动提供(例如,调度时间)。
工作流服务在构建工作流实例时处理这些参数,并在执行期间将它们提供给任务。
全局参数处理的关键方法包括:
-
setGlobalParamIfCommanded:根据命令参数设置全局参数。 -
curingGlobalParams:处理和评估全局参数。
原文链接:https://deepwiki.com/apache/dolphinscheduler/3.1-workflow-service
用户案例
迁移实战
发版消息
加入社区
关注社区的方式有很多:
-
GitHub: https://github.com/apache/dolphinscheduler -
官网:https://dolphinscheduler.apache.org/en-us -
订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可) -
X.com:@DolphinSchedule -
YouTube:https://www.youtube.com/@apachedolphinscheduler -
Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
📂非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
👩💻代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。
你的好友秀秀子拍了拍你
并请你帮她点一下“分享”

