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

一种任务调度方法、装置和系统

文献发布时间:2023-06-19 11:32:36


一种任务调度方法、装置和系统

技术领域

本申请涉及分布式任务处理技术领域,特别是涉及一种任务调度方法、装置和系统。

背景技术

随着业务需求的增长,分布式处理系统被广泛应用。分布式处理系统需要处理大量的任务,如何实现对任务的有序调度是当前分布式处理系统的重要工作。现有的调度方法,在面对大量并发任务调度时存在性能问题,会导致三个不好的结果,一个是会导致任务挤压,大量任务挤压会导致调度系统崩溃;第二个是会导致大量任务不能按时运行,也是就是说会有大量的任务运行延时,比如应该在一点钟运行的,结果到两点钟才运行。导致这些结果的原因就是分布式并发调度性能不够好。原有分布式任务处理的扩展能力有限,受限于调度性能,无法通过横向扩展更多节点来增加系统调度能力,因为扩展节点会导致系统协调服务存储压力上升,导致系统整体不稳定。

可见,如何在相同配置下提高任务高并发调度性能,是本领域技术人员需要解决的问题。

发明内容

本申请实施例的目的是提供一种任务调度方法、装置和系统,可以在相同配置下提高任务高并发调度性能。

为解决上述技术问题,本申请实施例提供一种任务调度方法,适用于调度节点,所述方法包括:

将满足待处理需求的任务实例缓存至redis内存数据库;

基于任务依赖信息确定出各所述任务实例的依赖信息和被依赖信息;并将各所述任务实例的依赖信息和被依赖信息缓存至所述redis内存数据库;其中,所述依赖信息包括任务实例所依赖的其它任务实例的标识信息;所述被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息;

判断目标任务实例所依赖的任务实例是否执行完毕;其中,所述目标任务实例为所有所述任务实例中的任意一个任务实例;

若目标任务实例所依赖的任务实例执行完毕,则将所述redis内存数据库中缓存的所述目标任务实例迁移至其对应任务类型的任务队列中,以便于与所述任务类型相对应的工作节点从所述任务队列中读取所述目标任务实例,在完成所述目标任务实例后,依据所述目标任务实例的目标被依赖信息确定出相匹配的目标被依赖任务实例,并对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记。

可选地,所述将满足待处理需求的任务实例缓存至redis内存数据库包括:

定时扫描任务实例列表中的数据;

从所述任务实例列表中拉取满足待处理需求的任务实例;并将所述任务实例缓存至redis内存数据库。

可选地,所述从所述任务实例列表中拉取满足待处理需求的任务实例包括:

从所述任务实例列表中拉取任务执行时间与当前时间的差值小于预设时间限值的任务实例。

可选地,所述工作节点对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记包括:

所述工作节点对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行删除;

相应地,所述判断目标任务实例所依赖的任务实例是否执行完毕;其中,所述目标任务实例为所有所述任务实例中的任意一个任务实例;包括:

判断是否存在依赖信息为空的目标任务实例。

可选地,所述将各所述任务实例的依赖信息和被依赖信息缓存至所述redis内存数据库包括:

将各所述任务实例的依赖信息和被依赖信息以集合的数据结构形式缓存至所述redis内存数据库。

本申请实施例还提供了一种任务调度装置,适用于调度节点,所述装置包括实例缓存单元、确定单元、信息缓存单元、判断单元和迁移单元;

所述实例缓存单元,用于将满足待处理需求的任务实例缓存至redis内存数据库;

所述确定单元,用于基于任务依赖信息确定出各所述任务实例的依赖信息和被依赖信息;

所述信息缓存单元,用于将各所述任务实例的依赖信息和被依赖信息缓存至所述redis内存数据库;其中,所述依赖信息包括任务实例所依赖的其它任务实例的标识信息;所述被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息;

所述判断单元,用于判断目标任务实例所依赖的任务实例是否执行完毕;其中,所述目标任务实例为所有所述任务实例中的任意一个任务实例;

所述迁移单元,用于若目标任务实例所依赖的任务实例执行完毕,则将所述redis内存数据库中缓存的所述目标任务实例迁移至其对应任务类型的任务队列中,以便于与所述任务类型相对应的工作节点从所述任务队列中读取所述目标任务实例,在完成所述目标任务实例后,依据所述目标任务实例的目标被依赖信息确定出相匹配的目标被依赖任务实例,并对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记。

可选地,所述实例缓存单元包括扫描子单元和拉取子单元;

所述扫描子单元,用于定时扫描任务实例列表中的数据;

所述拉取子单元,用于从所述任务实例列表中拉取满足待处理需求的任务实例;并将所述任务实例缓存至redis内存数据库。

可选地,所述拉取子单元用于从所述任务实例列表中拉取任务执行时间与当前时间的差值小于预设时间限值的任务实例。

可选地,所述判断单元用于判断是否存在依赖信息为空的目标任务实例。

可选地,所述信息缓存单元用于将各所述任务实例的依赖信息和被依赖信息以集合的数据结构形式缓存至所述redis内存数据库。

本申请实施例还提供了一种任务调度方法,适用于工作节点,所述方法包括:

从与自身任务类型相匹配的任务队列中读取目标任务实例;

在完成所述目标任务实例后,从redis内存数据库中读取所述目标任务实例的目标被依赖信息;

依据所述目标被依赖信息确定出相匹配的目标被依赖任务实例,并对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记。

可选地,所述对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记包括:

对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行删除。

可选地,在所述从与自身任务类型相匹配的任务队列中读取目标任务实例之后还包括:

监控所述目标任务实例的运行状态;

若所述目标任务实例运行成功,则执行所述从redis内存数据库中读取所述目标任务实例的目标被依赖信息的步骤;

若所述目标任务实例运行失败,则判断所述目标任务实例的运行次数是否小于设定的最大重试次数;

若所述目标任务实例的运行次数小于设定的最大重试次数,则将所述目标任务实例重新写入与自身任务类型相匹配的任务队列中,以便于满足执行条件时再次执行所述目标任务实例;每执行一次所述目标任务实例则将运行次数加一;

若所述目标任务实例的运行次数不小于设定的最大重试次数,则输出所述目标任务实例运行失败的结果。

本申请实施例还提供了一种任务调度装置,适用于工作节点,所述装置包括任务读取单元、信息读取单元、确定单元和标记单元;

所述任务读取单元,用于从与自身任务类型相匹配的任务队列中读取目标任务实例;

所述信息读取单元,用于在完成所述目标任务实例后,从redis内存数据库中读取所述目标任务实例的目标被依赖信息;

所述确定单元,用于依据所述目标被依赖信息确定出相匹配的目标被依赖任务实例;

所述标记单元,用于对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记。

可选地,所述对所述标记单元用于对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行删除。

可选地,还包括监控单元、次数判断单元、写入单元和输出单元;

所述监控单元,用于监控所述目标任务实例的运行状态;若所述目标任务实例运行成功,则触发所述信息读取单元;

所述次数判断单元,用于若所述目标任务实例运行失败,则判断所述目标任务实例的运行次数是否小于设定的最大重试次数;

所述写入单元,用于若所述目标任务实例的运行次数小于设定的最大重试次数,则将所述目标任务实例重新写入与自身任务类型相匹配的任务队列中,以便于满足执行条件时再次执行所述目标任务实例;每执行一次所述目标任务实例则将运行次数加一;

所述输出单元,用于若所述目标任务实例的运行次数不小于设定的最大重试次数,则输出所述目标任务实例运行失败的结果。

本申请实施例还提供了一种任务调度系统,包括调度节点和工作节点;

所述调度节点,用于将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各所述任务实例的依赖信息和被依赖信息;并将各所述任务实例的依赖信息和被依赖信息缓存至所述redis内存数据库;其中,所述依赖信息包括任务实例所依赖的其它任务实例的标识信息;所述被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息;判断目标任务实例所依赖的任务实例是否执行完毕;其中,所述目标任务实例为所有所述任务实例中的任意一个任务实例;若目标任务实例所依赖的任务实例执行完毕,则将所述redis内存数据库中缓存的所述目标任务实例迁移至其对应任务类型的任务队列中;

所述工作节点,用于从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成所述目标任务实例后,从redis内存数据库中读取所述目标任务实例的目标被依赖信息;依据所述目标被依赖信息确定出相匹配的目标被依赖任务实例,并对所述目标被依赖任务实例的目标依赖信息中记录的所述目标任务实例的标识信息进行标记。

由上述技术方案可以看出,调度节点将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。redis内存数据库具有高性能存储,通过将任务实例以及相关的依赖信息和被依赖信息缓存至redis内存数据库,使得系统具备了非常好的横向扩展能力和分布式任务调度能力。判断目标任务实例所依赖的任务实例是否执行完毕;其中,目标任务实例为所有任务实例中的任意一个任务实例。若目标任务实例所依赖的任务实例执行完毕,则说明此时可以执行目标任务实例,可以将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中。相应的,工作节点可以从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息可以确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。通过将任务实例放到与其任务类型对应的队列中,可以由各工作节点主动查询其所需执行的任务实例,降低了调度节点的工作量。根据各任务实例的执行情况,可以动态标记各任务实例对应的依赖信息,从而便于工作节点获取各任务实例执行情况,从而有序的执行各任务实例,有效的解决了原有的任务依赖分析严重依赖系统缓存以及被动维护任务依赖关系导致的协调服务压力过大的问题。

附图说明

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

图1为本申请实施例提供的一种任务调度方法的信令图;

图2为本申请实施例提供的一种适用于调度节点的任务调度装置的结构示意图;

图3为本申请实施例提供的一种适用于工作节点的任务调度装置的结构示意图;

图4为本申请实施例提供的一种任务调度系统的结构示意图。

具体实施方式

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

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。

接下来,详细介绍本申请实施例所提供的一种任务调度方法。图1为本申请实施例提供的一种任务调度方法的信令图,该方法包括:

S101:调度节点将满足待处理需求的任务实例缓存至redis内存数据库。

在本申请实施例中,为了提升任务实例及其相关依赖信息和被依赖信息的存取效率,采用redis内存数据库对所需处理的任务实例及其相关依赖信息和被依赖信息进行缓存。

与基于外部存储的存取效率相比,基于内存的存取效率要高得多,因此在本申请实施例中基于redis内存数据库的原子操作实现存取,可以有效的解决数据存取效率偏低的问题。

在本申请实施例中,根据分布式处理系统中不同节点所需实现的功能不同,可以将节点划分为调度节点和工作节点。其中,调度节点可以实现对任务实例的调度和分配,工作节点用于执行相应的任务实例。

在实际应用中,调度节点可以定时扫描任务实例列表中的数据;从任务实例列表中拉取满足待处理需求的任务实例;并将任务实例缓存至redis内存数据库。

每个任务实例有其对应的执行时间,因此,在本申请实施例中,可以依据任务实例的执行时间判定任务实例是否满足待处理需求。在具体实现中,可以从任务实例列表中拉取任务执行时间与当前时间的差值小于预设时间限值的任务实例。

预设时间限值的取值可以依据实际需求设置,例如,可以将预设时间限值设置为10分钟。定时扫描的时间间隔可以设置为与预设时间限值相同。相应的,调度节点可以每隔10分钟从任务实例列表中拉取任务执行时间与当前时间小于10分钟的所有任务实例。

S102:调度节点基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库。

任务可以理解成是配置信息,任务实例是任务的具体时间具体运行的实例化。任务之间具有依赖信息,可以将任务之间的依赖信息简称为任务依赖信息。根据实际的任务需求,可以预先获知任务依赖信息。每个任务有其对应的任务实例,基于任务依赖信息便可以确定出各任务实例的依赖信息和被依赖信息。

其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。

假设,任务a的执行依赖于任务b,也即需要执行完成任务实例b之后才可以执行任务实例a。任务c的执行依赖于任务a,也即需要执行完成任务实例a之后才可以执行任务实例c,相应的,任务实例a对应的依赖信息为任务实例b,任务实例a对应的被依赖信息为任务实例c;任务实例b对应的被依赖信息为任务实例a;任务实例c对应的依赖信息为任务实例a。

在本申请实施例中,为了降低存储的数据量,并且便于调度节点清楚的区分不同的任务实例,可以针对于每个任务实例设置唯一的标识信息。对于标识信息的具体形式不做限定,例如,可以采用数字组合的形式。

每个任务实例对应的依赖信息或者被依赖信息中包含的任务实例的标识信息的个数可能有多个,为了便于信息的管理查询,在实际应用中,可以将各任务实例的依赖信息和被依赖信息以集合的数据结构形式缓存至redis内存数据库。

例如,可以将每个任务实例的依赖信息中包含的所有任务实例的标识信息作为一个集合,将每个任务实例的被依赖信息中包含的所有任务实例的标识信息作为另一个集合,可以将每个集合中包含的所有任务实例的标识信息以数据列表的形式存储。

S103:调度节点判断目标任务实例所依赖的任务实例是否执行完毕。

其中,目标任务实例可以为所有任务实例中的任意一个任务实例。

若目标任务实例所依赖的任务实例执行完毕,则说明此时需要执行目标任务实例,即执行S104。

S104:调度节点将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中。

考虑到一个调度节点需要管理的工作节点的个数往往较多,为了降低调度节点的工作量,并且提升任务处理的整体效率,在本申请实施例中,调度节点可以将目标任务实例迁移至其对应任务类型的任务队列,从而由各工作节点主动从队列中拉取所需执行的任务实例。

不同的工作节点其负责的任务类型有所差异,在本申请实施例中,可以对每种任务类型设置其对应的任务队列。

任务实例列表中记载了各任务实例的任务类型,调度节点可以根据目标任务实例所属的任务类型,将该目标任务实例从redis内存数据库中迁移至其对应任务类型的任务队列中。

S105:工作节点从与自身任务类型相匹配的任务队列中读取目标任务实例。

工作节点可以基于本节点可调度运行的任务类型,去相应的任务队列中读取所需执行的目标任务实例。

S106:工作节点在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息。

每个任务实例有其对应的依赖信息和被依赖信息,在本申请实施例中,为了便于区分,可以将目标任务实例的依赖信息称作目标依赖信息,将目标任务实例的被依赖信息称作目标被依赖信息。

在本申请实施例中,可以根据各任务实例的执行情况,动态标记各任务实例对应的依赖信息,从而便于工作节点获取各任务实例执行情况,从而有序的执行各任务实例。

因此,工作节点在完成目标任务实例后,可以从redis内存数据库中读取目标任务实例的目标被依赖信息。S107:工作节点依据目标被依赖信息确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。

通过对目标依赖信息中记录的目标任务实例的标识信息进行标记,可以便于工作节点依据该标记确定出目标任务实例已经顺利完成,从而执行后续的任务实例。

在实际应用中,对标识信息进行标记的方式可以有多种,一种方式可以设置特定的字符用于表征目标任务实例已经顺利完成;另一种方式可以对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行删除。

以删除目标任务实例的标识信息为例,相应的,调度节点在判断目标任务实例所依赖的任务实例是否执行完毕时,可以直接判断是否存在依赖信息为空的目标任务实例。

当目标任务实例的依赖信息为空时,则说明执行目标任务实例所需依赖的任务实例均已完成执行,此时可以执行目标任务实例。

由上述技术方案可以看出,调度节点将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。redis内存数据库具有高性能存储,通过将任务实例以及相关的依赖信息和被依赖信息缓存至redis内存数据库,使得系统具备了非常好的横向扩展能力和分布式任务调度能力。判断目标任务实例所依赖的任务实例是否执行完毕;其中,目标任务实例为所有任务实例中的任意一个任务实例。若目标任务实例所依赖的任务实例执行完毕,则说明此时可以执行目标任务实例,可以将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中。相应的,工作节点可以从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息可以确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。通过将任务实例放到与其任务类型对应的队列中,可以由各工作节点主动查询其所需执行的任务实例,降低了调度节点的工作量。根据各任务实例的执行情况,可以动态标记各任务实例对应的依赖信息,从而便于工作节点获取各任务实例执行情况,从而有序的执行各任务实例,有效的解决了原有的任务依赖分析严重依赖系统缓存以及被动维护任务依赖关系导致的协调服务压力过大的问题。

考虑到在实际应用中,工作节点执行任务实例时可能出现失败的情况,因此工作节点在从与自身任务类型相匹配的任务队列中读取目标任务实例之后,可以监控目标任务实例的运行状态;若目标任务实例运行成功,则执行从redis内存数据库中读取目标任务实例的目标被依赖信息的步骤;若目标任务实例运行失败,则判断目标任务实例的运行次数是否小于设定的最大重试次数。

若目标任务实例的运行次数小于设定的最大重试次数,则说明可以重新执行目标任务实例,此时可以将目标任务实例重新写入与自身任务类型相匹配的任务队列中,以便于满足执行条件时再次执行目标任务实例;每执行一次目标任务实例则将运行次数加一。

若目标任务实例的运行次数不小于设定的最大重试次数,则说明目标任务实例的执行次数已达到上限,此时可以输出目标任务实例运行失败的结果。

通过对目标任务实例的运行状态进行监控,可以及时发现目标任务实例运行失败的情况,从而便于管理人员及时处理,降低了目标任务实例执行失败对任务调度的影响。

图2为本申请实施例提供的一种适用于调度节点的任务调度装置的结构示意图,包括实例缓存单元21、确定单元22、信息缓存单元23、判断单元24和迁移单元25;

实例缓存单元21,用于将满足待处理需求的任务实例缓存至redis内存数据库;

确定单元22,用于基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;

信息缓存单元23,用于将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息;

判断单元24,用于判断目标任务实例所依赖的任务实例是否执行完毕;其中,目标任务实例为所有任务实例中的任意一个任务实例;

迁移单元25,用于若目标任务实例所依赖的任务实例执行完毕,则将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中,以便于与任务类型相对应的工作节点从任务队列中读取目标任务实例,在完成目标任务实例后,依据目标任务实例的目标被依赖信息确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。

可选地,实例缓存单元包括扫描子单元和拉取子单元;

扫描子单元,用于定时扫描任务实例列表中的数据;

拉取子单元,用于从任务实例列表中拉取满足待处理需求的任务实例;并将任务实例缓存至redis内存数据库。

可选地,拉取子单元用于从任务实例列表中拉取任务执行时间与当前时间的差值小于预设时间限值的任务实例。

可选地,判断单元用于判断是否存在依赖信息为空的目标任务实例。

可选地,信息缓存单元用于将各任务实例的依赖信息和被依赖信息以集合的数据结构形式缓存至redis内存数据库。

图2所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,调度节点将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。redis内存数据库具有高性能存储,通过将任务实例以及相关的依赖信息和被依赖信息缓存至redis内存数据库,使得系统具备了非常好的横向扩展能力和分布式任务调度能力。判断目标任务实例所依赖的任务实例是否执行完毕;其中,目标任务实例为所有任务实例中的任意一个任务实例。若目标任务实例所依赖的任务实例执行完毕,则说明此时可以执行目标任务实例,可以将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中,以便于工作节点从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息可以确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。通过将任务实例放到与其任务类型对应的队列中,可以由各工作节点主动查询其所需执行的任务实例,降低了调度节点的工作量。根据各任务实例的执行情况,可以动态标记各任务实例对应的依赖信息,从而便于工作节点获取各任务实例执行情况,从而有序的执行各任务实例,有效的解决了原有的任务依赖分析严重依赖系统缓存以及被动维护任务依赖关系导致的协调服务压力过大的问题。

图3为本申请实施例提供的一种适用于工作节点的任务调度装置的结构示意图,包括任务读取单元31、信息读取单元32、确定单元33和标记单元34;

任务读取单元31,用于从与自身任务类型相匹配的任务队列中读取目标任务实例;

信息读取单元32,用于在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;

确定单元33,用于依据目标被依赖信息确定出相匹配的目标被依赖任务实例;

标记单元34,用于对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。

可选地,对标记单元用于对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行删除。

可选地,还包括监控单元、次数判断单元、写入单元和输出单元;

监控单元,用于监控目标任务实例的运行状态;若目标任务实例运行成功,则触发信息读取单元;

次数判断单元,用于若目标任务实例运行失败,则判断目标任务实例的运行次数是否小于设定的最大重试次数;

写入单元,用于若目标任务实例的运行次数小于设定的最大重试次数,则将目标任务实例重新写入与自身任务类型相匹配的任务队列中,以便于满足执行条件时再次执行目标任务实例;每执行一次目标任务实例则将运行次数加一;

输出单元,用于若目标任务实例的运行次数不小于设定的最大重试次数,则输出目标任务实例运行失败的结果。

图3所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,工作节点可以从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息可以确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。redis内存数据库具有高性能存储,通过将任务实例以及相关的依赖信息和被依赖信息缓存至redis内存数据库,使得系统具备了非常好的横向扩展能力和分布式任务调度能力。通过将任务实例放到与其任务类型对应的队列中,可以由各工作节点主动查询其所需执行的任务实例,降低了调度节点的工作量。根据各任务实例的执行情况,可以动态标记各任务实例对应的依赖信息,从而便于工作节点获取各任务实例执行情况,从而有序的执行各任务实例,有效的解决了原有的任务依赖分析严重依赖系统缓存以及被动维护任务依赖关系导致的协调服务压力过大的问题。

图4为本申请实施例提供的一种任务调度系统40的结构示意图,包括调度节点41和工作节点42;

调度节点41,用于将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息;判断目标任务实例所依赖的任务实例是否执行完毕;其中,所述目标任务实例为所有所述任务实例中的任意一个任务实例;若目标任务实例所依赖的任务实例执行完毕,则将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中;

工作节点42,用于从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。

图4所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,调度节点将满足待处理需求的任务实例缓存至redis内存数据库;基于任务依赖信息确定出各任务实例的依赖信息和被依赖信息;并将各任务实例的依赖信息和被依赖信息缓存至redis内存数据库;其中,依赖信息包括任务实例所依赖的其它任务实例的标识信息;被依赖信息包括对任务实例具有依赖关系的其它任务实例的标识信息。redis内存数据库具有高性能存储,通过将任务实例以及相关的依赖信息和被依赖信息缓存至redis内存数据库,使得系统具备了非常好的横向扩展能力和分布式任务调度能力。判断目标任务实例所依赖的任务实例是否执行完毕;其中,目标任务实例为所有任务实例中的任意一个任务实例。若目标任务实例所依赖的任务实例执行完毕,则说明此时可以执行目标任务实例,可以将redis内存数据库中缓存的目标任务实例迁移至其对应任务类型的任务队列中。相应的,工作节点42可以从与自身任务类型相匹配的任务队列中读取目标任务实例;在完成目标任务实例后,从redis内存数据库中读取目标任务实例的目标被依赖信息;依据目标被依赖信息可以确定出相匹配的目标被依赖任务实例,并对目标被依赖任务实例的目标依赖信息中记录的目标任务实例的标识信息进行标记。通过将任务实例放到与其任务类型对应的队列中,可以由各工作节点42主动查询其所需执行的任务实例,降低了调度节点的工作量。根据各任务实例的执行情况,可以动态标记各任务实例对应的依赖信息,从而便于工作节点42获取各任务实例执行情况,从而有序的执行各任务实例,有效的解决了原有的任务依赖分析严重依赖系统缓存以及被动维护任务依赖关系导致的协调服务压力过大的问题。

以上对本申请实施例所提供的一种任务调度方法、装置和系统进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

相关技术
  • 一种任务调度系统、任务调度和调度任务配置方法及装置
  • 一种任务调度方法、任务调度装置及多核系统
技术分类

06120112966161