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

一种任务执行及调度方法、系统、装置、计算设备及介质

文献发布时间:2023-06-19 10:38:35


一种任务执行及调度方法、系统、装置、计算设备及介质

技术领域

本公开涉及计算机技术领域,具体而言,涉及一种任务执行及调度方法、系统、装置、计算设备及介质。

背景技术

随着互联网时代来临,数据量暴增,开始使用大数据工具来替代经典数据仓库中的传统工具。一个完整的大数据分析系统,必然由很多任务单元组成,所有的任务单元及其之间的依赖关系组成了复杂的工作流,为了管理复杂的工作流,出现了各种任务调度系统。

目前,常见的任务调度系统是将不同用户开发的任务组合成一个任务组,其中,该任务组中的各个任务具有一定的执行依赖关系,基于执行依赖关系相互协作,可以实现一定的预设功能,在对该任务组中的任务进行调度时,只有在任务组的每一个任务的执行时间到达时,才获取其对应的最新的任务环境,基于最新的任务环境对其进行实例化,保证了实例化每一个任务的灵活性。

但是,利用上述方法对任务组中的每一个任务进行调度处理时,如果在到达任务组中的某一个任务的执行时间的情况下,该任务却没有启动,需要依次检查其依赖的上游任务是否执行出错,在出错的上游任务与此任务之间存在很多任务时,依次检查的方式将增加运维的难度,降低任务调度系统的性能。

发明内容

本公开实施例至少提供一种任务执行及调度方法、系统、装置、计算设备及介质。

第一方面,本公开实施例提供了一种任务执行方法,包括:

获取调度器发送的预设功能对应的任务实例,配置所述任务实例的执行环境;其中,所述任务实例存在于第一实例图中,所述第一实例图由所述调度器根据所述预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例;

基于所述任务实例,确定所述任务实例对应的待执行任务所包括的至少一个待执行步骤;

基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用所述执行实体执行对应的待执行步骤。

在一种可能的实施方式中,所述基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,包括:

配置所述至少一个待执行步骤中每个待执行步骤的工作环境,并基于所述任务实例和所述每个待执行步骤的工作环境,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体。

在一种可能的实施方式中,执行所述待执行步骤,还包括:

获取所述任务实例对应的每个待执行步骤的执行状态信息;

在基于所述执行状态信息,确定所述任务实例对应的每个待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,所述获取所述任务实例对应的每个待执行步骤的执行状态信息,包括:

接收所述执行实体在所述待执行步骤执行完成的情况下,发送的指示所述待执行步骤执行完成的第一状态信息;和/或

从预设存储部件中获取所述待执行步骤的第二状态信息;其中,执行实体在所述待执行步骤执行完成的情况下,将指示所述待执行步骤执行完成的第二状态信息存入所述预设存储部件;

将获取的所述第一状态信息和/或所述第二状态信息作为所述待执行步骤对应的执行状态信息。

在一种可能的实施方式中,所述方法还包括:

在执行器重新启动和/或所述任务实例重新执行的情况下,从所述预设存储部件中获取所述任务实例对应的第一状态信息和/或第二状态信息;

基于所述第一状态信息和/或第二状态信息,确定所述任务实例中未执行完成的目标执行步骤;

在确定所述目标执行步骤的执行实体正在执行所述目标执行步骤的情况下,基于所述执行实体当前的执行进度,利用所述执行实体继续执行所述目标执行步骤。

在一种可能的实施方式中,在更新所述任务实例的状态之前,还包括:

在所述任务实例对应的所有待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

第二方面,本公开实施例提供一种任务调度方法,包括:

在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与所述待执行任务具有第一依赖关系的其他待执行任务;

基于所述具有第一执行顺序的待执行任务和所述其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例;

基于所述第一依赖关系和所述任务实例,生成第一实例图,并基于第一实例图向对应的执行器发送任务实例。

在一种可能的实施方式中,所述基于第一实例图向对应的执行器发送任务实例,包括:

将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;

在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于所述第一依赖关系和所述第一实例图,确定具有第二执行顺序的待执行任务;

将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器,包括:

获取具有第一执行顺序的待执行任务对应的任务实例的执行结果信息;

将所述执行结果信息和所述具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述方法还包括:

获取所述预设功能的执行周期,并基于所述执行周期和所述预设执行时间,确定所述具有第一执行顺序的待执行任务下一次执行的目标执行时间;

在到达所述目标执行时间的情况下,确定所述具有第一执行顺序的待执行任务与所述预设功能对应的其他待执行任务之间的第二依赖关系;

在所述第一依赖关系与所述第二依赖关系不相同的情况下,基于所述第二依赖关系生成第二实例图。

第三方面,本公开实施例还提供一种任务执行装置,包括:

获取模块,用于获取调度器发送的预设功能对应的任务实例,配置所述任务实例的执行环境;其中,所述任务实例存在于第一实例图中,所述第一实例图由所述调度器根据所述预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例;

第一确定模块,用于基于所述任务实例,确定所述任务实例对应的待执行任务所包括的至少一个待执行步骤;

执行模块,用于基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用所述执行实体执行对应的待执行步骤。

在一种可能的实施方式中,所述执行模块,具体用于配置所述至少一个待执行步骤中每个待执行步骤的工作环境,并基于所述任务实例和所述每个待执行步骤的工作环境,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体。

在一种可能的实施方式中,所述执行模块,还用于获取所述任务实例对应的每个待执行步骤的执行状态信息;在基于所述执行状态信息,确定所述任务实例对应的每个待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,所述执行模块,用于接收所述执行实体在所述待执行步骤执行完成的情况下,发送的指示所述待执行步骤执行完成的第一状态信息;和/或从预设存储部件中获取所述待执行步骤的第二状态信息;其中,执行实体在所述待执行步骤执行完成的情况下,将指示所述待执行步骤执行完成的第二状态信息存入所述预设存储部件;将获取的所述第一状态信息和/或所述第二状态信息作为所述待执行步骤对应的执行状态信息。

在一种可能的实施方式中,所述执行模块,还用于在执行器重新启动和/或所述任务实例重新执行的情况下,从所述预设存储部件中获取所述任务实例对应的第一状态信息和/或第二状态信息;基于所述第一状态信息和/或第二状态信息,确定所述任务实例中未执行完成的目标执行步骤;在确定所述目标执行步骤的执行实体正在执行所述目标执行步骤的情况下,基于所述执行实体当前的执行进度,利用所述执行实体继续执行所述目标执行步骤。

在一种可能的实施方式中,所述执行模块,还用于在更新所述任务实例的状态之前,在所述任务实例对应的所有待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

第四方面,本公开实施例还提供一种任务调度装置,包括:

第二确定模块,用于在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与所述待执行任务具有第一依赖关系的其他待执行任务;

生成模块,用于基于所述具有第一执行顺序的待执行任务和所述其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例;以及基于所述第一依赖关系和所述任务实例,生成第一实例图;

发送模块,用于基于第一实例图向对应的执行器发送任务实例。

在一种可能的实施方式中,所述发送模块,用于将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于所述第一依赖关系和所述第一实例图,确定具有第二执行顺序的待执行任务;将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述发送模块,用于获取具有第一执行顺序的待执行任务对应的任务实例的执行结果信息;将所述执行结果信息和所述具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述第二确定模块,用于获取所述预设功能的执行周期,并基于所述执行周期和所述预设执行时间,确定所述具有第一执行顺序的待执行任务下一次执行的目标执行时间;在到达所述目标执行时间的情况下,确定所述具有第一执行顺序的待执行任务与所述预设功能对应的其他待执行任务之间的第二依赖关系;

所述生成模块,用于在所述第一依赖关系与所述第二依赖关系不相同的情况下,基于所述第二依赖关系生成第二实例图。

第五方面,本公开实施例还提供一种任务调度系统,包括调度器和执行器,其中:

所述调度器配置为,在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与所述待执行任务具有第一依赖关系的其他待执行任务;基于所述具有第一执行顺序的待执行任务和所述其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例;基于所述第一依赖关系和所述任务实例,生成第一实例图,并基于第一实例图向对应的执行器发送任务实例;

所述执行器配置为,获取调度器发送的预设功能对应的任务实例,配置所述任务实例的执行环境;其中,所述任务实例存在于第一实例图中,所述第一实例图由所述调度器根据所述预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例;基于所述任务实例,确定所述任务实例对应的待执行任务所包括的至少一个待执行步骤;基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用所述执行实体执行对应的待执行步骤。

在一种可能的实施方式中,所述执行器配置为,配置所述至少一个待执行步骤中每个待执行步骤的工作环境,并基于所述任务实例和所述每个待执行步骤的工作环境,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体。

在一种可能的实施方式中,所述执行器还配置为,获取所述任务实例对应的每个待执行步骤的执行状态信息;在基于所述执行状态信息,确定所述任务实例对应的每个待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,所述执行器配置为,接收所述执行实体在所述待执行步骤执行完成的情况下,发送的指示所述待执行步骤执行完成的第一状态信息;和/或从预设存储部件中获取所述待执行步骤的第二状态信息;其中,执行实体在所述待执行步骤执行完成的情况下,将指示所述待执行步骤执行完成的第二状态信息存入所述预设存储部件;将获取的所述第一状态信息和/或所述第二状态信息作为所述待执行步骤对应的执行状态信息。

在一种可能的实施方式中,所述执行器还配置为,在执行器重新启动和/或所述任务实例重新执行的情况下,从所述预设存储部件中获取所述任务实例对应的第一状态信息和/或第二状态信息;基于所述第一状态信息和/或第二状态信息,确定所述任务实例中未执行完成的目标执行步骤;在确定所述目标执行步骤的执行实体正在执行所述目标执行步骤的情况下,基于所述执行实体当前的执行进度,利用所述执行实体继续执行所述目标执行步骤。

在一种可能的实施方式中,所述执行器还配置为,在更新所述任务实例的状态之前,在所述任务实例对应的所有待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,所述调度器配置为,将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于所述第一依赖关系和所述第一实例图,确定具有第二执行顺序的待执行任务;将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述调度器配置为,获取具有第一执行顺序的待执行任务对应的任务实例的执行结果信息;将所述执行结果信息和所述具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述调度器还配置为,获取所述预设功能的执行周期,并基于所述执行周期和所述预设执行时间,确定所述具有第一执行顺序的待执行任务下一次执行的目标执行时间;在到达所述目标执行时间的情况下,确定所述具有第一执行顺序的待执行任务与所述预设功能对应的其他待执行任务之间的第二依赖关系;在所述第一依赖关系与所述第二依赖关系不相同的情况下,基于所述第二依赖关系生成第二实例图。

第六方面,本公开可选实现方式还提供一种计算设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。

第七方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。

关于上述任务执行及调度装置、系统、计算设备、及计算机可读存储介质的效果描述参见上述任务执行及调度方法的说明,这里不再赘述。

本公开实施例提供的任务执行及调度方法、系统、装置、计算设备及介质,采用将生成的包括具有依赖关系的若干个任务实例的第一实例图中的任务实例依照其执行顺序发送给执行器,执行器基于接收到的任务实例,生成任务实例所包括的每个待执行步骤对应的执行实体,利用该执行实体执行每一待执行步骤的方法,与现有技术中的将不同用户开发的任务组合成一个任务组,在任务组的每一个任务的执行时间到达时,才获取其对应的最新的任务环境,基于最新的任务环境对其进行实例化,如果在到达任务组中的某一个任务的执行时间的情况下,该任务却没有启动,需要依次检查其依赖的上游任务是否执行出错,在出错的上游任务与此任务之间存在很多任务时,依次检查的方式将增加运维的难度,降低任务调度系统的性能相比,其将生成的包括具有依赖关系的若干个任务实例的第一实例图中的任务实例依照其执行顺序发送给执行器,保证了每一任务实例可以按照依赖关系顺序执行,并且利用第一实例图对其包括的任务实例进行纠错查询,降低了运维的难度;执行器基于接收到的任务实例,生成任务实例所包括的每个待执行步骤对应的执行实体,利用该执行实体执行每一待执行步骤,实现了在确定执行每一待执行步骤的时候才对其进行实例化,保证了实例化的及时性,利用调度器生成静态的第一实例图,当确定实例图中包括的任务实例可以执行时,将其发送至执行器,动态的配置其最新的执行环境以及包括的每一个待执行步骤的工作环境,对任务实例进行实例化,利用动静结合的方式调度和执行每一任务实例,提高了调度和执行每一任务实例的灵活性,提高了任务调度系统的运行结果的可靠性。

进一步,本公开实施例提供的任务执行方法,还可以基于执行实体发送的第一状态信息和存储的第二状态信息确定对应的任务实例的执行状态信息,提高了确定的任务实例的执行状态信息的及时性和可靠性。

进一步,本公开实施例提供的任务执行方法,还可以在执行器重新启动和/或任务实例重新执行的情况下,当确定仍然存在执行实体正在执行时,可以基于执行实体当前的执行进度继续执行未完成的目标执行步骤,保证执行器重新启动不会对已生成的执行实体和已执行完成的待执行步骤造成影响,节省了集群资源,提高了恢复执行目标执行步骤的速度,提高了任务调度系统的运行效率和开发效率。

进一步,本公开实施例提供的任务调度方法,在第一实例图中的每一任务实例均执行完成时,如果此时存在用户更新的任务之间的第二依赖关系,则在具有第一执行顺序的待执行任务到达下一次执行的目标执行时间时,基于第二依赖关系生成第二实例图,既保证了已生成的第一实例图的执行结果的可靠性,还保证了生成第二实例图的及时性,提升了调度任务的灵活性。

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

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本公开实施例所提供的一种任务执行方法的流程图;

图2示出了本公开实施例所提供一种执行器的整体框架的示意图;

图3示出了本公开实施例所提供的一种执行器和执行实体之间的协作机制示意图;

图4示出了本公开实施例所提供的一种执行器的整体框架中各部分之间的交互示意图;

图5示出了本公开实施例所提供的一种任务调度方法的流程图;

图6示出了本公开实施例所提供的一种调度器的整体框架的示意图;

图7示出了本公开实施例所提供的一种调度器的整体框架中各部分之间的交互示意图;

图8示出了本公开实施例提供的一种任务执行装置的示意图;

图9示出了本公开实施例提供的一种任务调度装置的示意图;

图10示出了本公开实施例提供的一种任务调度系统的示意图;

图11示出了本公开实施例提供的一种任务调度系统中各部分的交互示意图;

图12示出了本公开实施例提供的计算设备结构示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。

在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

经研究发现,常见的任务调度系统是将不同用户开发的任务组合成一个任务组,其中,该任务组中的各个任务具有一定的执行依赖关系,基于执行依赖关系相互协作,可以实现一定的预设功能,在对该任务组中的任务进行调度时,只有在任务组的每一个任务的执行时间到达时,才获取其对应的最新的任务环境,基于最新的任务环境对其进行实例化,保证了实例化每一个任务的灵活性;但是,利用上述方法对任务组中的每一个任务进行调度处理时,如果在到达任务组中的某一个任务的执行时间的情况下,该任务却没有启动,需要依次检查其依赖的上游任务是否执行出错,在出错的上游任务与此任务之间存在很多任务时,依次检查的方式将增加运维的难度,降低任务调度系统的性能。

基于上述研究,本公开提供了一种任务执行及调度方法、系统、装置、计算设备及介质,将生成的包括具有依赖关系的若干个任务实例的第一实例图中的任务实例依照其执行顺序发送给执行器,保证了每一任务实例可以按照依赖关系顺序执行,并且利用第一实例图对其包括的任务实例进行纠错查询,降低了运维的难度;执行器基于接收到的任务实例,生成任务实例所包括的每个待执行步骤对应的执行实体,利用该执行实体执行每一待执行步骤,实现了在确定执行每一待执行步骤的时候才对其进行实例化,保证了实例化的及时性,利用调度器生成静态的第一实例图,当确定实例图中包括的任务实例可以执行时,将其发送至执行器,动态的配置其最新的执行环境以及包括的每一个待执行步骤的工作环境,对任务实例进行实例化,利用动静结合的方式调度和执行每一任务实例,提高了调度和执行每一任务实例的灵活性,提高了任务调度系统的运行结果的可靠性。

针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

需要说明的是,本公开实施例中所提到的特定名词包括:

DAG:Directed Acyclic Graph,有向无环图,不同任务相互依赖构成一张DAG图;

任务:实现一个完整功能的流程,它是最小的调度单位;

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”,是对任务流程及其各操作步骤之间业务规则的抽象、概括描述;

CPU:central processing unit,中央处理器;

HBase:一个分布式的、面向列的开源数据库;

API:Application Programming Interface,应用程序接口,是一些预先定义的函数,或指软件系统不同组成部分衔接的约定;用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

为便于对本实施例进行理解,首先对本公开实施例所公开的一种任务执行及调度方法的应用场景进行介绍,在企业级应用场景中,需要利用调度器调用不同的任务,然后把调用的每一个任务发送给对应的执行器以执行每一个任务,这样,基于多个任务之间的协作运行可以实现不同的企业应用功能,其中,多个任务组成一个工作流,在工作流中的多个任务之间具有强依赖关系,除第一顺序的任务可以根据该任务的执行时间执行之外,下游任务必须是在上游任务执行成功的基础上才可以执行的,否则将造成该工作流的运行结果出错,因此,为了保证该工作流的运行结果的准确性,就必须保证工作流中的每一个任务按照所属的上下游依赖关系高效的执行,所以一个合理的任务调度和执行方法将有效的解决这个问题,并且在企业级场景中,可能需要每天执行若干个工作流,为了保证每一个工作流的运行效率,一个完整且高效的任务调度系统将显得至关重要。

下面对本公开实施例所公开的一种任务执行及调度方法进行详细介绍,本公开实施例所提供的任务执行及调度方法的执行主体一般为具有一定计算能力的计算设备,该计算设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(UserEquipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(PersonalDigital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该任务执行及调度方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。

下面以执行主体为计算设备为例对本公开实施例提供的任务执行及调度方法加以说明。

实施例一

如图1所示,为本公开实施例提供的任务执行方法的流程图,可以包括以下步骤:

S101:获取调度器发送的预设功能对应的任务实例,配置任务实例的执行环境。

其中,任务实例存在于第一实例图中,第一实例图由调度器根据预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例。

具体实施时,执行器获取调度器发送过来的根据预设功能对应的至少一个待执行任务生成的第一实例图中的某一个任务实例,基于获取的该任务实例,执行器配置其对应的执行环境,准备启动该任务实例,其中,执行环境可以包括针对该任务实例在计算设备的本地磁盘中建立工作目录和准备执行该任务实例所需要的程序代码等。本步骤中,是在确定要执行该任务实例时,才获取其对应的程序代码,保证了第一实例图中所包括的任务实例对应的程序代码在被获取之前可以是独立存放的,避免了不同任务之间的程序代码的相互耦合,实现了不同任务之间的完全解耦,提高了此任务执行方法对应的任务调度系统的应用可靠性。

如图2所示,为本公开实施例所提供的一种执行器的整体框架的示意图,其中,执行器可以包括任务执行管理组件和步骤执行管理组件两部分,具体的,任务执行管理组件可以包括Task runner manager(任务执行管理器)和Task runner(任务执行器)两部分,步骤执行管理组件可以包括Stage runner manager(步骤执行管理器)、Stage runner(步骤执行器)和stage runner manager(步骤运行管理器)三部分,在一种实施方式中,执行器中的Task runner manager负责获取调度器发送过来的任务实例,Task runner负责配置任务实例的执行环境。

S102:基于任务实例,确定任务实例对应的待执行任务所包括的至少一个待执行步骤。

本步骤中,执行器在配置完获取的任务实例的执行环境的过程中,可以根据此任务实例确定其对应的待执行任务所包括的待执行步骤,其中,每一个任务实例中所包括的待执行步骤至少为一个。具体实施时,可以由图2中的Task runner manager或者Taskrunner确定每一个任务实例中所包括的待执行步骤。

S103:基于任务实例,生成至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用执行实体执行对应的待执行步骤。

具体实施时,执行器在基于获取的任务实例,确定每一个任务实例所包含的至少一个待执行步骤之后,需要判断至少一个待执行步骤中是否存在可以执行的待执行步骤,具体实施时,可以根据待执行步骤的执行顺序和/或待执行步骤的执行时间进行判断,在确定存在可以执行的待执行步骤时,根据用户设置的最新的任务配置,为每一个待执行步骤配置具体的工作环境,其中,工作环境可以包括根据对应的待执行任务的特征信息确定的并发控制信息,用于确定在某一待执行步骤执行失败时、是否可以执行依赖该待执行步骤的下游步骤的失败策略以及执行该待执行步骤的程序代码的版本信息等,在一种实施方式中,特征信息可以包括每一个待执行任务的基本信息(例如,待执行任务名称和待执行任务时间等)和上下游信息等(例如,待执行任务的上游依赖任务和下游触发任务)。

进一步的,可以根据任务实例对应的执行环境以及为待执行步骤配置的工作环境生成一个执行该待执行步骤的执行实体,利用此执行实体执行对应的待执行步骤,在一种实施方式中,该执行实体可以为每一个待执行步骤对应的进程,另外,执行器在生成每一个待执行步骤的执行实体并利用此执行实体执行对应的待执行步骤之后,将生成一个负责存储执行实体的执行队列。

具体实施时,在执行每一个待执行步骤的过程中,执行器通过监控待执行步骤对应的执行队列以获取任务实例对应的每一个待执行步骤的执行状态信息,然后根据每一个待执行步骤的执行状态信息确定是否将获取的任务实例的状态更新为完成状态。需要说明的是,执行器在获取调度器发送的任务实例之后,针对执行器对该任务实例执行的每一个操作对应的操作信息,都将生成对应的日志信息存储在计算设备的日志数据库中,具体实施时,日志数据库可以是mysql数据库。

当利用执行实体将对应的待执行步骤执行完成时,该执行实体将生成指示该待执行步骤执行完成的第一状态信息,然后通过调用执行器对应的API接口对执行器进行主动通知,另外,该执行实体还会生成第二状态信息,第二状态信息也用于指示对应的待执行步骤已执行完成,将其存储在预设存储部件中,具体实施时,预设存储部件可以是计算设备本地磁盘文件,进一步的,执行器可以按照预设的扫描周期,利用扫描命令定期扫描本地磁盘文件,确定其中是否存在执行实体生成的第二状态信息,例如,该扫描命令可以是MonitorStage Execution Status Thread命令,在利用扫描命令扫描的同时,执行器还可以接收执行实体发送的第一状态信息,将获取的第一状态信息和/或第二状态信息作为其对应的待执行步骤的执行状态信息,具体实施时,获取的第一状态信息和/或第二状态信息可以包括以下两种情况:

第一种情况,只在本地磁盘中获取到第二状态信息,没有接受到执行实体发送过来的第一状态信息,在这种情况下,可能是因为执行实体在调用执行器对应的API接口对执行器进行主动通知的过程中出现了异常,导致执行器没有接受到主动通知的第一状态信息,但是,执行器仍可以根据获取第二状态信息确定出其对应的待执行步骤,然后将该第二状态信息作为对应的待执行步骤的执行状态信息,基于确定的待执行步骤的执行状态信息既可以确定出该待执行步骤的执行状态为完成状态,又可以确定是否继续执行下面的待执行步骤。

第二种情况,既在本地磁盘中获取到第二状态信息,也接受到执行实体发送过来的第一状态信息,在这种情况下,执行器可以根据获取的第一状态信息和/或第二状态信息确定出其对应的待执行步骤,然后将该第一状态信息和/或第二状态信息作为对应的待执行步骤的执行状态信息。需要说明的是,本公开实施例之所以利用上述两种方式来标识待执行步骤的执行状态,是因为如果只使用主动通知的方式,在调用执行器对应的API接口对执行器进行主动通知的过程中出现异常的情况下,将导致无法获取待执行步骤的执行状态信息,执行器可能会重新执行该待执行步骤,造成资源的浪费;如果只使用将生成第二状态信息存储在预设存储部件中的方式,执行器需要按照预设的扫描周期,利用扫描命令定期扫描预设存储部件,在一种实施方式中,可能会出现刚利用扫描命令扫描完预设存储部件时,执行实体将生成的第二状态信息存储在预设存储部件,此时,将存在一个预设的扫描周期的空白等待时间,降低了执行器的执行效率,综上,只有将两种方式结合起来使用,才可以最大程度的提高执行器的执行效率,减少资源的浪费,如图3所示,为本公开实施例所提供的一种执行器和执行实体之间的协作机制示意图。

另外,执行器基于获取的第一状态信息和/或第二状态信息,可以确定出其对应的每一个待执行步骤的执行状态信息,在基于执行状态信息确定出任务实例中每一个待执行步骤均执行完成的情况下,将可以该任务实例的状态更新为完成状态。

在一种实施方式中,如果执行器在执行任意一个待执行步骤的过程中出现了重新启动的情况,重启之后的执行器将通过扫描命令获取存储的第二状态信息,然后基于获取的第二状态信息以及在重启以后新接收到的第一状态信息确定对应的已执行完成的待执行步骤,根据已执行完成的待执行步骤和确定的任务实例中的所包括的待执行步骤,可以确定出未完成的目标执行步骤,进一步的,执行器基于未完成的目标执行步骤在任务实例中的执行顺序,重新执行每一个未完成的目标执行步骤,在确定目标执行步骤均执行完成的情况下,将任务实例的状态更新为完成状态。需要说明的是,上述实施方式也适用于执行器在执行待执行步骤的过程中,需要重新执行对应的任务实例的情况。

另外,针对执行器重新启动的这一情况,如果在执行器关闭之前,存在执行实体正在执行待执行步骤的情况时,执行器重新启动之后,基于确定的目标执行步骤,可以利用进程判断命令判断该目标执行步骤对应的执行实体是否存在,如果存在,则可以基于此执行实体当前的执行进度,继续执行该目标执行步骤;利用这种方式执行任务实例中包括的每一个待执行步骤时,针对执行器重启或者重新执行任务实例的情况,可以只执行未完成的目标执行步骤,执行成功的待执行步骤不需要重新执行,节省了集群资源,提高了恢复执行目标执行步骤的速度,提高了任务调度系统的运行的效率和开发效率;如果不存在,且没有获取到此目标执行步骤对应的第一状态信息和/第二状态信息,则说明此执行实体执行异常,已经退出执行器,则将此目标执行步骤更新为失败状态,在一种实施方式中,进程判断命令可以是“ps-ef|grep pid”命令。需要说明的是,上述实施方式也适用于执行器在执行待执行步骤的过程中,需要重新执行对应的任务实例的情况。

另外,上述步骤的执行过程还可以运行在利用每一执行实体执行对应的待执行步骤的过程中,例如,在执行器监控某一待执行步骤的执行状态时,发现该待执行步骤的状态一直没有改变,此时可能是在利用执行实体执行该待执行步骤的过程中出现了异常,则执行器可以基于此步骤,确定与其具有上游依赖关系的待执行步骤对应的执行实体的执行情况。

需要说明的是,如果任务实例中的某一待执行步骤执行失败,在未配置失败策略的情况下,与该待执行步骤具有上游依赖关系的其他待执行步骤将无法继续执行;在配置失败策略的情况下,基于该失败策略可以判断出与该待执行步骤具有上游依赖关系的其他待执行步骤是否可以继续执行,在一种实施方式中,如果执行器为该待执行步骤配置的失败策略为:在该待执行步骤执行失败的情况下,继续执行下游的其他待执行步骤,则基于此失败策略继续执行下游的其他待执行步骤;在另一种实施方式中,如果执行器为该待执行步骤配置的失败策略为:在该待执行步骤执行失败的情况下,重新执行该待执行步骤;需要说明的是,失败策略还可以根据用户的需要具体配置,关于失败策略的配置方式,本公开实施例不进行限定。

另外,在一种实施方式中,针对存储在计算设备的日志数据库中的日志信息,还需要利用监控器监控此日志信息,基于对此日志信息的监控记录可以确定对应的待执行任务的状态变化信息,以该日志数据库是mysql数据库为例,利用监控器监控mysql数据库中的用于记录所有数据库表结构变更以及数据库表数据修改的binlog(二进制日志),基于监控到的binlog信息的变化,可以判断出执行器正在执行的任务实例的状态,即可以确定对应的待执行任务的状态变化信息,具体实施时,在判断出执行器正在执行的任务实例为完成状态时,则监控器可以基于此任务实例生成通知信息并发送至消息队列中进行存储,需要说明的是,消息队列可以部署在微服务架构系统中的某一个微服务器所提供的服务上,也可以是部署在该执行器对应的服务器提供的服务上,另外,如果监控器基于对此日志信息的监控记录,确定对应的待执行任务执行失败,将会生成任务失败的报警信息以通知用户或者其他订阅该任务的对象。

以图2中涉及的执行器的整体框架为例,具体实施时,执行器中的Task runner在为任务实例配置完执行环境之后,将确定出的任务实例所包含的至少一个待执行步骤发送给Stage runner manager,Stage runner manager负责按照接收到的至少一个待执行步骤的执行顺序判断是否可以执行具有第一顺序的待执行步骤,如果是,则启动对应的Stagerunner,然后,Stage runner负责配置确定的待执行步骤的工作环境,进而可以根据任务实例对应的执行环境以及为待执行步骤配置的工作环境生成一个执行该待执行步骤的执行实体,利用生成的执行实体执行确定的待执行步骤并生成一个负责存储执行实体的执行队列,基于此,running stage manager(运行中的步骤管理器)可以通过监控至少一个待执行步骤对应的执行队列以获取每一个待执行步骤的执行状态信息。需要说明的是,执行器在预设的时长之后,将在执行任务实例的过程中产生的日志信息转存至hbase中,有效避免了日志信息丢失的问题。

如图4所示,为本公开实施例所提供的一种执行器的整体框架中各部分之间的交互示意图,可以包括以下步骤:

S401:task runner manager接收调度器发送的任务实例,启动task runner。

S402:task runner配置任务实例的执行环境,将任务实例中包括的待执行步骤发送给Stage runner manager。

S403:Stage runner manager在确定接收的待执行步骤可以执行的情况下,启动对应的Stage runner。

S404:Stage runner配置待执行步骤的工作环境,执行待执行步骤,并将用于执行待执行步骤的执行实体发送至执行队列。

S405:running stage manager扫描执行队列,获取待执行步骤的执行状态信息。

关于S401-S405的具体实施过程可以参见步骤S101-步骤S103的具体实施过程,本公开实施例不再赘述。

本公开实施例提供的任务执行方法,执行器基于接收到的任务实例,生成任务实例所包括的每个待执行步骤对应的执行实体,利用该执行实体执行每一待执行步骤,实现了在确定执行每一待执行步骤的时候才对其进行实例化,保证了实例化的及时性;另外,基于执行实体发送的第一状态信息和存储的第二状态信息确定对应的任务实例的执行状态信息,提高了确定的任务实例的执行状态信息的及时性和可靠性;还可以在执行器重新启动和/或任务实例重新执行的情况下,当确定仍然存在执行实体正在执行时,可以基于执行实体当前的执行进度继续执行未完成的目标执行步骤,保证执行器重新启动不会对已生成的执行实体和已执行完成的待执行步骤造成影响,节省了集群资源,提高了恢复执行目标执行步骤的速度,提高了任务调度系统的运行效率和开发效率。

实施例二

在实施上述实施例所涉及的任务执行方法之前,还需要一种对应的任务调度方法,通过任务调度方法将待执行任务对应的任务实例调度至执行器,执行器利用上述任务执行方法执行获取的任务实例,基于这两种方式,可以实现对一个工作流中所包括的每一待执行任务的调度以及执行。如图5所示,为本公开实施例所提供的一种任务调度方法的流程图,可以包括以下步骤:

S501:在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与待执行任务具有第一依赖关系的其他待执行任务。

具体实施时,调度器不断检测预先基于各个待执行任务的调度时间生成的时间调度队列,当检测到该时间调度队列中存在满足预设执行时间的待执行任务时,确定此待执行任务具有第一执行顺序,进一步的,确定出与该待执行任务具有第一依赖关系的其他待执行任务,其中,第一依赖关系是根据需要实现的预设功能提前规定好的,具有第一依赖关系的每一个待执行任务之间具有严格的执行顺序,每一个待执行任务相互协作并在其对应的执行结果没有出错的情况下,可以实现预设功能。

如图6所示,为本公开实施例所提供的一种调度器的整体框架的示意图,其中,调度器可以包括触发器、分发器和事件管理组件三部分,具体的,触发器可以包括图触发器和任务触发器两部分,分发器可以包括过滤器和选择器两部分,事件管理组件可以包括事件管理器和事件调度管理器两部分。具体实施时,图触发器负责检测时间调度队列,并在检测到存在满足预设执行时间的待执行任务时,确定出与该待执行任务具有第一依赖关系的其他待执行任务。

S502:基于具有第一执行顺序的待执行任务和其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例。

具体实施时,在图触发器确定出与该待执行任务具有第一依赖关系的其他待执行任务之后,可以基于具有第一执行顺序的待执行任务和其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例,其中,特征信息可以包括每一个待执行任务的基本信息和上下游信息,需要说明的是,生成的任务实例只记录每一个待执行任务的基本信息和上下游信息,不配置每一个待执行任务运行时所需要的执行环境和工作环境。

通过本公开实施例中的任务调度方法和上述公开实施例中的任务执行方法相结合的方式,实现了由实例图、待执行任务和待执行步骤组成的独特的三级任务概念,基于不同待执行任务之间的依赖关系生成第一实例图,但不配置任务实例执行环境和工作环境,当任务实例到达执行时间时,将其发送至执行器,配置其最新的执行环境和工作环境,保证了每一个任务实例对应的待执行任务可以在相互独立的情况下依赖执行,实现了不同任务之间的完全解耦,提高了不同任务实例之间的协作效率。

另外,图触发器在生成每个待执行任务的任务实例之后,还将生成一个用于存储每一个任务实例的任务实例队列。

S503:基于第一依赖关系和任务实例,生成第一实例图,并基于第一实例图向对应的执行器发送任务实例。

本步骤中,图触发器可以基于生成的每个待执行任务对应的任务实例和第一依赖关系生成第一实例图,其中,第一实例图是一个DAG图,只记录所包括的每一个任务实例和对应的依赖关系,且第一实例图中所包括的每一个任务实例都存储在任务实例队列中,另外,在生成第一实例图的同时,调度器将把第一实例图中所包括的每一个任务实例的状态更新为未执行状态,并对应的为第一实例图中的每一个任务实例设置标识其状态的目标颜色,例如,将灰色作为未执行状态对应的目标颜色。

进一步的,调度器中的任务触发器定期扫描任务实例队列,判断其中是否存在满足执行条件的任务实例,例如,执行条件可以包括执行时间和上游依赖条件,进一步的,当确定存在满足执行条件的任务实例时,获取用户配置的关于此任务实例的最新的任务环境,其中该任务环境可以包括执行环境和工作环境,例如,该任务环境可以包括最新的并发控制信息、失败策略、程序代码以及程序代码版本信息等。需要说明的是,如果图触发器生成的第一实例图是在其对应的预设功能的第一个执行周期,则在生成第一实例图的同时,任务触发器将检测到第一实例图中具有第一执行顺序的待执行任务对应的任务实例满足触发条件,基于此,可以获取具有第一执行顺序的待执行任务对应的任务实例的最新任务环境。

进一步的,任务触发器将满足执行条件的任务实例以及获取的最新的任务环境发送给分发器,分发器为该任务实例选择最优的执行器,并将其发送至最优的执行器以执行,具体实施时,分发器中的过滤器对部署的所有执行器,利用预设的筛选条件进行筛选,筛选出符合预设的筛选条件的一个或多个执行器,其中,预设的筛选条件可以包括以下几条:(1)用户指定的执行器组,需要说明的是,此条件的使用基础是用户为每一个待执行任务预先规定对应的执行器组;(2)执行器的cpu load(中央处理器负载率)不超过90%;(3)执行器对应的内存使用率不超过90%,(4)分到该执行器的任务数不超过预设阈值;在一种实施方式中,如果过滤器筛选出来一个执行器,则可以直接将此执行器作为最优的执行器,将任务实例发送至此执行器;在另一种实施方式中,如果筛选器筛选出来多个执行器,则利用分发器中的选择器按照预设的分值计算规则筛选出一个分值最高的执行器作为最优的执行器,并将任务实例发送至此执行器,例如,预设的分值计算规则可以为cpu load分值*权值+内存分值*权值+分到该执行器的任务优先级之和*权值,其中,权值可以是用户根据每一个任务实例对应的待执行任务预先定义的,cpuload分值可以根据cpu load的具体数值确定,内存分值可以根据内存使用率确定,分到执行器的任务优先级之和可以根据已分配至执行器的任务实例对应的任务优先级的数值与待分配至执行器的任务实例对应的任务优先级的数值之和来确定,每一个任务实例对应的任务优先级的数值可以是用户根据其对应的待执行任务的重要性预先设置的,也可以是调度器根据其对应的待执行任务的重要性生成的,关于任务优先级的数值的确定方法,本公开实施例不进行限定,基于此,筛选器可以确定出一个分值最高的执行器,将任务实例发送给此执行器。

以图触发器生成的第一实例图是在其对应的预设功能的第一个执行周期为例,则任务触发器将具有第一执行顺序的待执行任务对应的任务实例及其对应的任务环境发送给最优的执行器,另外,在将任务实例发送给最优的执行器之后,调度器将该任务实例的状态更新为正在执行状态,并改变其在第一实例图中的目标颜色,例如,可以将其对应的目标颜色置为蓝色。

进一步的,调度器中的事件调度管理器可以通过监听用于存储通知信息的消息队列确定发送给执行器的具有第一执行顺序的待执行任务对应的任务实例的执行状态信息,在确定此任务实例已经执行完成时,通知任务触发器,任务触发器基于生成的第一实例图、任务实例队列以及第一依赖关系确定具有第二执行顺序的待执行任务及其对应的任务实例,判断具有第二执行顺序的任务实例是否满足执行条件,例如,执行条件可以是依赖触发,即具有第二执行顺序的待执行任务是在其上游依赖任务执行完成时触发执行的,进一步的,调度器可以将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器进行执行,基于此,可以实现将生成的第一实例图中所包括的每一个任务实例均执行完成,即完成第一实例图;另外,事件调度管理器在确定发送给执行器的具有第一执行顺序的待执行任务对应的任务实例已经执行完成时,调度器可以将其对应的状态更新为完成状态,并将更新其在第一实例图中的目标颜色,例如,可以将绿色作为任务实例执行完成的目标颜色。

具体实施时,在将具有第二执行顺序的待执行任务及其对应的任务实例发送给对应的执行器执行之前,还需要确定其上游依赖任务的执行结果信息,例如,执行结果信息可以为已执行完成的任务实例对应的任务数据信息等,然后调度器将具有第二执行顺序的待执行任务对应的任务实例及其上游依赖任务的执行结果信息一起发送给执行器,执行器根据该执行结果信息执行接收到的具有第二执行顺序的待执行任务对应的任务实例。在一个工作流中,具有依赖关系的任务对应的执行结果信息可能也具有一定的依赖关系,下一个任务实例的执行如果不依赖上游任务实例的执行结果,可能造成下一个任务实例的执行结果出错,因此需要将上一个任务实例的执行结果信息与待发送的任务实例一起发送给执行器,以保证每一个任务实例的执行结果的正确性。另外,调度器中的事件管理器用于管理调度器中与调度的待执行任务相关的各种事件,例如,可以管理第一实例图中的任务实例的状态变化信息。

需要说明的是,本公开实施例还使用了zookeeper(分布式应用程序协调服务)保证调度器HA(High Availability,高可用性),具体实施时,在使用调度器利用上述任务调度方法对生成的实体图中的任务进行调度时,由于调度器的异常或外界环境因素的影响,发生了调度器的宕机,基于zookeeper可以实现由另外的备用调度器接管宕机的调度器正在执行的任务,保证了调度器的可靠性和效率。

如图7所示,为本公开实施例所提供的一种调度器的整体框架中各部分之间的交互示意图,可以包括以下步骤:

S701:图触发器检测时间调度队列,在确定存在满足预设执行时间的待执行任务时,基于此待执行任务生成实例图。

本步骤中,生成的实例图包括若干个待执行任务对应的任务实例,并生成一个用于存储任务实例的任务实例队列。

S702:任务触发器检测任务实例队列,当确定存在满足执行条件的任务实例时,将该任务实例发送至过滤器。

S703:过滤器筛选出符合预设的筛选条件的多个执行器。

S704:选择器按照预设的分值计算规则筛选出一个分值最高的执行器作为最优的执行器。

具体实施时,选择器在选择出最优的执行器之后,将对应的任务实例发送给此执行器。

S705:事件调度管理器通过监听消息队列确定任务实例已经执行完成时,通知任务触发器判断任务实例队列中的下游任务实例是否可以执行。

需要说明的是,步骤S705的执行顺序不是固定的,可以贯穿在调度器的整体框架中其余各部分之间相互交互的整个过程中。

关于步骤S701-步骤S705的具体实施过程可以参见步骤S501-步骤S503的具体实施过程,本公开实施例不再赘述。

本公开实施例提供的任务调度方法,将生成的包括具有依赖关系的若干个任务实例的第一实例图中的任务实例依照其执行顺序发送给执行器,采用了独特的三级任务概念,实现了不同任务之间的完全解耦,提高了不同任务实例之间的协作效率,保证了每一任务实例可以按照依赖关系顺序执行;通过与实施例一中的任务调度方法相结合,实现了在调度和执行第一实例图中每一任务实例的过程中,利用动静结合的方式调度和执行每一任务实例,提高了调度和执行每一任务实例的灵活性,提高了任务调度系统的运行结果的可靠性;另外,在第一实例图中的每一任务实例均执行完成时,如果此时存在用户更新的任务之间的第二依赖关系,则在具有第一执行顺序的待执行任务到达下一次执行的目标执行时间时,基于第二依赖关系生成第二实例图,既保证了已生成的第一实例图的执行结果的可靠性,还保证了生成第二实例图的及时性,提升了调度任务的灵活性。

本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

基于同一发明构思,本公开实施例中还提供了与任务执行方法对应的任务执行装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述任务执行方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

如图8所示,为本公开实施例提供的一种任务执行装置的示意图,包括:

获取模块801,用于获取调度器发送的预设功能对应的任务实例,配置所述任务实例的执行环境;其中,所述任务实例存在于第一实例图中,所述第一实例图由所述调度器根据所述预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例;

第一确定模块802,用于基于所述任务实例,确定所述任务实例对应的待执行任务所包括的至少一个待执行步骤;

执行模块803,用于基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用所述执行实体执行对应的待执行步骤。

在一种可能的实施方式中,所述执行模块803,具体用于配置所述至少一个待执行步骤中每个待执行步骤的工作环境,并基于所述任务实例和所述每个待执行步骤的工作环境,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体。

在一种可能的实施方式中,所述执行模块803,还用于获取所述任务实例对应的每个待执行步骤的执行状态信息;在基于所述执行状态信息,确定所述任务实例对应的每个待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,所述执行模块803,用于接收所述执行实体在所述待执行步骤执行完成的情况下,发送的指示所述待执行步骤执行完成的第一状态信息;和/或从预设存储部件中获取所述待执行步骤的第二状态信息;其中,执行实体在所述待执行步骤执行完成的情况下,将指示所述待执行步骤执行完成的第二状态信息存入所述预设存储部件;将获取的所述第一状态信息和/或所述第二状态信息作为所述待执行步骤对应的执行状态信息。

在一种可能的实施方式中,所述执行模块803,还用于在执行器重新启动和/或所述任务实例重新执行的情况下,从所述预设存储部件中获取所述任务实例对应的第一状态信息和/或第二状态信息;基于所述第一状态信息和/或第二状态信息,确定所述任务实例中未执行完成的目标执行步骤;在确定所述目标执行步骤的执行实体正在执行所述目标执行步骤的情况下,基于所述执行实体当前的执行进度,利用所述执行实体继续执行所述目标执行步骤。

在一种可能的实施方式中,所述执行模块803,还用于在更新所述任务实例的状态之前,在所述任务实例对应的所有待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

基于同一发明构思,本公开实施例中还提供了与任务调度方法对应的任务调度装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述任务调度方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

如图9所示,为本公开实施例提供的一种任务调度装置的示意图,包括:

第二确定模块901,用于在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与所述待执行任务具有第一依赖关系的其他待执行任务;

生成模块902,用于基于所述具有第一执行顺序的待执行任务和所述其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例;以及基于所述第一依赖关系和所述任务实例,生成第一实例图;

发送模块903,用于基于第一实例图向对应的执行器发送任务实例

在一种可能的实施方式中,所述发送模块903,用于将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于所述第一依赖关系和所述第一实例图,确定具有第二执行顺序的待执行任务;将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述发送模块903,用于获取具有第一执行顺序的待执行任务对应的任务实例的执行结果信息;将所述执行结果信息和所述具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,所述第二确定模块901,用于获取所述预设功能的执行周期,并基于所述执行周期和所述预设执行时间,确定所述具有第一执行顺序的待执行任务下一次执行的目标执行时间;在到达所述目标执行时间的情况下,确定所述具有第一执行顺序的待执行任务与所述预设功能对应的其他待执行任务之间的第二依赖关系;

所述生成模块902,用于在所述第一依赖关系与所述第二依赖关系不相同的情况下,基于所述第二依赖关系生成第二实例图。

关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。

基于同一发明构思,本公开实施例中还提供了与任务执行及调度方法对应的任务调度系统,由于本公开实施例中的系统解决问题的原理与本公开实施例上述任务执行及调度方法相似,因此系统的实施可以参见方法的实施,重复之处不再赘述。

如图10所示,为本公开实施例提供的一种任务调度系统的示意图,包括调度器1010和执行器1011,其中:

调度器1010配置为,在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与待执行任务具有第一依赖关系的其他待执行任务;基于具有第一执行顺序的待执行任务和其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例;基于第一依赖关系和任务实例,生成第一实例图,并基于第一实例图向对应的执行器发送任务实例。

具体实施时,调度器1010不断检测预先基于各个待执行任务的调度时间生成的时间调度队列,当检测到该时间调度队列中存在满足预设执行时间的待执行任务时,确定此待执行任务具有第一执行顺序,进一步的,确定出与该待执行任务具有第一依赖关系的其他待执行任务,其中,第一依赖关系是根据需要实现的预设功能提前规定好的,具有第一依赖关系的每一个待执行任务之间具有严格的执行顺序,每一个待执行任务相互协作并在其对应的执行结果没有出错的情况下,可以实现预设功能。

进一步的,在调度器1010确定出与该待执行任务具有第一依赖关系的其他待执行任务之后,可以基于具有第一执行顺序的待执行任务和其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例,其中,特征信息可以包括每一个待执行任务的基本信息(例如,待执行任务名称和待执行任务时间等)和上下游信息(例如,待执行任务的上游依赖任务和下游触发任务),需要说明的是,生成的任务实例只记录每一个待执行任务的基本信息和上下游信息,不配置每一个待执行任务运行时所需要的执行环境和工作环境。

另外,调度器1010在生成每个待执行任务的任务实例之后,还将生成一个用于存储每一个任务实例的任务实例队列。调度器1010通过检测该任务实例队列,判断其中的每一个任务实例是否满足执行条件,在确定其中的某个任务实例满足执行条件,获取其对应的最新的任务环境,将满足执行条件的任务实例及其最新的任务环境发送给执行器1011执行。

执行器1011配置为,获取调度器发送的预设功能对应的任务实例,配置任务实例的执行环境;其中,任务实例存在于第一实例图中,第一实例图由调度器根据预设功能对应的至少一个待执行任务生成的,每个待执行任务分别对应一个任务实例;进一步的,执行器1011可以基于任务实例,确定任务实例对应的待执行任务所包括的至少一个待执行步骤。

进一步的,执行器1011根据获取的任务实例,生成其中包括的至少一个待执行步骤中每个待执行步骤对应的执行实体,然后利用生成的执行实体执行对应的待执行步骤。具体实施时,执行器为确定的每一个待执行步骤配置具体的工作环境,然后根据任务实例的执行环境和待执行步骤的工作环境生成待执步骤的执行实体。在利用每一个执行实体将对应的待执行步骤执行成功之后,执行实体将通过调用执行器1011对应的API接口发送一个指示待执行步骤执行完成的第一状态信息,执行器通过接收的第一状态信息以及获取的执行实体生成的存储在预设存储部件中的第二状态信息,可以判断出每一个待执行步骤的状态,当确定所获取的每一个任务实例对应的每一个待执行步骤都执行完成时,将任务实例的状态更新为完成状态。

另外,在执行器1011重启的情况下,可以通过从预设存储部件中获取正在执行的任务实例中的待执行步骤对应的第一状态信息和/或第二状态信息,以及重启之后接收的第一状态信息,确定出未完成的目标执行步骤,以及,针对执行器1011重启时正在执行的目标执行步骤,可以在确定目标执行步骤的执行实体正在执行该目标执行步骤的情况下,利用执行实体基于其当前的执行进度,继续执行该目标执行步骤。需要说明的是,上述实施方式也适用于执行器1011在执行待执行步骤的过程中,需要重新执行对应的任务实例的情况。

另外,上述步骤的执行过程还可以运行在利用每一执行实体执行对应的待执行步骤的过程中,例如,在执行器监控某一待执行步骤的执行状态时,发现该待执行步骤的状态一直没有改变,此时可能是在利用执行实体执行该待执行步骤的过程中出现了异常,则执行器可以基于此步骤,确定与其具有上游依赖关系的待执行步骤对应的执行实体的执行情况。

需要说明的是,执行器在获取调度器发送的任务实例之后,针对执行器对该任务实例执行的每一个操作对应的操作信息,都将生成对应的日志信息存储在计算设备的日志数据库中,例如,日志数据库可以是MySQL数据库,具体实施时,该任务调度系统中可以包括监控器1012和消息队列1013,其中,消息队列1013可以部署在微服务架构系统中的某一个微服务器所提供的服务上,也可以是部署在该执行器对应的服务器提供的服务上,下面以消息队列1013部署在微服务架构系统中的某一个微服务器所提供的服务上为例,该任务调度系统通过利用监控器1012监控执行器1011在执行任务实例过程中产生的日志信息,可以确定执行器101正在执行的任务实例对应的待执行任务的状态变化信息,如果监控器1012根据监控的日志信息确定其对应的任务实例已经执行完成,则可以根据该任务实例生成通知信息并发送至消息队列1013中进行存储,如果监控器1012根据监控的日志信息确定其对应的任务实例执行失败,则生成任务失败的报警信息以通知用户或者其他订阅该任务的对象。需要说明的是,执行器1011在预设的时长之后,将在执行任务实例的过程中产生的日志信息转存至hbase中,有效避免了日志信息丢失。

在一种可能的实施方式中,调度器1010配置为,将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于第一依赖关系和第一实例图,确定具有第二执行顺序的待执行任务;将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器1011。

具体实施时,调度器1010通过监听消息队列1013中存储的通知信息,确定发送给执行器1011的具有第一执行顺序的待执行任务对应的任务实例是否完成,如果是,则获取该任务实例的执行结果信息,并判断生成的第一实例图中,具有第二执行顺序的待执行任务对应的任务实例是否满足执行条件,即判断任务实例队列中的下一顺序的任务实例是否满足执行条件,如果是,则将具有第一执行顺序的待执行任务对应的任务实例的执行结果信息以及具有第二执行顺序的待执行任务对应的任务实例发送给执行器1011,需要说明的是,本公开实施例中的执行器1011可以包括很多个,其中,每一个执行器1011可以对应执行不同的任务实例,也可以根据不同执行器1011的具体使用情况,确定由哪一个执行器1011接受新的任务实例,所以,本本公开实施例可以由很多个执行器1011组成一个执行器组。

另外,当调度器1010通过监听消息队列1013中存储的通知信息确定生成的第一实例图中包括的任务实例均执行完成之后,获取第一实例图对应的执行周期,根据此执行周期和第一实例图中对应的具有第一执行顺序的待执行任务对应的任务实例的执行时间,其中,该执行时间就是预设执行时间,确定具有第一执行顺序的待执行任务下一次执行的目标执行时间,当到达目标执行时间的情况下,确定具有第一执行顺序的待执行任务与预设功能对应的其他待执行任务之间是否存在与第一依赖关系不相同的第二依赖关系,如果是,则根据第二依赖关系生成第二实例图,根据第二实例图执行其中的待执行任务,如果否,则根据第一实例图执行其中的待执行任务。

需要说明的是,本公开实施例还使用了zookeeper保证调度器HA,具体实施时,在使用调度器利用上述任务调度方法对生成的实体图中的任务进行调度时,由于调度器的异常或外界环境因素的影响,发生了调度器的宕机,基于zookeeper可以实现由另外的备用调度器1010接管宕机的调度器正在执行的任务,保证了调度器的可靠性和效率。

如图11所示,为本公开实施例提供的一种任务调度系统中各部分的交互示意图,可以包括以下步骤:

S111:调度器当检测到时间调度队列中存在满足预设执行时间的待执行任务时,基于待执行任务生成第一实例图以及对应的任务实例队列。

S112:将任务实例队列中满足执行条件的任务实例发送至执行器。

S113:执行器配置接收到的任务实例的执行环境以及其中包括的每一个待执行步骤的工作环境。

S114:执行接收到的任务实例,并监控其执行状态。

S115:监控器通过监控日志数据库获取任务实例的执行状态信息。

S116:在基于执行状态信息确定第一实例图中的任务实例执行完成的情况下,根据执行完成的任务实例向消息队列发送通知消息。

S117:消息队列存储接收到的通知消息。

S118:调度器监听消息队列,获取通知消息。

S119:通过获取的通知消息确定对应的任务实例执行完成,判断任务实例队列中的下一顺序的任务实例是否满足执行条件。

如果是,执行步骤S1110,如果否,继续执行步骤S119。

S1110:将满足执行条件的下一顺序的任务实例发送至执行器。

关于步骤S111-步骤S1110的具体执行过程,可以参见上述任务调度系统的执行步骤,本公开实施例不再赘述。

关于系统中的各部件的处理流程、以及各部件之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。

本公开实施例还提供了一种计算设备,如图12所示,为本公开实施例提供的计算设备结构示意图,包括:

处理器121和存储器122;所述存储器122存储有处理器121可执行的机器可读指令,处理器121用于执行存储器122中存储的机器可读指令,所述机器可读指令被处理器121执行时,处理器121执行下述步骤:步骤S101:获取调度器发送的预设功能对应的任务实例,配置任务实例的执行环境;步骤S102:基于任务实例,确定任务实例对应的待执行任务所包括的至少一个待执行步骤以及步骤S103:基于任务实例,生成至少一个待执行步骤中每个待执行步骤对应的执行实体,以利用执行实体执行对应的待执行步骤。

上述存储器122包括内存1221和外部存储器1222;这里的内存1221也称内存储器,用于暂时存放处理器121中的运算数据,以及与硬盘等外部存储器1222交换的数据,处理器121通过内存1221与外部存储器1222进行数据交换。

在一种可能的实施方式中,处理器121执行的指令中,所述基于所述任务实例,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体,包括:

配置所述至少一个待执行步骤中每个待执行步骤的工作环境,并基于所述任务实例和所述每个待执行步骤的工作环境,生成所述至少一个待执行步骤中每个待执行步骤对应的执行实体。

在一种可能的实施方式中,处理器121执行的指令中,执行所述待执行步骤,还包括:

获取所述任务实例对应的每个待执行步骤的执行状态信息;

在基于所述执行状态信息,确定所述任务实例对应的每个待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

在一种可能的实施方式中,处理器121执行的指令中,所述获取所述任务实例对应的每个待执行步骤的执行状态信息,包括:

接收所述执行实体在所述待执行步骤执行完成的情况下,发送的指示所述待执行步骤执行完成的第一状态信息;和/或

从预设存储部件中获取所述待执行步骤的第二状态信息;其中,执行实体在所述待执行步骤执行完成的情况下,将指示所述待执行步骤执行完成的第二状态信息存入所述预设存储部件;

将获取的所述第一状态信息和/或所述第二状态信息作为所述待执行步骤对应的执行状态信息。

在一种可能的实施方式中,处理器121执行的指令中,还包括:

在执行器重新启动和/或所述任务实例重新执行的情况下,从所述预设存储部件中获取所述任务实例对应的第一状态信息和/或第二状态信息;

基于所述第一状态信息和/或第二状态信息,确定所述任务实例中未执行完成的目标执行步骤;

在确定所述目标执行步骤的执行实体正在执行所述目标执行步骤的情况下,基于所述执行实体当前的执行进度,利用所述执行实体继续执行所述目标执行步骤。

在一种可能的实施方式中,处理器121执行的指令中,在更新所述任务实例的状态之前,还包括:

在所述任务实例对应的所有待执行步骤均执行完成的情况下,将所述任务实例的状态更新为完成状态。

或者,处理器121和存储器122;所述存储器122存储有处理器121可执行的机器可读指令,处理器121用于执行存储器122中存储的机器可读指令,所述机器可读指令被处理器121执行时,处理器121执行下述步骤:步骤S501:在到达预设功能对应的具有第一执行顺序的待执行任务的预设执行时间的情况下,确定与待执行任务具有第一依赖关系的其他待执行任务;步骤S502:基于具有第一执行顺序的待执行任务和其他待执行任务中每一待执行任务的特征信息生成每个待执行任务的任务实例以及步骤S503:基于第一依赖关系和任务实例,生成第一实例图,并基于第一实例图向对应的执行器发送任务实例。

上述存储器122包括内存1221和外部存储器1222;这里的内存1221也称内存储器,用于暂时存放处理器121中的运算数据,以及与硬盘等外部存储器1222交换的数据,处理器121通过内存1221与外部存储器1222进行数据交换。

在一种可能的实施方式中,处理器121执行的指令中,所述基于第一实例图向对应的执行器发送任务实例,包括:

将具有第一执行顺序的待执行任务对应的任务实例发送给对应的执行器;

在具有第一执行顺序的待执行任务对应的任务实例执行完成之后,基于所述第一依赖关系和所述第一实例图,确定具有第二执行顺序的待执行任务;

将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,处理器121执行的指令中,所述将具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器,包括:

获取具有第一执行顺序的待执行任务对应的任务实例的执行结果信息;

将所述执行结果信息和所述具有第二执行顺序的待执行任务对应的任务实例发送给对应的执行器。

在一种可能的实施方式中,处理器121执行的指令中,还包括:

获取所述预设功能的执行周期,并基于所述执行周期和所述预设执行时间,确定所述具有第一执行顺序的待执行任务下一次执行的目标执行时间;

在到达所述目标执行时间的情况下,确定所述具有第一执行顺序的待执行任务与所述预设功能对应的其他待执行任务之间的第二依赖关系;

在所述第一依赖关系与所述第二依赖关系不相同的情况下,基于所述第二依赖关系生成第二实例图。

上述指令的具体执行过程可以参考本公开实施例中所述的任务执行及调度方法的步骤,此处不再赘述。

本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的任务执行及调度方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。

本公开实施例所提供的任务执行及调度方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的任务执行及调度方法的步骤,具体可参见上述方法实施例,在此不再赘述。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

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

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

相关技术
  • 一种任务执行及调度方法、系统、装置、计算设备及介质
  • 一种调度Zeppelin任务的方法、系统、计算设备及存储介质
技术分类

06120112624216