掌桥专利:专业的专利平台
掌桥专利
首页

任务调度方法、装置、设备及存储介质

文献发布时间:2024-01-17 01:15:20


任务调度方法、装置、设备及存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种任务调度方法、装置、设备及存储介质。

背景技术

现代大数据系统往往需要利用专门的调度器进行任务调度,实现任务的调度、监控、依赖信息设置等功能。当前,绝大部分市面上开源(比如Apache DolphinScheduler,Apache Oozie,Azkaban)以及商业软件(比如Dataworks)均只能实现定时调度的功能,无法进行即时调度。

上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。

发明内容

本发明的主要目的在于提出一种任务调度方法、装置、设备及存储介质,旨在解决如何使任务的调度不再单纯依靠定时器,可以满足按需求进行即时调度的技术问题。

为实现上述目的,本发明提供一种任务调度方法,所述任务调度方法包括:

通过即时调度模块监听与任务调度相关的信息;

在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;

根据所述任务调度信息控制调度器对所述目标任务进行调度。

可选地,所述根据所述任务调度信息控制调度器对所述目标任务进行调度,包括:

控制所述即时调度模块将所述任务调度信息发送给调度器;

控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

可选地,所述控制所述即时调度模块将所述任务调度信息发送给调度器,包括:

控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;

根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

可选地,所述根据所述当前状态控制所述即时调度模块与调度器进行通信,包括:

获取调度器对应的调度器信息;

根据所述调度器信息确定调度器接口信息;

根据所述调度器接口信息确定所述调度器对应的HTTP接口;

控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

可选地,所述通过即时调度模块监听与任务调度相关的信息,包括:

通过即时调度模块的消息接收接口监听与任务调度相关的信息。

可选地,所述根据所述任务调度信息控制调度器对所述目标任务进行调度之后,还包括:

对所述调度器的任务调度过程进行异步监控;

通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用;

在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

可选地,所述在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块之后,还包括:

控制所述即时调度模块将所述成功提交信息存储到数据库中;

对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;

根据所述当前信息确定对应的当前任务;

检测所述当前任务中是否存在跨项目依赖的任务;

根据检测结果进行任务执行。

可选地,所述根据检测结果进行任务执行,包括:

根据所述当前任务生成有向无环图;

为所述有向无环图中的每个任务生成对应的任务编号;

在检测结果为存在跨项目依赖的任务时,在依赖项目和被依赖项目的依赖位置各增加一个目标节点;

根据所述目标节点进行任务执行。

可选地,所述目标节点包括:第一目标节点和第二目标节点;

所述在依赖项目和被依赖项目的依赖位置各增加一个目标节点,包括:

在依赖项目的依赖位置增加第一目标节点;

在被依赖项目的依赖位置增加第二目标节点。

可选地,所述根据所述目标节点进行任务执行,包括:

根据依赖项目确定依赖任务,并根据被依赖项目确定被依赖任务;

获取所述依赖任务对应的第一任务编号,以及所述被依赖任务对应的第二任务编号;

根据所述第一任务编号对所述第二目标节点进行配置,得到配置后的第二目标节点;

根据所述第二任务编号对所述第一目标节点进行配置,得到配置后的第一目标节点;

根据所述配置后的第一目标节点和所述配置后的第二目标节点进行任务执行。

可选地,所述根据配置后的第一目标节点和配置后的第二目标节点进行任务执行,包括:

当任务执行到所述配置后的第一目标节点时,检测所述数据库中是否存在所述配置后的第二目标节点的节点成功记录;

若所述数据库中存在所述配置后的第二目标节点的节点成功记录,则判定依赖关系任务执行完毕,继续向下游执行任务。

此外,为实现上述目的,本发明还提出一种任务调度装置,所述任务调度装置包括:

信息监听模块,用于通过即时调度模块监听与任务调度相关的信息;

任务检测模块,用于在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;

任务调度模块,用于根据所述任务调度信息控制调度器对所述目标任务进行调度。

可选地,所述任务调度模块,还用于控制所述即时调度模块将所述任务调度信息发送给调度器;控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

可选地,所述任务调度模块,还用于控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

可选地,所述任务调度模块,还用于获取调度器对应的调度器信息;根据所述调度器信息确定调度器接口信息;根据所述调度器接口信息确定所述调度器对应的HTTP接口;控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

可选地,所述信息监听模块,还用于通过即时调度模块的消息接收接口监听与任务调度相关的信息。

可选地,所述任务调度装置,还包括:

异步监控模块,用于对所述调度器的任务调度过程进行异步监控;通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用;在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

可选地,所述任务调度装置,还包括:

任务执行模块,用于控制所述即时调度模块将所述成功提交信息存储到数据库中;对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;根据所述当前信息确定对应的当前任务;检测所述当前任务中是否存在跨项目依赖的任务;根据检测结果进行任务执行。

此外,为实现上述目的,本发明还提出一种任务调度设备,所述任务调度设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的任务调度程序,所述任务调度程序被处理器执行时实现如上所述的任务调度方法。

此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有任务调度程序,所述任务调度程序被处理器执行时实现如上所述的任务调度方法。

本发明提出的任务调度方法,通过即时调度模块监听与任务调度相关的信息;在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;根据所述任务调度信息控制调度器对所述目标任务进行调度。本方案可以通过增加即时调度模块来进行信息监听,通过即时调度模块接收任务调度信息并确定目标任务,可以即时地控制调度器调度目标任务,从而克服了现有技术中存在的缺陷,使任务的调度不再单纯依靠定时器,可以满足按需求进行即时调度。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的任务调度设备结构示意图;

图2为本发明任务调度方法第一实施例的流程示意图;

图3为本发明任务调度方法第二实施例的流程示意图;

图4为本发明任务调度方法第三实施例的流程示意图;

图5为本发明任务调度方法第四实施例的流程示意图;

图6为本发明任务调度装置第一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,图1为本发明实施例方案涉及的硬件运行环境的任务调度设备结构示意图。

如图1所示,该任务调度设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如按键,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速随机存取存储器(Random Access Memory,RAM),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的设备结构并不构成对任务调度设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及任务调度程序。

在图1所示的任务调度设备中,网络接口1004主要用于连接外网,与其他网络设备进行数据通信;用户接口1003主要用于连接用户设备,与所述用户设备进行数据通信;本发明设备通过处理器1001调用存储器1005中存储的任务调度程序,并执行本发明实施例提供的任务调度方法。

基于上述硬件结构,提出本发明任务调度方法实施例。

参照图2,图2为本发明任务调度方法第一实施例的流程示意图。

在第一实施例中,所述任务调度方法包括:

步骤S10,通过即时调度模块监听与任务调度相关的信息。

需要说明的是,本实施例的执行主体可为任务调度设备,该任务调度设备可为具有数据处理功能的计算机设备,还可为其他可实现相同或相似功能的设备,本实施例对此不作限制,在本实施例中,以计算机设备为例进行说明。

需要说明的是,常规的计算机设备上在进行任务调度时,只能通过调度器实现定时调度的功能,本方案对此进行了改进,增加了即时调度模块,使任务的调度不再单纯依靠定时器,可以满足按需调度,从而实现任务的即时调度。

需要说明的是,本方案中的调度器仍然采用开源软件,本实施例对此不作限制,在本实施例中以调度器为Azkaban为例进行说明,将调度器称为Scheduler。本方案增加一个java web模块作为即时调度模块,称其为Message Center,简称MC。其中,MC和Scheduler之间可以进行单向通信。

应当理解的是,可以通过即时调度模块的消息接收接口监听与任务调度相关的信息。其中,与任务调度相关的信息可以包括但不限于调度任务需求信息,还可包括其他类型的与任务调度相关的信息,本实施例对此不作限制。

在具体实现中,所述消息接收接口具体可为即时调度模块的Message ReceiveAPI,MC可以对外暴露Message Receive API。其中,Message Receive API可以包括但不限于Http API,Apache Kafka API,Apache Pulsar API,Apache RabbitMQ API等,本实施例对此不作限制。

可以理解的是,即时调度模块可以通过对外暴露的Message Receive API来获取与任务调度相关的信息。例如,如果当前存在调度需求,则可通过即时调度模块监听与该调度需求相关的任务调度信息。

步骤S20,在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务。

应当理解的是,在通过即时调度模块进行信息监听的过程中,如果接收到了任务调度信息,则可对任务调度信息进行解析,以确定目标任务。

在具体实现中,如果需要存在任务调度需求,则会根据该任务调度需求产生对应的任务调度信息,而在任务调度需求中可以包含需要进行调度的一些任务的任务信息。因此,在接收到任务调度信息之后,可以通过对任务调度信息进行解析的方式来确定需要调度的任务对应的任务信息,进而根据任务信息来确定目标任务。

步骤S30,根据所述任务调度信息控制调度器对所述目标任务进行调度。

应当理解的是,在得到任务调度信息并确定目标任务之后,可以根据任务调度信息来控制调度器对目标任务进行调度。

可以理解的是,在通过即时调度模块接收到任务调度信息时,可以控制即时调度模块将任务调度信息发送给调度器,然后控制调度器根据任务调度信息对目标任务进行调度。

需要说明的是,可控制即时调度模块将任务信息保存到数据库中,并记录当前状态,根据当前状态控制即时调度模块与调度器进行通信,以将任务调度信息发送给调度器。

应当理解的是,为了达到较好的通信效果,可以获取调度器对应的调度器信息,根据调度器信息确定调度器接口信息,然后根据调度器接口信息确定调度器对应的HTTP接口,进而控制即时调度模块通过HTTP接口与调度器进行通信。

在具体实现中,MC收到消息后,可以按照以下顺序完成以下操作:1、将收到的消息保存到数据库,并记录下状态。2、和Scheduler之间进行通信,将Message对应的任务调度起来,并进行异步监控。3、异步返回成功提交消息给Message Client。

需要说明的是,由于现有的调度器不仅是只能实现定时调度的功能,而且也无法进行跨项目依赖,非常复杂的项目只能拆解成多个小项目,在某些特定的场合下无法满足需求。因此,本方案还可增加跨项目依赖节点,在不改变调度器任何代码的情况下满足跨项目调度需求。

需要说明的是,本实施例中的项目依赖节点可为一个依赖解决节点jar包(JavaARchive包),称其为Check Point,简称CP。CP为需要编码的一个程序,功能简单,只需要将一个成功信息写入到第三方存储中,一般选择数据库。我们会为在有向无环图中的每个任务生成唯一的U任务编号,若存在跨项目依赖,在依赖和被依赖项目的依赖位置增加一个CP节点。被依赖节点处的CP配置上依赖任务的节点编号,依赖节点处的CP配置上被依赖任务的节点编号。当任一任务执行到依赖节点时,会去检查数据库中是否存在本批次的对应的CP节点成功记录,若无,则一直等待。若存在,则将对应的状态消息删除或更新。消息发生变动后,之前写入消息的任务能够捕获到更新操作,之后任务继续向下游执行。依赖关系执行完毕。

应当理解的是,在控制调度器对目标任务进行调度之后,可以对调度器的任务调度过程进行异步监控,通过异步监控过程中得到的异步监控信息检测目标任务是否已被成功调用,在目标任务已被成功调用时,发送成功提交信息给即时调度模块。然后可以控制即时调度模块将成功提交信息存储到数据库中,对数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息,根据当前信息确定对应的当前任务,检测当前任务中是否存在跨项目依赖的任务,根据检测结果进行任务执行。

可以理解的是,通过上述方式,本方案增加即时调度模块,任务的调度不再单纯依靠定时器,可以满足按需调度。增加跨项目依赖节点,在不改变调度器任何代码的情况下满足跨项目调度需求。

可以理解的是,绝大多数中小型公司没有足够的人力去维护开源软件,往往有这些需求时,公司业务已经发展到一定程度,若是去修改调度器源代码,对现有业务的影响是需要谨慎评估的。本方案中的任务调度方法对调度器未产生任何修改,安全性最高,且使用的技术为成熟的java web方案,简单易上手。

在本实施例中,通过即时调度模块监听与任务调度相关的信息;在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;根据所述任务调度信息控制调度器对所述目标任务进行调度。本方案可以通过增加即时调度模块来进行信息监听,通过即时调度模块接收任务调度信息并确定目标任务,可以即时地控制调度器调度目标任务,从而克服了现有技术中存在的缺陷,使任务的调度不再单纯依靠定时器,可以满足按需求进行即时调度。

在一实施例中,如图3所示,基于第一实施例提出本发明任务调度方法第二实施例,所述步骤S30,包括:

步骤S301,控制所述即时调度模块将所述任务调度信息发送给调度器。

应当理解的是,由于任务调度信息是即时调度模块接收的,而任务调度需要由调度器来执行,因此,为了达到较好的数据传输效果和任务调度效果,可以通过MC和Scheduler之间单向通信,控制即时调度模块将任务调度信息发送给调度器。

进一步地,为了提高数据传输的效率,并且为了避免数据丢失,保证数据的完整性和安全性,所述步骤S301,包括:

控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

可以理解的是,在即时调度模块接收到任务调度信息时,可控制即时调度模块将任务调度信息保存到数据库中,并且记录下当前状态。通过当前状态来判断是否需要将任务调度信息发送给调度器,在需要将任务调度信息发送给调度器的情况下,可以控制即时调度模块与调度器进行通信,然后通过即时调度模块与调度器之间的通信将任务调度信息发送给调度器,以使调度器根据接收到的任务调度信息来对目标任务进行调度。

进一步地,为使即时调度模块与调度器能够进行稳定的通信,所述根据所述当前状态控制所述即时调度模块与调度器进行通信,包括:

获取调度器对应的调度器信息;根据所述调度器信息确定调度器接口信息;根据所述调度器接口信息确定所述调度器对应的HTTP接口;控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

应当理解的是,由于调度器可能具有多种类型的API接口,这些接口具有不同的作用,而本方案为了达到较好的通信效果,使即时调度模块与调度器之间能够极性稳定的通信,本方案控制即时调度模块与调度器之间进行单向通信,使即时调度模块通过调度器的HTTP接口与调度器进行通信。

需要说明的是,本实施例中的调度器信息可以包括但不限于调度器接口信息,还可包括其他类型的与调度器相关的信息,本实施例对此不作限制。

可以理解的是,为了使即时调度模块准确地与调度器的HTTP接口进行通信,可以获取计算机设备中运行的调度器对应的调度器信息,然后根据调度器信息确定调度器对应的调度器接口信息。进而可以对调度器接口信息进行解析,以确定调度器对应的HTTP接口,然后可以控制即使调度模块通过该HTTP接口与调度器进行通信,使调度将任务调度信息对应的目标任务调度起来。

步骤S302,控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

应当理解的是,在通过上述方式,使即时调度模块与调度器进行通信之后,可控制即时调度模块将任务调度信息发送给调度器,进而可以控制调度器根据任务调度信息对目标任务进行调度。

在本实施例中,控制所述即时调度模块将所述任务调度信息发送给调度器,控制所述调度器根据所述任务调度信息对所述目标任务进行调度,从而可以通过即时调度模块与调度器之间进行单向通信,将任务调度信息对应的目标任务调度起来,实现即时任务调度。

在一实施例中,如图4所示,基于第一实施例或第二实施例提出本发明任务调度方法第三实施例,在本实施例中,基于第一实施例进行说明,所述步骤S30之后,还包括:

步骤S40,对所述调度器的任务调度过程进行异步监控。

应当理解的是,在调度器进行任务调度的过程中,可以对调度器的任务调度过程进行异步监控,通过异步监控来判断调度是否完成。

步骤S50,通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用。

可以理解的是,在进行异步监控时,可以得到对应的异步监控信息,因此,可以通过异步监控过程中得到的异步监控信息来检测与目标任务相关的调度是否完成,从而判断目标任务是否已被成功调用。

可以理解的是,如果与目标任务相关的调度没有完成,则说明目标任务还没有被成功调用,如果与目标任务相关的调度已经完成,则说明目标任务已被成功调用。

步骤S60,在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

应当理解的是,为了方便记录各项任务的调用状态,可以在检测到目标任务已经被成功调用时,发送成功提交信息给即时调度模块,由即时调度模块对各项任务的调用状态进行记录。

在本实施例中,对所述调度器的任务调度过程进行异步监控,通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用,在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块,从而可以通过异步监控的方式来检测目标任务是否已被成功调用,并通过即时调度模块来对各项任务的调用状态进行记录,进一步提高了任务调度效果。

在一实施例中,如图5所示,基于第三实施例提出本发明任务调度方法第四实施例,所述步骤S60之后,还包括:

步骤S70,控制所述即时调度模块将所述成功提交信息存储到数据库中。

应当理解的是,在即时调度模块接收到成功提交信息时,可以将成功递交信息存储到对应的数据库中,以通过数据库来对成功递交信息进行记录。

步骤S80,对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息。

可以理解的是,本实施例可通过遍历的方式来检测数据库中记录的成功提交信息。可以对数据库中存储的成功提交信息进行遍历,然后基于遍历结果,将遍历到的成功提交信息作为当前信息。

步骤S90,根据所述当前信息确定对应的当前任务。

可以理解的是,由于每个成功提交信息都有对应的任务,因此,通过上述方式将遍历到的成功提交信息作为当前信息之后,还可根据当前信息来确定对应的当前任务。

步骤S100,检测所述当前任务中是否存在跨项目依赖的任务。

可以理解的是,由于有一些任务之间可能存在跨项目的依赖关系,现有的调用器无法进行跨项目依赖,非常复杂的项目只能拆解成多个小项目,在某些特定的场合下无法满足需求。本方案提出的新的调度补偿方法,还可以在实现即时调度的前提下,进行跨项目依赖调度。可以增加跨项目依赖节点,在不改变调度器任何代码的情况下满足跨项目调度需求。

应当理解的是,在本实施例中,可以先检测当前任务中是否存在跨项目依赖的任务,如果不存在跨项目依赖的任务,则不需要进行跨项目依赖调度,如果存在跨项目依赖的任务,则需要进行跨项目依赖调度。

步骤S110,根据检测结果进行任务执行。

需要说明的是,可增加一个依赖解决节点jar包(Java ARchive包),称其为CheckPoint,简称CP。CP为需要编码的一个程序,功能简单,只需要将一个成功信息写入到第三方存储中,一般选择数据库。我们会为在有向无环图中的每个任务生成唯一的U任务编号,若存在跨项目依赖,在依赖和被依赖项目的依赖位置增加一个CP节点。被依赖节点处的CP配置上依赖任务的节点编号,依赖节点处的CP配置上被依赖任务的节点编号。当任一任务执行到依赖节点时,会去检查数据库中是否存在本批次的对应的CP节点成功记录,若无,则一直等待。若存在,则将对应的状态消息删除或更新。消息发生变动后,之前写入消息的任务能够捕获到更新操作,之后任务继续向下游执行。依赖关系执行完毕。

进一步地,为了提高跨项目任务调度的调度效果,可以根据当前任务生成有向无环图,将每个任务都作为有向无环图中的一个节点。并且,在生成有向无环图之后,还可为有向无环图中的每个任务生成对应的任务编号。在检测结果为存在跨项目依赖的任务时,在依赖项目和被依赖项目的依赖位置各增加一个目标节点,进而根据目标节点来进行任务执行。

需要说明的是,由于是在依赖项目和被依赖项目的依赖位置各增加一个目标节点,因此,为了便于说明,可以将目标节点区分为第一目标节点和第二目标节点这两种目标节点,其中,第一目标节点与依赖项目对应,第二目标节点与被依赖项目对应。

可以理解的是,可在依赖项目的依赖位置增加一个第一目标节点,在被依赖项目的依赖位置增加一个第二目标节点。

应当理解的是,还可根据依赖项目确定依赖任务,同时还可根据被依赖项目确定被依赖任务。而且,还可获取依赖任务对应的第一任务编号,以及第二依赖任务对应的第二任务编号。进而根据第一任务编号对第二目标任务进行配置,得到配置后的第二目标节点,同时还可根据第二任务编号对第一目标节点进行配置,得到配置后的第一目标节点,然后,可以根据配置后的第一目标节点和配置后的第二目标节点进行任务执行。

需要说明的是,本实施例中如果一个节点对应的任务执行完毕,那么就会生成对应的节点成功记录,并可将该节点成功记录存储在数据库中。

可以理解的是,在进行上述节点配置之后,当任务执行到配置后的第一目标节点时,可以检测数据库中是否存在配置后的第二目标节点的节点成功记录。如果数据库中不存在配置后的第二目标节点的节点成功记录,则继续进行等待,如果数据库中存在配置后的第二目标节点的节点成功记录,则可判定依赖关系任务执行完毕,将对应的状态消息删除或更新,继续向下游执行任务。

在本实施例中,控制所述即时调度模块将所述成功提交信息存储到数据库中;对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;根据所述当前信息确定对应的当前任务;检测所述当前任务中是否存在跨项目依赖的任务;根据检测结果进行任务执行。从而通过上述检测方式,可以检测到存在跨项目调度需求的任务,可对这些存在跨项目依赖的任务进行跨项目依赖执行,在不改变调度器任何代码的情况下满足跨项目调度需求。

此外,本发明实施例还提出一种存储介质,所述存储介质上存储有任务调度程序,所述任务调度程序被处理器执行时实现如上文所述的任务调度方法的步骤。

由于本存储介质采用了上述所有实施例的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。

此外,参照图6,本发明实施例还提出一种任务调度装置,所述任务调度装置包括:

信息监听模块10,用于通过即时调度模块监听与任务调度相关的信息。

需要说明的是,常规的计算机设备上在进行任务调度时,只能通过调度器实现定时调度的功能,本方案对此进行了改进,增加了即时调度模块,使任务的调度不再单纯依靠定时器,可以满足按需调度,从而实现任务的即时调度。

需要说明的是,本方案中的调度器仍然采用开源软件,本实施例对此不作限制,在本实施例中以调度器为Azkaban为例进行说明,将调度器称为Scheduler。本方案增加一个java web模块作为即时调度模块,称其为Message Center,简称MC。其中,MC和Scheduler之间可以进行单向通信。

应当理解的是,可以通过即时调度模块的消息接收接口监听与任务调度相关的信息。其中,与任务调度相关的信息可以包括但不限于调度任务需求信息,还可包括其他类型的与任务调度相关的信息,本实施例对此不作限制。

在具体实现中,所述消息接收接口具体可为即时调度模块的Message ReceiveAPI,MC可以对外暴露Message Receive API。其中,Message Receive API可以包括但不限于Http API,Apache Kafka API,Apache Pulsar API,Apache RabbitMQ API等,本实施例对此不作限制。

可以理解的是,即时调度模块可以通过对外暴露的Message Receive API来获取与任务调度相关的信息。例如,如果当前存在调度需求,则可通过即时调度模块监听与该调度需求相关的任务调度信息。

任务检测模块20,用于在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务。

应当理解的是,在通过即时调度模块进行信息监听的过程中,如果接收到了任务调度信息,则可对任务调度信息进行解析,以确定目标任务。

在具体实现中,如果需要存在任务调度需求,则会根据该任务调度需求产生对应的任务调度信息,而在任务调度需求中可以包含需要进行调度的一些任务的任务信息。因此,在接收到任务调度信息之后,可以通过对任务调度信息进行解析的方式来确定需要调度的任务对应的任务信息,进而根据任务信息来确定目标任务。

任务调度模块30,用于根据所述任务调度信息控制调度器对所述目标任务进行调度。

应当理解的是,在得到任务调度信息并确定目标任务之后,可以根据任务调度信息来控制调度器对目标任务进行调度。

可以理解的是,在通过即时调度模块接收到任务调度信息时,可以控制即时调度模块将任务调度信息发送给调度器,然后控制调度器根据任务调度信息对目标任务进行调度。

需要说明的是,可控制即时调度模块将任务信息保存到数据库中,并记录当前状态,根据当前状态控制即时调度模块与调度器进行通信,以将任务调度信息发送给调度器。

应当理解的是,为了达到较好的通信效果,可以获取调度器对应的调度器信息,根据调度器信息确定调度器接口信息,然后根据调度器接口信息确定调度器对应的HTTP接口,进而控制即时调度模块通过HTTP接口与调度器进行通信。

在具体实现中,MC收到消息后,可以按照以下顺序完成以下操作:1、将收到的消息保存到数据库,并记录下状态。2、和Scheduler之间进行通信,将Message对应的任务调度起来,并进行异步监控。3、异步返回成功提交消息给Message Client。

需要说明的是,由于现有的调度器不仅是只能实现定时调度的功能,而且也无法进行跨项目依赖,非常复杂的项目只能拆解成多个小项目,在某些特定的场合下无法满足需求。因此,本方案还可增加跨项目依赖节点,在不改变调度器任何代码的情况下满足跨项目调度需求。

需要说明的是,本实施例中的项目依赖节点可为一个依赖解决节点jar包(JavaARchive包),称其为Check Point,简称CP。CP为需要编码的一个程序,功能简单,只需要将一个成功信息写入到第三方存储中,一般选择数据库。我们会为在有向无环图中的每个任务生成唯一的U任务编号,若存在跨项目依赖,在依赖和被依赖项目的依赖位置增加一个CP节点。被依赖节点处的CP配置上依赖任务的节点编号,依赖节点处的CP配置上被依赖任务的节点编号。当任一任务执行到依赖节点时,会去检查数据库中是否存在本批次的对应的CP节点成功记录,若无,则一直等待。若存在,则将对应的状态消息删除或更新。消息发生变动后,之前写入消息的任务能够捕获到更新操作,之后任务继续向下游执行。依赖关系执行完毕。

应当理解的是,在控制调度器对目标任务进行调度之后,可以对调度器的任务调度过程进行异步监控,通过异步监控过程中得到的异步监控信息检测目标任务是否已被成功调用,在目标任务已被成功调用时,发送成功提交信息给即时调度模块。然后可以控制即时调度模块将成功提交信息存储到数据库中,对数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息,根据当前信息确定对应的当前任务,检测当前任务中是否存在跨项目依赖的任务,根据检测结果进行任务执行。

可以理解的是,通过上述方式,本方案增加即时调度模块,任务的调度不再单纯依靠定时器,可以满足按需调度。增加跨项目依赖节点,在不改变调度器任何代码的情况下满足跨项目调度需求。

可以理解的是,绝大多数中小型公司没有足够的人力去维护开源软件,往往有这些需求时,公司业务已经发展到一定程度,若是去修改调度器源代码,对现有业务的影响是需要谨慎评估的。本方案中的任务调度方法对调度器未产生任何修改,安全性最高,且使用的技术为成熟的java web方案,简单易上手。

在本实施例中,通过即时调度模块监听与任务调度相关的信息;在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;根据所述任务调度信息控制调度器对所述目标任务进行调度。本方案可以通过增加即时调度模块来进行信息监听,通过即时调度模块接收任务调度信息并确定目标任务,可以即时地控制调度器调度目标任务,从而克服了现有技术中存在的缺陷,使任务的调度不再单纯依靠定时器,可以满足按需求进行即时调度。

在一实施例中,所述任务调度模块30,还用于控制所述即时调度模块将所述任务调度信息发送给调度器;控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

在一实施例中,所述任务调度模块30,还用于控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

在一实施例中,所述任务调度模块30,还用于获取调度器对应的调度器信息;根据所述调度器信息确定调度器接口信息;根据所述调度器接口信息确定所述调度器对应的HTTP接口;控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

在一实施例中,所述信息监听模块10,还用于通过即时调度模块的消息接收接口监听与任务调度相关的信息。

在一实施例中,所述任务调度装置,还包括异步监控模块,用于对所述调度器的任务调度过程进行异步监控;通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用;在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

在一实施例中,所述任务调度装置,还包括任务执行模块,用于控制所述即时调度模块将所述成功提交信息存储到数据库中;对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;根据所述当前信息确定对应的当前任务;检测所述当前任务中是否存在跨项目依赖的任务;根据检测结果进行任务执行。

在一实施例中,所述任务执行模块,还用于根据所述当前任务生成有向无环图;为所述有向无环图中的每个任务生成对应的任务编号;在检测结果为存在跨项目依赖的任务时,在依赖项目和被依赖项目的依赖位置各增加一个目标节点;根据所述目标节点进行任务执行。

在一实施例中,所述目标节点包括:第一目标节点和第二目标节点;所述任务执行模块,还用于在依赖项目的依赖位置增加第一目标节点;在被依赖项目的依赖位置增加第二目标节点。

在一实施例中,所述任务执行模块,还用于根据依赖项目确定依赖任务,并根据被依赖项目确定被依赖任务;获取所述依赖任务对应的第一任务编号,以及所述被依赖任务对应的第二任务编号;根据所述第一任务编号对所述第二目标节点进行配置,得到配置后的第二目标节点;根据所述第二任务编号对所述第一目标节点进行配置,得到配置后的第一目标节点;根据所述配置后的第一目标节点和所述配置后的第二目标节点进行任务执行。

在一实施例中,所述任务执行模块,还用于当任务执行到所述配置后的第一目标节点时,检测所述数据库中是否存在所述配置后的第二目标节点的节点成功记录;若所述数据库中存在所述配置后的第二目标节点的节点成功记录,则判定依赖关系任务执行完毕,继续向下游执行任务。

在本发明所述任务调度装置的其他实施例或具体实现方法可参照上述各方法实施例,此处不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该估算机软件产品存储在如上所述的一个估算机可读存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台智能设备(可以是手机,估算机,任务调度设备,或者网络任务调度设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

本发明公开了A1、一种任务调度方法,所述任务调度方法包括:

通过即时调度模块监听与任务调度相关的信息;

在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;

根据所述任务调度信息控制调度器对所述目标任务进行调度。

A2、如A1所述的任务调度方法,所述根据所述任务调度信息控制调度器对所述目标任务进行调度,包括:

控制所述即时调度模块将所述任务调度信息发送给调度器;

控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

A3、如A2所述的任务调度方法,所述控制所述即时调度模块将所述任务调度信息发送给调度器,包括:

控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;

根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

A4、如A3所述的任务调度方法,所述根据所述当前状态控制所述即时调度模块与调度器进行通信,包括:

获取调度器对应的调度器信息;

根据所述调度器信息确定调度器接口信息;

根据所述调度器接口信息确定所述调度器对应的HTTP接口;

控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

A5、如A1至A4中任一项所述的任务调度方法,所述通过即时调度模块监听与任务调度相关的信息,包括:

通过即时调度模块的消息接收接口监听与任务调度相关的信息。

A6、如A1至A4中任一项所述的任务调度方法,所述根据所述任务调度信息控制调度器对所述目标任务进行调度之后,还包括:

对所述调度器的任务调度过程进行异步监控;

通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用;

在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

A7、如A6所述的任务调度方法,所述在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块之后,还包括:

控制所述即时调度模块将所述成功提交信息存储到数据库中;

对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;

根据所述当前信息确定对应的当前任务;

检测所述当前任务中是否存在跨项目依赖的任务;

根据检测结果进行任务执行。

A8、如A7所述的任务调度方法,所述根据检测结果进行任务执行,包括:

根据所述当前任务生成有向无环图;

为所述有向无环图中的每个任务生成对应的任务编号;

在检测结果为存在跨项目依赖的任务时,在依赖项目和被依赖项目的依赖位置各增加一个目标节点;

根据所述目标节点进行任务执行。

A9、如A8所述的任务调度方法,所述目标节点包括:第一目标节点和第二目标节点;

所述在依赖项目和被依赖项目的依赖位置各增加一个目标节点,包括:

在依赖项目的依赖位置增加第一目标节点;

在被依赖项目的依赖位置增加第二目标节点。

A10、如A9所述的任务调度方法,所述根据所述目标节点进行任务执行,包括:

根据依赖项目确定依赖任务,并根据被依赖项目确定被依赖任务;

获取所述依赖任务对应的第一任务编号,以及所述被依赖任务对应的第二任务编号;

根据所述第一任务编号对所述第二目标节点进行配置,得到配置后的第二目标节点;

根据所述第二任务编号对所述第一目标节点进行配置,得到配置后的第一目标节点;

根据所述配置后的第一目标节点和所述配置后的第二目标节点进行任务执行。

A11、如A10所述的任务调度方法,所述根据配置后的第一目标节点和配置后的第二目标节点进行任务执行,包括:

当任务执行到所述配置后的第一目标节点时,检测所述数据库中是否存在所述配置后的第二目标节点的节点成功记录;

若所述数据库中存在所述配置后的第二目标节点的节点成功记录,则判定依赖关系任务执行完毕,继续向下游执行任务。

本发明还公开了B12、一种任务调度装置,所述任务调度装置包括:

信息监听模块,用于通过即时调度模块监听与任务调度相关的信息;

任务检测模块,用于在通过所述即时调度模块接收到任务调度信息时,根据所述任务调度信息确定目标任务;

任务调度模块,用于根据所述任务调度信息控制调度器对所述目标任务进行调度。

B13、如B12所述的任务调度装置,所述任务调度模块,还用于控制所述即时调度模块将所述任务调度信息发送给调度器;控制所述调度器根据所述任务调度信息对所述目标任务进行调度。

B14、如B13所述的任务调度装置,所述任务调度模块,还用于控制所述即时调度模块将所述任务调度信息保存到数据库中,并记录当前状态;根据所述当前状态控制所述即时调度模块与调度器进行通信,以将所述任务调度信息发送给所述调度器。

B15、如B14所述的任务调度装置,所述任务调度模块,还用于获取调度器对应的调度器信息;根据所述调度器信息确定调度器接口信息;根据所述调度器接口信息确定所述调度器对应的HTTP接口;控制所述即时调度模块通过所述HTTP接口与所述调度器进行通信。

B16、如B12至B15中任一项所述的任务调度装置,所述信息监听模块,还用于通过即时调度模块的消息接收接口监听与任务调度相关的信息。

B17、如B12至B15中任一项所述的任务调度装置,所述任务调度装置,还包括:

异步监控模块,用于对所述调度器的任务调度过程进行异步监控;通过异步监控过程中得到的异步监控信息检测所述目标任务是否已被成功调用;在所述目标任务已被成功调用时,发送成功提交信息给所述即时调度模块。

B18、如B17所述的任务调度装置,所述任务调度装置,还包括:

任务执行模块,用于控制所述即时调度模块将所述成功提交信息存储到数据库中;对所述数据库中存储的成功提交信息进行遍历,并将遍历到的成功提交信息作为当前信息;根据所述当前信息确定对应的当前任务;检测所述当前任务中是否存在跨项目依赖的任务;根据检测结果进行任务执行。

本发明还公开了C19、一种任务调度设备,所述任务调度设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的任务调度程序,所述任务调度程序被处理器执行时实现如上所述的任务调度方法。

本发明还公开了D20、一种存储介质,所述存储介质上存储有任务调度程序,所述任务调度程序被处理器执行时实现如上所述的任务调度方法。

相关技术
  • 一种任务调度方法、装置、设备和存储介质
  • 一种任务调度方法、装置、电子设备及存储介质
  • 任务调度方法、装置、终端及存储介质
  • 一种后端存储设备的管理方法、装置、设备以及存储介质
  • 存储设备在线检测方法、装置、设备及可读存储介质
  • 任务调度方法、任务调度装置、任务调度设备及存储介质
  • 存储设备中闪存任务调度方法、装置、存储介质及设备
技术分类

06120116087418