本发明涉及任务调度,尤其涉及一种任务调度方法、系统、设备、介质及产品。
背景技术:
1、存在如此场景,任务由一个个步骤构成,在任务执行过程中,需要实时查看任务进度等信息,如软件的安装卸载等。在编写这种软件时,除了关注业务本身的代码,还需要关注任务信息如何展示的问题。如果需要在一个统计面板上,展示多个上述任务,且需要随时查询任务的安装状态以及执行输出,则需要统一任务信息获取与调度的方式。大多现有技术的侧重点是从任务定时调度的角度入手,解决任务在多次执行的过程中产生的问题。在多种不同任务的单次执行的调度技术中,任务的保存与恢复采用java类路径的方式,与代码结构耦合,如果类路径变化则项目兼容性无法保证;其次其并没有对正在执行的任务细节做展示,外部只能感知到任务正在执行以及执行到哪一步骤,对任务的细节展现不够彻底。任务执行器执行任务时会记录日志,但是该日志是任务执行器的日志,记录的是任务执行器的任务开始、结束、执行时间等等比较框架的内容。该日志没有记录任务的相关信息,因此通过该日志无法了解任务的执行情况。
2、在实践中发现有这么一种情况:任务执行之前设定了任务状态为执行中,然后该任务执行器便宕机了,此时下一个任务执行器接手后并不知道该步骤是设置了执行中后便宕机,还是执行了一半宕机,还是执行完毕后宕机。任务执行器只能重新执行该任务,造成了时间和资源的浪费。
技术实现思路
1、本发明旨在解决因任务执行器宕机时机不明而导致的重新执行任务的时间和资源的浪费问题以及缺少任务日志的问题。为此,本发明提供一种任务调度方法、系统、设备、介质及产品,设计了任务恢复机制,对任务状态进行判断,并对任务状态为执行中的任务执行检验程序,根据执行结果判定上一个任务执行器的宕机时机,决定任务重新开始执行的步骤,节省了时间和资源。在所述任务执行器按照步骤顺序执行所述任务的过程中,记录任务日志,提供实时访问任务比较细节的、与任务强相关的信息的功能。
2、本发明提供一种任务调度方法,采用的技术方案如下:包括:
3、获取任务配置id及其对应的任务生成器的名称;
4、根据所述任务配置id和任务生成器的名称,生成任务;将所述任务的任务元数据的任务状态和步骤元数据的步骤状态设置为待执行,将所述任务元数据与步骤元数据保存到数据库,将所述任务元数据的任务id提交到任务队列;
5、通过分布式锁从所述任务队列中获取所述任务id,根据所述任务id获取所述任务元数据与步骤元数据,判断所述任务状态:
6、若所述任务状态为待执行,则将所述任务交由任务执行器执行,
7、若所述任务状态为执行成功或执行失败,则将所述任务id从所述任务队列中删除,重新通过分布式锁从所述任务队列中获取所述任务id,
8、若所述任务状态为执行中,则查找所述步骤元数据的步骤状态为执行中的当前步骤,通过对应的检验程序判断所述当前步骤是否执行成功:若执行成功,则设置步骤索引为所述当前步骤的下一步骤,若执行失败,则执行所述当前步骤的回滚程序,回滚到所述当前步骤执行之前;然后将所述任务交由任务执行器执行;
9、所述任务执行器按照步骤顺序执行所述任务。
10、进一步的,所述任务包括任务元数据、步骤元数据和任务行为,
11、所述任务元数据包括任务id、任务状态和任务配置id,
12、所述步骤元数据包括步骤索引和步骤状态,
13、所述任务行为包括任务初始化程序和步骤行为集合,
14、所述步骤行为集合包括执行程序、检验程序和回滚程序。
15、进一步的,所述任务执行器按照步骤顺序执行所述任务的过程为:
16、执行所述任务初始化程序,包括:设置任务状态为执行中并保存到数据库;
17、遍历步骤集合,若步骤集合遍历完毕,则设置所述任务状态为执行成功并保存到数据库;
18、若步骤集合遍历未完毕,则确定待执行的当前步骤,然后设置线程变量为所述当前步骤,设置所述当前步骤的步骤状态为执行中并保存到数据库;执行所述当前步骤对应的执行程序;执行所述当前步骤对应的检验程序,判断所述当前步骤是否执行成功,若执行成功,则设置所述当前步骤的步骤状态为成功并保存到数据库,然后再次遍历步骤集合,若执行失败,则执行所述当前步骤对应的回滚程序,并设置所述当前步骤的步骤状态为失败,设置任务状态为失败,并保存到数据库,然后跳出遍历步骤集合;
19、解除分布式锁,将所述任务id从所述任务队列中删除。
20、进一步的,所述任务行为还包括任务最后程序;若所述当前步骤设置有所述任务最后程序,则执行所述当前步骤对应的执行程序后,执行所述任务最后程序;所述任务最后程序为设置所述当前步骤的步骤状态为执行结果并保存到数据库,然后再次遍历步骤集合;所述执行结果为执行成功或执行失败。
21、进一步的,对执行失败的所述任务发起重试,过程为:
22、从数据库中查询获取执行失败的原任务的任务元数据、步骤元数据;
23、调用任务生成器生成新任务;
24、使用所述原任务中的成功步骤的所述任务元数据、步骤元数据替换所述新任务的所述任务元数据、步骤元数据;
25、将新任务的任务id提交到任务队列;
26、对执行失败的所述任务执行任务放弃,过程为:从所述任务的执行失败的所述当前步骤开始,从后往前依次调用步骤对应的回滚程序,然后调用所述任务生成器的drop方法。
27、进一步的,在所述任务执行器按照步骤顺序执行所述任务的过程中,记录任务日志并保存到数据库,所述任务日志由时间信息和从线程中获取的变量拼凑形成,或者由时间信息和任务进度拼凑形成。
28、本发明还提供一种任务调度系统,采用的技术方案如下:包括:
29、任务生成器、任务恢复模块、任务执行器、日志记录模块、分布式锁模块、任务队列和数据库,所述任务生成器分别与所述任务队列、数据库连接,所述分布式锁模块与所述任务队列连接,所述任务恢复模块分别与所述分布式锁模块、任务队列、任务执行器、数据库连接,所述任务执行器与所述数据库连接,所述日志记录模块分别与所述任务执行器、数据库连接;
30、所述任务生成器,用于获取任务配置id及其对应的任务生成器的名称,根据所述任务配置id和任务生成器的名称,生成任务;将所述任务的任务元数据的任务状态和步骤元数据的步骤状态设置为待执行,将所述任务元数据与步骤元数据保存到数据库,将所述任务元数据的任务id提交到任务队列;
31、所述任务恢复模块,用于通过分布式锁从所述任务队列中获取所述任务id,根据所述任务id获取所述任务元数据与步骤元数据,判断所述任务状态:若所述任务状态为待执行,则将所述任务交由任务执行器执行,若所述任务状态为执行成功,则将所述任务id从所述任务队列中删除,若所述任务状态为执行失败,则将所述任务id从所述任务队列中删除,若所述任务状态为执行中,则查找所述步骤元数据的步骤状态为执行中的当前步骤,通过对应的检验程序判断所述当前步骤是否执行成功,若执行成功,则设置步骤索引为所述当前步骤的下一步骤,然后将所述任务交由任务执行器执行;如果执行失败,则执行所述当前步骤的回滚程序,回滚到所述当前步骤执行之前,然后将所述任务交由任务执行器执行;
32、所述任务执行器,用于按照步骤顺序执行所述任务;
33、所述日志记录模块,用于在所述任务执行器按照步骤顺序执行所述任务的过程中,记录任务日志并保存到数据库;
34、所述分布式锁模块,用于获取所述任务id;
35、所述任务队列,用于保存所述任务id;
36、所述数据库,用于保存任务元数据、步骤元数据和任务日志。
37、本发明还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述的一种任务调度方法。
38、本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种任务调度方法。
39、本发明还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述的一种任务调度方法。
40、本发明实施例中的上述一个或多个技术方案,至少具有如下技术效果之一:
41、1.本发明为应对任务执行器宕机后重新执行任务的情况,将任务状态设计成四种:待执行、执行成功、执行失败和执行中,通过任务恢复机制对四种任务状态进行判断,区分宕机情形。本发明针对设置执行中后便宕机、执行了一半宕机和执行完毕后宕机这三种情况采用不同的逻辑,通过检验程序的执行结果判断情况,对执行失败的情况,回滚后再进行任务执行的逻辑,对执行成功的情况,则直接从下一步骤进行任务执行的逻辑,节省了时间和资源。
42、2.本发明重点设计了任务的回滚机制,回滚时机有两个,一个是任务提交之后到任务执行器开始执行之前,也就是任务恢复时,会判断一次任务的状态,如果失败,会回滚并重新执行,如果成功就继续执行。这是因为在任务执行器开始之前,任务执行器不知道该任务是重新发起的还是第一次发起的,或是上个任务执行器宕机导致其接手了这个任务,所以进行一次是否执行成功的判断是必要且巧妙处理三种情况的方式。另一个回滚时机是用户选择终止该任务,本发明会从后往前依次回滚到任务最开头。
43、3.一般来说,任务的开发者是不应该关注任务如何调度的,所以在编写任务代码时,并不清楚任务的执行状态,也获取不到。针对需要查看任务的执行状态的需求,本发明引入了任务日志,任务日志是比较细节的、与任务强相关的信息,通过任务日志记录任务自己的日志以提供实时访问数据的功能。
44、本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
1.一种任务调度方法,其特征在于,包括:
2.如权利要求1所述的一种任务调度方法,其特征在于,所述任务包括任务元数据、步骤元数据和任务行为,
3.如权利要求2所述的一种任务调度方法,其特征在于,所述任务执行器按照步骤顺序执行所述任务的过程为:
4.如权利要求3所述的一种任务调度方法,其特征在于,所述任务行为还包括任务最后程序;若所述当前步骤设置有所述任务最后程序,则执行所述当前步骤对应的执行程序后,执行所述任务最后程序;所述任务最后程序为设置所述当前步骤的步骤状态为执行结果并保存到数据库,然后再次遍历步骤集合;所述执行结果为执行成功或执行失败。
5.如权利要求3所述的一种任务调度方法,其特征在于,对执行失败的所述任务发起重试,过程为:
6.如权利要求1至3任一项所述的一种任务调度方法,其特征在于,在所述任务执行器按照步骤顺序执行所述任务的过程中,记录任务日志并保存到数据库,所述任务日志由时间信息和从线程中获取的变量拼凑形成,或者由时间信息和任务进度拼凑形成。
7.一种任务调度系统,其特征在于,用以执行如权利要求1至6任一项所述的一种任务调度方法,包括:任务生成器、任务恢复模块、任务执行器、日志记录模块、分布式锁模块、任务队列和数据库,所述任务生成器分别与所述任务队列、数据库连接,所述分布式锁模块与所述任务队列连接,所述任务恢复模块分别与所述分布式锁模块、任务队列、任务执行器、数据库连接,所述任务执行器与所述数据库连接,所述日志记录模块分别与所述任务执行器、数据库连接;
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的一种任务调度方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的一种任务调度方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6中任一项所述的一种任务调度方法。