TaskFlow 概述
一、概述
-
框架简介
TaskFlow是一个轻量级、易于使用且高度可扩展的通用任务编排框架。它采用有向无环图(DAG)模型来实现任务的编排,提供了组件复用、同步 / 异步编排、条件判断、分支选择等核心能力。TaskFlow 的设计理念是将复杂的任务流程简化,使得开发者可以专注于业务逻辑的实现,而无需过多关注任务间的复杂依赖关系。
-
有向无环图(DAG):
1)定义:在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG图)
2)有向无环图具有完整严密的拓扑性质,使其具有很强的流程表达能力;通过有向无环图,可以解决两个问题:从逻辑上,对各个节点的依赖关系进行了组织;从技术上,有依赖关系的节点需要等待执行,无依赖关系的可以并发执行
-
核心能力
-
名词解释
-
Operator:以下简称OP或组件,OP是DAG图中具体的节点,如上图1、2、3等节点;实现IOperator接口并开发相应的业务逻辑就可以完成一个OP的定义
-
OperatorWrapper:以下简称wrapper,OP对应的包装类,在wrapper中可以定义节点的名称、节点与节点之间的关系、节点参数的来源等;引入wrapper后可以将OP进行解耦,根据不同的业务场景需要对OP进行组合使用时,通过wrapper描述OP之间的依赖关系,串联成一个编排流程
-
DagEngine:DAG执行引擎,根据指定的初始节点(如上图的1、2、3),执行相应的编排流程;DAG执行引擎在初始化时可以指定使用不同的线程池,对业务进行隔离;可以设置整个执行过程的超时时间,达到超时时间阈值时,会结束编排流程的执行,没有执行到的节点不再执行同时执行中的节点也会被中断
-
强依赖:节点之间默认的依赖关系,只有前面的节点执行结束后才可以执行后续的节点。如上图中 1、2节点执行完才可以执行4;3执行完才可以执行5
-
弱依赖:在示例图中以虚线表示,不同于强依赖的执行逻辑,只要节点依赖的其它节点中有一个执行结束就可以执行当前节点,如上图中,如果3执行完时,4节点还没有执行完,此时依然可以执行5节点
-
二、常见的编排场景
1. 串行请求
1、2、3依次串行执行
2. 并行请求
1、2、3并行执行
3. 串并行相互依赖
1执行完后,2、3再并行执行
4. 弱依赖
1、2、3中任意一个执行完后,就可以执行4
5. 准入条件判断
4弱依赖1、2、3节点,每个节点在执行完后都可以执行4的准入条件,判断当前是否已经满足执行节点4的条件,若满足则直接执行
6. 分支选择
根据节点的执行结果选择要执行的子节点,如上图所示,最终的执行路径可能是:1->3->6->9
7. 复杂场景
流程复杂,没有严格的串行、并行过程
三、引擎执行逻辑
1. 主要流程
2. 执行流程示例
DAG图中的节点通过入度(indegree)来表示依赖的节点个数,只有当节点的入度为0时,当前节点才可以执行
DAG图中的弱依赖不计入节点的入度,如下图中的节点4初始入度等于0
实际的执行流程可能存在三种情况
-
1 -> (2、3)-> 4 -> 5
-
1 -> 2 -> 4 -> 5
-
1 -> 3 -> 4 -> 5
四、总结
TaskFlow基于有向无环图(DAG)实现任务的编排,它能够将复杂的业务流程分解为多个独立的任务节点(Operator),通过定义节点之间的依赖关系和执行顺序,实现对业务流程的高效管理和控制。