一种支持依赖关系管理的任务调度系统
技术领域
本发明涉及任务调度管理技术领域,尤其涉及一种支持依赖关系管理的任务调度系统。
背景技术
目前在计算机系统中对任务的执行都是采用在某个具体的时间点上由调度服务器进行触发调度以实现对任务的调度。该时间点往往是采用时间表达式来体现的,这些时间表达式可以表示某个具体的时间点,甚至可以精确到秒级对任务进行触发调度。因此,这种触发方式可以很好的实现在特定的某个时间点对任务进行触发调度。然而,由于系统的业务复杂性,许多系统中的任务之间是存在紧密的相关性的。比如在一个业务目标的处理逻辑的处理逻辑非常复杂的情况下,系统中可能需要多个任务协作才能完成。
现有的调度系统并没有对这种任务间的依赖关系管理提供很好的支持,基本只能由具体任务逻辑的开发人员在任务启动后逐个检查其依赖的所有任务是否完成,并在依赖任务未完成时循环检查直到运行条件满足。
这样的模式会带来许多问题:
例如,检查依赖任务是否完成无固定的标准,需要按照相关任务的逻辑选定关键事件做为特征,耦合过于紧密;
任务长时间空转,增大了系统处理程序崩溃和任务异常退出的复杂度;
依赖关系由各个任务分别管理,难以调整和管理等等。
此外任务长时间空转可能导致在系统出现故障重新启动后,可能有大量任务一部分在运行过程中停止,一部分在空转过程中停止,此时要把系统恢复到重新启动前的状态也有非常大的困难。
为解决上述问题,提出一种支持依赖关系管理的任务调度系统。
发明内容
本发明的目的是为了解决现有技术中一组存在依赖关系的任务在调度过程中须由任务自身来实现紧耦合、逻辑不严格的依赖关系管理而带来各种问题的缺点,而提出的一种支持依赖关系管理的任务调度系统。
为了实现上述目的,本发明采用了如下技术方案:
设计一种支持依赖关系管理的任务调度系统,其特征在于:包括任务维护模块、任务依赖性确定模块、任务运行状态管理模块、任务出发模块和任务处理模块;
所述任务维护模块,用于创建一组任务并明确相互之间的依赖关系,或对已有的一组任务进行任务的增减或依赖关系变更操作;
所述任务依赖性确定模块,用于根据任务依赖关系建立依赖关系图,并根据任务依赖图判断给定任务是否有依赖的任务;
所述任务运行状态管理模块,用于跟踪每个任务的运行状态并持久化;
所述任务出发模块,用于触发任务,其首先检索所有满足触发条件且为未运行状态的任务,并通过任务依赖性确定模块判定能够触发的任务,并逐个触发;
所述任务处理模块,用于在任务触发后,启动相应的任务处理程序,并将其纳入运行状态管理。
本发明还提供一种支持依赖关系管理任务调度系统的调度方法,包括如下步骤:
步骤10:在一组任务被创建后,利用支持依赖关系管理的任务调度系统先为该任务及其所有具有依赖关系的其他所有任务创建状态跟踪记录并持久化;
步骤20:调度程序根据步骤10所记录的数据判定是否存在已满足触发条件且处于未运行状态的任务;
步骤30:检查是否无依赖任务;若无,进入步骤60,若有进入步骤40;
步骤40:根据依赖关系构建任务依赖关系图;所述任务依赖图为各任务依赖关系的有向无环图;
步骤50:检查依赖任务的执行过程;然后进入步骤60;
步骤60:将通过检查的任务触发。
优选的,所述步骤40构建任务依赖关系图需要完全满足下列条件:满足任务自身触发条件;无依赖的任务,或所有依赖的任务均已运行完成;任务自身还处于未运行状态。
优选的,所述步骤50中,检查依赖任务执行的步骤包括:
步骤501:检查是否满足任务的出发条件,若满足进入步骤502,若不满足,进入步骤512;
步骤502:检查任务手否处于未运行状态,若满足进入步骤503,若不满足,进入步骤512;
步骤503:检查该任务的依赖任务是否运行完成,是则进入步骤504,否则进入步骤512;
步骤504:触发该任务执行;
步骤505:检测步骤504所触发的任务是否执行成功;失败则进入步骤506,成功则进入步骤511;
步骤506:判断是否达到重试最大次数;若达到最大重试次数进入步骤509,若没有达到最大重试次数,则进入步骤508;
步骤507:提示人工干预,然后进入步骤511;
步骤508:记录重新执行的次数;然后进入步骤510;
步骤509:记录人工干预标志;
步骤510:记录重复执行的标志,标记该任务被重复执行,然后进入步骤511;
步骤511:更新任务的结果执行状态,然后进入步骤512;
步骤512:任务执行完成进入下一个任务执行时间点前的等待。
优选的,所述步骤507的提示人工干预的方式包括警示灯或者警报铃。
优选的,所述步骤511中所更新任务的结果执行状态分为:步骤507进入的更新任务状态的执行结果的执行失败人工干预;步骤510进入的更新任务状态的执行结果为执行成功重复执行;步骤505进入的更新任务状态的执行结果为执行成功。
本发明提出的一种支持依赖关系管理的任务调度系统,有益效果在于:基于任务依赖图来体现任务之间的依赖关系,在达到当前任务的触发条件时,先基于任务依赖图获得该当前任务所依赖的任务,并在所依赖的各任务的任务执行结果状态均为执行成功的情况下,才将该任务触发。其无需由任务自身以紧耦合来检查其依赖的任务的运行结果是否正常,调度程序直接基于任务状态即可判定所依赖的任务是否执行成功,降低了任务运行的资源消耗,并提高了任务调度的效率和可靠性。
附图说明
图1为本发明的任务调度方法示意图。
图2为本发明的任务依赖关系示意图。
图3为本发明的检查依赖任务的执行过程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
参照图1-3,一种支持依赖关系管理的任务调度系统,包括任务维护模块、任务依赖性确定模块、任务运行状态管理模块、任务出发模块和任务处理模块;
任务维护模块,用于创建一组任务并明确相互之间的依赖关系,或对已有的一组任务进行任务的增减或依赖关系变更操作;
任务依赖性确定模块,用于根据任务依赖关系建立依赖关系图,并根据任务依赖图判断给定任务是否有依赖的任务;
任务运行状态管理模块,用于跟踪每个任务的运行状态并持久化;
任务出发模块,用于触发任务,其首先检索所有满足触发条件且为未运行状态的任务,并通过任务依赖性确定模块判定能够触发的任务,并逐个触发;
任务处理模块,用于在任务触发后,启动相应的任务处理程序,并将其纳入运行状态管理。
支持依赖关系管理的任务调度系统的调度方法,包括如下步骤:
步骤10:在一组任务被创建后,利用支持依赖关系管理的任务调度系统先为该任务及其所有具有依赖关系的其他所有任务创建状态跟踪记录并持久化;
步骤20:调度程序根据步骤10所记录的数据判定是否存在已满足触发条件且处于未运行状态的任务;
步骤30:检查是否无依赖任务;若无,进入步骤60,若有进入步骤40;
步骤40:根据依赖关系构建任务依赖关系图;任务依赖图为各任务依赖关系的有向无环图;
构建任务依赖关系图需要完全满足下列条件:
满足任务自身触发条件;
无依赖的任务,或所有依赖的任务均已运行完成;
任务自身还处于未运行状态;
步骤50:检查依赖任务的执行过程;检查依赖任务执行的步骤包括:
步骤501:检查是否满足任务的出发条件,若满足进入步骤502,若不满足,进入步骤512;
步骤502:检查任务手否处于未运行状态,若满足进入步骤503,若不满足,进入步骤512;
步骤503:检查该任务的依赖任务是否运行完成,是则进入步骤504,否则进入步骤512;
步骤504:触发该任务执行;
步骤505:检测步骤504所触发的任务是否执行成功;失败则进入步骤506,成功则进入步骤511;
步骤506:判断是否达到重试最大次数;若达到最大重试次数进入步骤509,若没有达到最大重试次数,则进入步骤508;
步骤507:提示人工干预,然后进入步骤511;
步骤508:记录重新执行的次数;然后进入步骤510;
步骤509:利用警报铃警示工作人员记录人工干预标志;
步骤510:记录重复执行的标志,标记该任务被重复执行,然后进入步骤511;
步骤511:更新任务的结果执行状态,步骤507进入的更新任务状态的执行结果的执行失败人工干预;步骤510进入的更新任务状态的执行结果为执行成功重复执行;步骤505进入的更新任务状态的执行结果为执行成功;然后进入步骤512;
步骤512:任务执行完成进入下一个任务执行时间点前的等待,然后进入步骤60;
步骤60:将通过检查的任务触发。
以图2所示的任务依赖关系图为例:
在该任务依赖图中,总共有四个任务:任务A、任务B、任务C、任务D,其中,任务B、任务C依赖于任务A,任务D依赖于任务B和任务C。如上,在该示例说明中,各任务是定时触发,假设当前到达了任务C的运行时间,当前任务为任务C;
在步骤501中,任务调度会检测是否达到当前任务的触发条件,即到达任务C的运行时间,若判定达到任务C的触发条件,并执行步骤502中的判断;若判定没有达到任务C的触发条件,直接进入步骤512;
在步骤502中判断当前任务是否处于未运行状态。即任务C是否已经运行,若判定任务C已经运行,则直接结束本次任务进入步骤512;若判定任务C未运行,则进入步骤503判断;
在步骤503中判断任务是否有依赖任务或者依赖任务是否全部运行完成。即判定任务C没有依赖任务,或者依赖的任务全部运行完成,则进入步骤504进行触发任务C,反之则结束本次任务进入步骤512;根据任务依赖图需要判断任务A是否执行完成;
在步骤504中触发任务C,执行任务;
在步骤505中基础判断任务C是否执行成功,执行成功就进入执行步骤511更新任务C的任务结果执行状态为执行成功;若执行失败进入步骤506;
在步骤506中判断任务执行次数是否超过重复执行的最大次数,即任务C重复执行的次数达到最大重复执行次数执行步骤509,反之执行步骤508;
执行到步骤509需要记录一下需要人工干涉标志然后执行步骤507;
步骤507通过报警等方式通知人员需要进行人工干预,并进入步骤511;
重复执行次数没有达到最大值,进入步骤508,记录重复执行次数后进入步骤510;
记录重复执行次数后还需要执行步骤510记录下重复执行标志,标记此任务被重复执行;
步骤511更新任务执行状态,步骤507进来的更新任务状态为执行失败人工干预;步骤510进来的需更新任务状态为执行成功重复执行;步骤505进来的需要更新任务状态为执行成功;
步骤512即任务C执行完成进入任务C下一任务执行时间点前的等待;
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。