一、什么是工作流?
在论述什么是工作流之前,先说一下工作流和一般工作的区别,在于依赖视图。
一般工作自身他只会有本人的 dag 图,依赖视图是无边界的,不可控的,而工作流则是把整个工作流都展现进去,是有边界的,可控的,这是工作流的劣势。上面为大家介绍工作流的相干性能:
01 工作流—性能介绍
● 虚构节点
虚构节点,它是不产生任何数据的空跑节点(即调度到该节点时,零碎间接返回胜利,不会真正执行、不会占用资源或阻塞上游节点运行),比如说工作并行执行,那么就会用到虚构节点。
● 周期生成
指调度零碎依照调度配置主动定时运行的工作。
● 补数据运行
当业务变更,能够应用补数据性能。如批改了某个工作的代码,可将本月的数据依照新的代码从新跑一遍,立刻生成所需数据。
● 调度属性
工作流中的子工作依赖于父工作的周期调度属性,父工作批改后,子工作同步批改,以工作流的周期调度属性作为各个子节点的周期调度工夫。
● 工作流所在目录
批改工作流目录同步批改工作流下的子工作目录。
02 工作流—依赖成环
具体实现:
工作实现依赖的关系,key 为以后节点,value 为该节点的所有父节点 Map < long list> nodeMap。
遍历 nodeMap,以此遍历单汇合中的每一个节点。每遍历一个新节点,就从头查看新节点之前的所有节点,用新节点和此节点之前所有节点顺次做比拟。如果发现新节点和之前的某个节点雷同,则阐明该节点被遍历过两次,链表有环。如果之前的所有节点中不存在与新节点雷同的节点,就持续遍历下一个新节点,持续反复方才的操作。
二、Taier 工作流周期实例运行
理解完工作流的性能介绍后,咱们来为大家分享 Taier 工作流周期实例运行:
01 Taier—周期实例生成
Taier 主节点在启动的时候,会开启一个定时器,定时器会不停的去判断当日的实例是否曾经生成。如果没有生成,就会触发事件给 CycleJobBuilder 生成实例,再通过 JobDependency 封装实例之间的依赖关系。
● CycleJobBuilder
用于生成周期实例。扫描数据库工作表并且获取 zk 上所有的 Taier 节点,把封装后的实例调配到每一台 Taier 节点上。
● JobDependency
用于生成 job 之间的依赖关系。
02 Taier—调度流程
在启动 Taier 服务时,会启动配置的所有调度器,并且开始扫描实例,并提交。
03 Taier—工作流工作状态批改逻辑
工作提交拦截器解决:
1、工作流下无子工作更新为实现状态
2、工作流下工作都是实现状态,工作提交队列能够移除
3、同时更新工作流 engine_job 状态,工作流只有四种状态,胜利 / 失败 / 勾销 / 提交中:
(1) 所有子工作状态为运行胜利时,工作流状态更新为胜利
(2) 工作流状态依据子工作的运行状态来确定,失败状态存在优先级:运行失败 > 提交失败 > 上游失败
a. 子工作存在运行失败时,工作流状态更新为运行失败
b. 子工作不存在运行失败时,存在提交失败,工作流状态更新为提交失败
c. 子工作不存在运行失败时,不存在提交失败,存在上游失败时,工作流状态更新为上游失败
(3) 子工作存在勾销状态时,工作流状态更新为勾销
(4) 若子工作中同时存在运行失败或勾销状态,工作流状态更新为失败状态
(5) 其余工作流更新为运行中状态
三、Taier1.3 行将上线性能
## 新增性能
· ChunJun 的向导模式数据源加强 hive1、hive2、hive3、sparkThrift、oracle、mysql、postgresql、sqlserver、es7
· flink on standalone、python.shell、spark jar、pyspark 反对
· 自定义工作类型 web 界面配置抽取
· windows 开发环境适配
袋鼠云开源框架钉钉技术交换 qun(30537511),欢送对大数据开源我的项目有趣味的同学退出交换最新技术信息,开源我的项目库地址:https://github.com/DTStack/Taier