暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

流程调度的四重启动方式之事件触发机制的前世今生

1256

统一调度作为DIG数据慧治平台核心功能模块之一,采集、加工、稽核等全链路治理任务均需合理的流程调度。本平台以图形化的方式完成作业全流程设计,将复杂加工的依赖关系清晰呈现,使得任务执行实现自动、及时、准确。这其中离不开的还有四重事件启动方式的构思巧妙与合理应用,本篇就来深度解读流程调度的四重启动方式之事件触发机制的前世今生。

01

四重启动方式

流程调度的四重启动方式你晓得吗


手动启动方式

一般针对临时流程或补充流程采用手动启动方式,在需要执行对应流程时进行人为启动。

定时启动方式

只对启动时间有依赖且启动时间有一定规律的场景,如按日、按月、按周等按固定周期运行启动类型,或每隔几个小时、几天运行一次的间隔类型等,此类启动方式一般针对数据采集场景。

事件触发方式

一般针对数据加工业务,通过配置使前置采集任务执行完成后自动触发加工流程,实现后续任务执行。依赖前置添加,即系统中的一些前置流程,用于有前后依赖关系的任务,如表的加工通常会依赖其他表的加工结果,所以通过配置事件实现自动触发。

子流程启动方式

一般用于一对多的启动情况,例如集团总部调用多子公司分任务。在一对一的场景下,优先采用更为灵活的事件触发方式。

02

事件触发机制的诞生

前世今生大揭秘,一睹调度新思维。

 

前世:在数据治理仓库建设前期,许多针对表数据执行的任务之前存在特定关系,在无事件触发机制和概念的情况下,表任务之间的调用关系只能依赖定时。例如:A表任务约定在8点前将数据准备完毕,依赖A表任务的B表任务约定在8点10分开始进行数据加工处理。当A表任务执行结束后会记录一条日志信息,在B表数据开始处理之前,首先需要去检测A表数据是否到达即A表任务是否完成,当B表任务已到约定时间点将会开始一直去读取A表任务完成的日志信息。如果日志信息读取不到,B表任务将进入等待。过段时间再次进行读取操作,从而陷入循环,直到日志成功读取后,B表任务才可启动。
在这种机制下,一个完整的业务流程通常由一个人负责设计,A表任务、B表任务甚至后续该业务下的所有任务均只能通过连线串成唯一的一个庞大且复杂的业务流程网。整个业务线的数据处理逻辑仅负责设计的相关人员清楚,随着后续业务流程愈加繁杂,一旦遇到流程逻辑修改、人员岗位变动等问题,面对如此庞大的业务流程体系根本无从下手。除非搞清整个业务流程的全盘设计逻辑,才敢开始修改完善,而这往往需要花费大量时间、人力成本还伴随着极高的出错频率,最终导致流程废掉更是得不偿失。

 

暴露问题:由于日志信息需要一直循环读取,导致后续任务明确启动的时间是不及时的。如果压缩循环读取的时间间隔,又被迫做了很多次无用的循环,从而加大了应用资源的压力。实际业务流程庞大且复杂,后续遇到问题更是难以维护。

今生:为了解决上述问题,事件触发机制应用而生,完全规避了日志记录和循环读取的弊端操作。只需要在流程设计时进行配置,使得A表任务结束之后产生一个具有特定命名规范的对应事件A_Resource_User(A:表名 Resource:资源名 User:用户名)。并对B表任务设置一个等待事件,由于B表任务在数据处理过程中明确知道它的数据来源归属为A表,所以后续等待事件的触发条件为A表任务生成的触发事件,事件的配置无需自主创建,依据特定命名规范进行勾选打开即可完成配置。该对应事件A_Resource_User的产生标志着A表任务执行完毕,B表任务的等待事件被自动触发从而执行任务启动,此时无需考虑任务执行结束的具体时间,因为无论A表任务何时结束,当它结束的那刻后续依赖的B表任务将自动启动。
随着事件触发概念的提出与应用,整个业务流程的设计可以按照职责分工、业务分层去合理分配给各相关人员,把前期整个庞大的业务流程的设计工作拆分成了多个子业务流程去设计和配置。在子业务流程设计时,只需关注当前业务下任务之间的直接依赖就可以完成。流程监控结合事件触发机制的应用,可以将所有子业务流程串起来运行,实现整个业务流程的实时监控,出了问题直接定位问题所属的子业务流程实现对应解决即可。当后续业务逻辑增加变更和维护时,明确任务归属和任务间的依赖便可以直接修改,无需了解整体业务的全盘逻辑。

 

解决问题:前期任务运行结束,后续依赖它的任务被自动调用,及时性的问题得以解决。同时由于消除了等待时间,资源应用的压力得到了释放。庞大繁杂的业务流程实现合理拆分,逻辑变更只需关注当前任务的直接依赖,流程可维护性极大增强。

 

至此随着事件触发机制的诞生,流程调度的启动方式呈现四重并存、相辅相成的局面,充分组合应用于各类流程调度场景之中。对于数据来源于外部系统,需要在特定的时间执行数据采集;数据的处理、表的加工需要依赖他表或者多表的数据,特殊情况还需依赖上月账期数据等系列应用场景,在流程四重启动方式的加持下任务合理调用,自动归属对应环节,数据抽取、装载、交付实现准确、完整和及时。

03

两项前期维护

在众多实际业务流程中,任务执行一般为按特定周期运行而非一次性完成,因此在仓库建设前需明确任务执行的周期类型,流程执行过程中的通用变量以及变量的获取方式。就日周期类型的流程来说,一般加工过程中需要用到一个账期属性(获取运行时日期前一天的日期值)来筛选数据。


两项前期维护,解锁事件触发新技能。


函数维护

函数:根据数据处理的业务情况,将流程中不能提前完全设定的时间类变量,整理并维护为函数,便于后续流程使用。例如:获取账期值、获取当前日期的前一天、上月最后一天的日期值等函数。

添加函数:函数可通过JAVA语法进行添加,添加成功的函数支持测试执行。


批次维护

根据业务的运行周期和地域等属性预先维护需要用到的批次,流程使用时将批次表达式解析成实际的值,用以标识流程运行的不同实例,相同批次值的流程实例只允许有一个。

批次在维护时将后续流程会用到的变量作为批次变量进行维护,在后续流程中使用对应批次的时候将会自动创建批次中的变量。



技能解锁:

 

依据同批次的事件触发实现同一流程的不同周期的调度执行,虽所属同一流程但互不影响。假设A、B表任务是按日为周期执行且属于同一批次,3月18日的A表任务触发执行了3月18日的B表任务,3月19日的A表任务触发执行的是3月19日的B表任务,两者之前互不影响。实现只设计一个流程定义,却能按周期实现长久的自动触发。
 
历史数据查询更加精准。在前期流程执行之前预先定义一些变量,变量依据前期设置往后传递,依据触发、等待的机制,任务对应的批次、周期、账期等属性得到传递继承,当需重新执行历史周期任务时,便可通过获取历史对应的变量值来实现历史任务、数据的运行、查询。


04

事件启动方式流程设计

一起来看一个事件触发机制应用的实际业务场景。

场景举例

存在积分信息表SCORE_INFO,数据需要依赖用户信息表USER_INFO和用户积分表USER_SCORE进行加工获取数据,而USER_INFO和USER_SCORE表数据分别通过文件采集获取,而两个表的数据具备使用的时间是不同的,如何在数据具备的第一时刻能够对SCORE_INFO数据进行加工呢?

实现方案

1.创建采集流程F_USER_INFO,添加为定时启动任务,进行文件采集,若所需文件到达时间不确定,可以结合侦测节点对文件进行侦测后再进行采集入库。
 
在流程F_USER_INFO中处理USER_INFO表的任务节点上,打开触发事件的开关,事件名称、事件实例值依据加工需要进行修改。默认值是根据表名与归属用户和所属资源按照规范进行拼接的结果。



2.创建采集流程F_USER_SCORE,添加为定时启动任务,对积分表USER_SCORE数据进行采集入库。在流程F_USER_SCORE中处理USER_SCORE表的任务节点上,打开触发事件的开关。
 
3.创建加工流程F_SCORE_INFO,配置启动方式为事件触发启动,等待事件中配置USER_INFO和USER_SCORE表处理所产生的事件,并配置对应的变量传递映射关系。

 

执行效果

执行时当前置USER_INFO和USER_SCORE表执行完成后将会自动启动F_SCORE_INFO流程进行SCORE_INFO表的加工。
 
通过事件触发配置的流程,执行过程中能够通过关联关系展示出流程的血缘图,通过流程血缘图进行监控能够非常清晰的查看流程的前置依赖执行情况以及后续受到影响的流程,便于准确定位问题并进行影响分析。


文章转载自东方国信大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论