基于事件触发的分布式任务调度方法及装置与流程

文档序号:11677375阅读:304来源:国知局
基于事件触发的分布式任务调度方法及装置与流程

本发明涉及数据处理技术领域,尤其是涉及基于事件触发的分布式任务调度方法及装置。



背景技术:

消息技术与经济社会的交汇融合引发了数据迅猛增长,数据已成为国家基础性战略资源。中国‘十三五’发展规划中明确要求实施国家大数据战略,推进数据资源开放共享。国务院印发的《促进大数据发展行动纲要》也要求大力推动政府部门数据共享,稳步推动公共数据资源开放,统筹规划大数据基础设施建设。

作为大数据基础设施软件建设之一的任务调度系统,对任务的并发能力,任务调度的处理性能等提出了更高要求。而传统的任务调度系统主要采用基于时间的定时任务调度方法,不管任务执行的依赖关系是否满足,只要满足时间点,就必须触发任务执行,在执行过程中再轮询判断依赖条件,这样导致大量的服务器资源浪费,性能低下,并且无法满足大数据实时的任务调度要求。



技术实现要素:

有鉴于此,本发明的目的在于提供基于事件触发的分布式任务调度方法及装置,以提升高并发的任务调度能力,有效的节约服务器资源,满足大数据实时任务调度要求。

第一方面,本发明实施例提供了一种基于事件触发的分布式任务调度方法,其中,应用于任务调度引擎模块,所述方法包括:

对分布式任务队列模块进行监听,得到监听消息;

根据所述监听消息判断所述分布式任务队列模块在采用主从分布式消息架构下是否存在任务请求消息;

如果存在,则向所述分布式任务队列模块发送调用消息,以使所述分布式任务队列模块采用先进先出的消息队列方式发送所述任务请求消息;

接收所述分布式任务队列模块发送的所述任务请求消息,并对所述任务请求消息进行解析,得到任务注册消息;

判断所述任务注册消息的执行时间和依赖关系是否符合预设触发条件;

如果符合,则根据所述任务注册消息的任务类型得到任务执行消息;

将所述任务执行消息发送给执行模块,以使所述执行模块对所述任务执行消息进行执行,并得到执行状态和执行日志。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述方法还包括:

接收所述执行模块发送的所述执行日志和对所述执行状态进行判断得到的执行结果;

对所述执行结果和所述执行日志进行记录;

将所述执行结果通过所述分布式任务队列模块发送给任务接入模块,以使所述任务接入模块根据所述执行结果判断任务执行是否完成,并在完成的情况下将所述执行结果反馈给任务请求方。

结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述以使所述执行模块对所述任务执行消息进行执行,并得到执行状态和执行日志包括:

以使所述执行模块根据所述任务执行消息对执行程序进行调用,得到指令消息,并根据所述指令消息对所述任务执行消息进行执行,得到所述执行状态和所述执行日志。

结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述任务类型包括定时任务,所述根据所述任务注册消息的任务类型得到任务执行消息包括:

根据所述任务注册消息的任务类型为所述定时任务,按照定时模式得到所述任务执行消息。

结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述任务类型还包括事件任务,所述根据所述任务注册消息的任务类型得到任务执行消息包括:

根据所述任务注册消息的任务类型为所述事件任务,按照事件模式得到所述任务执行消息。

第二方面,本发明实施例还提供一种基于事件触发的分布式任务调度装置,其中,所述装置包括:

任务调度引擎模块,用于对分布式任务队列模块进行监听,得到监听消息,根据所述监听消息判断所述分布式任务队列模块在采用主从分布式消息架构下是否存在任务请求消息,并在存在的情况下,向所述分布式任务队列模块发送调用消息,接收所述分布式任务队列模块发送的所述任务请求消息,并对所述任务请求消息进行解析,得到任务注册消息,判断所述任务注册消息的执行时间和依赖关系是否符合预设触发条件,并在符合的情况下,根据所述任务注册消息的任务类型得到任务执行消息,将所述任务执行消息发送给执行模块;

所述分布式任务队列模块,用于采用主从分布式消息架构存在所述任务请求消息,及采用先进先出的消息队列方式发送所述任务请求消息;

所述执行模块,用于对所述任务执行消息进行执行,并得到执行状态和执行日志。

结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述任务调度引擎模块还用于:

接收所述执行模块发送的所述执行日志和对所述执行状态进行判断得到的执行结果;

对所述执行结果和所述执行日志进行记录;

将所述执行结果通过所述分布式任务队列模块发送给任务接入模块,以使所述任务接入模块根据所述执行结果判断任务执行是否完成,并在完成的情况下将所述执行结果反馈给任务请求方。

结合第二方面,本发明实施例提供了第二方面的第二种可能的实施方式,其中,所述任务调度引擎模块还用于:

以使所述执行模块根据所述任务执行消息对执行程序进行调用,得到指令消息,并根据所述指令消息对所述任务执行消息进行执行,得到所述执行状态和所述执行日志。

结合第二方面,本发明实施例提供了第二方面的第三种可能的实施方式,其中,所述任务类型包括定时任务,所述任务调度引擎模块还用于:

根据所述任务注册消息的任务类型为所述定时任务,按照定时模式得到所述任务执行消息。

结合第二方面,本发明实施例提供了第二方面的第四种可能的实施方式,其中,所述任务类型还包括事件任务,所述任务调度引擎模块还用于:

根据所述任务注册消息的任务类型为所述事件任务,按照事件模式得到所述任务执行消息。

本发明实施例带来了以下有益效果:

本发明提供的基于事件触发的分布式任务调度方法及装置,通过任务调度引擎模块对分布式任务队列模块进行监听,得到监听消息,根据监听消息判断分布式任务队列模块在采用主从分布式消息架构下是否存在任务请求消息,并在存在的情况下,向分布式任务队列模块发送调用消息,以使分布式任务队列模块采用先进先出的消息队列方式发送任务请求消息,接收分布式任务队列模块发送的任务请求消息,并对任务请求消息进行解析,得到任务注册消息,判断任务注册消息的执行时间和依赖关系是否符合预设触发条件,并在符合的情况下,根据任务注册消息的任务类型得到任务执行消息,将任务执行消息发送给执行模块,以使执行模块对任务执行消息进行执行,并得到执行状态和执行日志。本发明可以提升高并发的任务调度能力,有效的节约服务器资源,满足大数据实时任务调度要求。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一提供的基于事件触发的分布式任务调度方法流程图;

图2为本发明实施例一提供的执行结果反馈方法流程图;

图3为本发明实施例二提供的基于事件触发的分布式任务调度方法信令图;

图4为本发明实施例三提供的一种基于事件触发的分布式任务调度装置示意图;

图5为本发明实施例四提供的另一种基于事件触发的分布式任务调度装置示意图。

图标:

100-任务接入模块;200-分布式任务队列模块;300-任务调度引擎模块;400-执行模块;410-任务执行代理模块;420-任务执行程序模块。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前,作为大数据基础设施软件建设之一的任务调度系统,对任务的并发能力,任务调度的处理性能等提出了更高要求。而传统的任务调度系统主要采用基于时间的定时任务调度方法,不管任务执行的依赖关系是否满足,只要满足时间点,就必须触发任务执行,在执行过程中再轮询判断依赖条件,这样导致大量的服务器资源浪费,性能低下,并且无法满足大数据实时的任务调度要求。

基于此,本发明实施例提供的一种基于事件触发的分布式任务调度方法及装置,可以提升高并发的任务调度能力,有效的节约服务器资源,满足大数据实时任务调度要求。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种基于事件触发的分布式任务调度方法进行详细介绍。

实施例一:

图1为本发明实施例一提供的基于事件触发的分布式任务调度方法流程图。

参照图1,以任务调度引擎模块为执行主体,基于事件触发的分布式任务调度方法包括如下步骤:

步骤s110,对分布式任务队列模块进行监听,得到监听消息;

步骤s120,根据监听消息判断分布式任务队列模块在采用主从分布式消息架构下是否存在任务请求消息;如果存在,则执行步骤s130;如果不存在,则重复执行步骤s110;

步骤s130,向分布式任务队列模块发送调用消息,以使分布式任务队列模块采用先进先出的消息队列方式发送任务请求消息;

具体的,任务请求方发起任务请求消息,任务接入模块负责接入所有任务请求消息,并将任务请求消息提交到分布式任务队列模块。任务请求消息包括定时任务和事件任务,定时任务是指按照一定的时间频率,每隔一段时间执行一次的任务;事件任务是实时触发执行的任务。任务接入模块将任务请求消息异步提交到分布式任务队列模块,并在提交完成时开始监听任务执行状态。

分布式任务队列模块采用主-从(master-slave)的分布式消息架构存放接入的任务请求消息,可支持百万级以上任务的同时接入,并以先进先出的消息队列方式对任务请求消息进行管理。基于分布式任务队列模块的总体任务调度架构,可以提升服务器的高并发的任务调度能力。

任务调度引擎模块对分布式任务队列模块进行监听,在发现分布式任务队列模块中有新的任务请求消息时就马上获取。

步骤s140,接收分布式任务队列模块发送的任务请求消息,并对任务请求消息进行解析,得到任务注册消息;

步骤s150,判断任务注册消息的执行时间和依赖关系是否符合预设触发条件;如果符合,则执行步骤s160;如果不符合,则执行步骤s170;

步骤s160,根据任务注册消息的任务类型得到任务执行消息;

根据本发明的示例性实施例,任务类型包括定时任务,步骤s160包括:

根据任务注册消息的任务类型为定时任务,按照定时模式得到任务执行消息。

任务类型还包括事件任务,步骤s160还包括:

根据任务注册消息的任务类型为事件任务,按照事件模式得到任务执行消息。

步骤s170,对依赖关系进行扫描,直到符合预设触发条件;

具体的,任务调度引擎模块在任务元数据初始化完成后,对获取的任务请求消息的属性进行解析,将解析成功的任务注册到任务触发器中,得到任务注册消息。由任务触发器对任务的执行时间和依赖关系进行规则条件的分析,判断是否符合预设触发条件,并在符合的情况下,根据任务类型,按照定时模式或者事件模式调用任务执行代理模块触发任务注册消息的执行,得到任务执行消息。在任务注册消息的执行时间和依赖关系不符合预设触发条件的情况下,任务调度引擎模块进一步扫描事件任务的依赖关系,直到关系条件满足为止。任务调度引擎模块可集群部署,包括监控节点和执行节点,某个执行节点宕机后,任务可由其他节点自动接管继续执行。任务调度引擎模块在功能上主要分为任务执行类功能和任务管理类功能,任务执行类功能包括任务接收、任务解析、任务依赖、任务注册和任务触发器等,任务管理类功能包括任务重跑、任务暂停、任务停止、任务添加和任务注销等。

另外,各个模块在任务处理过程中都同步更新分布式任务队列模块中的执行状态。比如,任务调度引擎模块对任务请求消息进行解析完成后,会更新分布式任务队列模块的执行状态;任务调度引擎模块对任务注册消息进行判断完成后,会更新分布式任务队列模块的执行状态。

步骤s180,将任务执行消息发送给执行模块,以使执行模块对任务执行消息进行执行,并得到执行状态和执行日志。

根据本发明的示例性实施例,步骤s180包括:

以使执行模块根据任务执行消息对执行程序进行调用,得到指令消息,并根据指令消息对任务执行消息进行执行,得到执行状态和执行日志。

具体的,执行模块包括任务执行代理模块和任务执行程序模块。任务执行代理模块负责接收任务调度引擎中任务触发器提交的任务执行消息,并异步调用具体的任务执行程序模块,将任务执行消息转发给具体的任务执行程序。调用成功后轮询获取任务执行程序模块的执行日志和执行状态,直到返回任务执行成功或者失败的状态。任务执行代理模块默认支持java程序、存储过程、perl(practicalextractionandreportinglanguage,实际抽取与汇报语言)脚本、shell脚本、hadoop、http(hypertexttransferprotocol,超文本传输协议)、webservice等主流的执行程序,同时提供二次开发接口,可根据需要定制其他执行程序的任务代理。

任务执行程序模块包括负责执行具体任务的程序,如java程序、存储过程、perl脚本、shell脚本、hadoop、http、webservice等执行程序。任务执行程序模块由任务执行代理模块调用触发执行。也就是任务执行代理模块根据任务执行消息对执行程序进行调用,得到指令消息;执行程序根据指令消息对具体的任务执行消息进行执行,得到执行状态和执行日志,并根据代理接口返回执行状态和执行日志。

根据本发明的示例性实施例,参照图2,该方法还包括如下步骤:

步骤s210,接收执行模块发送的执行日志和对执行状态进行判断得到的执行结果;

步骤s220,对执行结果和执行日志进行记录;

步骤s230,将执行结果通过分布式任务队列模块发送给任务接入模块,以使任务接入模块根据执行结果判断任务执行是否完成,并在完成的情况下将执行结果反馈给任务请求方。

具体的,任务执行代理模块对执行状态进行判断得到的执行结果,并将执行结果和执行日志反馈给任务调度引擎模块。任务调度引擎模块记录执行结果和执行日志,并更新分布式任务队列模块中的执行状态;如果任务执行成功,则调用任务接入模块触发下级事件任务请求。任务接入模块根据分布式任务队列模块中更新的执行状态,获取任务最终执行状态,并判断任务执行是否完成,并在完成的情况下将执行结果反馈给任务请求方。

到这里即完成了对任务请求的处理过程,任务接入模块再接收到新的任务请求后,开始新的任务处理的流程。

实施例二:

图3为本发明实施例二提供的基于事件触发的分布式任务调度方法信令图。

参照图3,基于事件触发的分布式任务调度方法包括如下步骤:

步骤s01,任务接入模块将任务请求消息异步提交到分布式任务队列模块;

步骤s02,分布式任务队列模块采用主从分布式消息架构存放任务请求消息,并以先进先出的消息队列方式发送任务请求消息;

步骤s03,任务接入模块监听分布式任务队列模块的任务执行状态;

步骤s04,分布式任务队列模块将任务请求消息发送给任务调度引擎模块;

任务调度引擎模块对分布式任务队列模块进行监听,在发现分布式任务队列模块中有新的任务请求消息时就马上获取。

步骤s05,对任务请求消息进行解析,得到任务注册消息;

步骤s06,任务调度引擎模块更新分布式任务队列模块中的执行状态;

步骤s07,判断任务注册消息的执行时间和依赖关系是否符合预设触发条件;

步骤s08,任务调度引擎模块更新分布式任务队列模块中的执行状态;

步骤s09,在符合的情况下,根据任务注册消息的任务类型的得到任务执行消息;

步骤s10,任务调度引擎模块更新分布式任务队列模块中的执行状态;

步骤s11,任务调度引擎模块将任务执行消息发送给任务执行代理模块;

步骤s12,任务执行代理模块异步调用任务执行程序;

步骤s13,任务执行代理模块将任务执行消息站发给任务执行程序模块;

步骤s14,执行程序模块对任务执行消息进行执行,并得到执行状态和执行日志;

步骤s15,执行程序模块将执行状态和执行日志返回给任务执行代理模块;

步骤s16,任务执行代理模块对执行状态进行判断,得到执行结果;

步骤s17,任务执行代理模块将执行结果和执行日志返回给任务调度引擎模块;

步骤s18,任务调度引擎模块对执行结果和执行日志进行记录;

步骤s19,任务调度引擎模块更新分布式任务队列模块中的执行状态;

步骤s20,任务调度引擎模块将任务执行成功消息发送给任务接入模块;

步骤s21,任务接入模块触发下级事件任务请求消息;

步骤s22,任务接入模块获取来自分布式任务队列模块的执行状态;

步骤s23,任务接入模块根据执行状态判断任务执行是否完成;

步骤s24,在完成的情况下将执行结果反馈给任务请求方。

实施例三:

图4为本发明实施例三提供的一种基于事件触发的分布式任务调度装置示意图。

参照图4,基于事件触发的分布式任务调度装置包括任务接入模块100、分布式任务队列模块200、任务调度引擎模块300、执行模块400,其中执行模块400中包括任务执行代理模块410和任务执行程序模块420。

任务调度引擎模块300,用于对分布式任务队列模块200进行监听,得到监听消息,根据监听消息判断分布式任务队列模块200在采用主从分布式消息架构下是否存在任务请求消息,并在存在的情况下,向分布式任务队列模块200发送调用消息,接收分布式任务队列模块200发送的任务请求消息,并对任务请求消息进行解析,得到任务注册消息,判断任务注册消息的执行时间和依赖关系是否符合预设触发条件,并在符合的情况下,根据任务注册消息的任务类型得到任务执行消息,将任务执行消息发送给执行模块400;

分布式任务队列模块200,用于采用主从分布式消息架构存在任务请求消息,及采用先进先出的消息队列方式发送任务请求消息;

执行模块400,用于对任务执行消息进行执行,并得到执行状态和执行日志。

具体的,分布式任务队列模块200、任务调度引擎模块300、任务执行代理模块410和任务执行程序模块420为服务器,该装置还可以包括任务请求方,任务请求方为电脑。

根据本发明的示例性实施例,任务调度引擎模块300还用于:

接收执行模块400发送的执行日志和对执行状态进行判断得到的执行结果;

对执行结果和执行日志进行记录;

将执行结果通过分布式任务队列模块200发送给任务接入模块100,以使任务接入模块100根据执行结果判断任务执行是否完成,并在完成的情况下将执行结果反馈给任务请求方。

根据本发明的示例性实施例,任务调度引擎模块300还用于:

以使执行模块400根据任务执行消息对执行程序进行调用,得到指令消息,并根据指令消息对任务执行消息进行执行,得到执行状态和执行日志。

根据本发明的示例性实施例,任务类型包括定时任务,任务调度引擎模块300还用于:

根据任务注册消息的任务类型为定时任务,按照定时模式得到任务执行消息。

根据本发明的示例性实施例,任务类型还包括事件任务,任务调度引擎模块300还用于:

根据任务注册消息的任务类型为事件任务,按照事件模式得到任务执行消息。

实施例四:

图5为本发明实施例四提供的另一种基于事件触发的分布式任务调度装置示意图。

参照图5,任务接入模块100负责接入所有的任务请求消息,任务请求消息包括定时任务请求和事件任务请求,并将任务请求消息提交到分布式任务队列模块200。分布式任务队列模块200采用master-slave的分布式消息架构存放接入的任务请求消息,并以先进先出的消息队列方式对任务请求消息进行管理。任务调度引擎模块300采用监听模式接收分布式任务队列模块200中的任务请求消息,并对任务请求消息进行解析,将解析成功的任务注册到任务触发器中,由任务触发器对任务的执行时间和依赖关系进行规则条件的判断,判断成功后,再根据任务类型,按照定时或者事件的模式调用任务执行代理模块410触发注册任务的执行。任务执行代理模块410接收任务调度引擎模块300中任务触发器提交的任务执行消息,将任务执行消息转发给具体的任务执行程序,并收集任务执行程序的执行日志和执行结果。任务执行程序模块420负责执行具体的任务。

本发明提供的基于事件触发的分布式任务调度方法及装置,通过任务调度引擎模块对分布式任务队列模块进行监听,得到监听消息,根据监听消息判断分布式任务队列模块在采用主从分布式消息架构下是否存在任务请求消息,并在存在的情况下,向分布式任务队列模块发送调用消息,以使分布式任务队列模块采用先进先出的消息队列方式发送任务请求消息,接收分布式任务队列模块发送的任务请求消息,并对任务请求消息进行解析,得到任务注册消息,判断任务注册消息的执行时间和依赖关系是否符合预设触发条件,并在符合的情况下,根据任务注册消息的任务类型得到任务执行消息,将任务执行消息发送给执行模块,以使执行模块对任务执行消息进行执行,并得到执行状态和执行日志。本发明可以提升高并发的任务调度能力,有效的节约服务器资源,满足大数据实时任务调度要求。

本发明实施例所提供的基于事件触发的分布式任务调度方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1