《一种实现任务调度的方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种实现任务调度的方法及系统.pdf(19页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104166590A43申请公布日20141126CN104166590A21申请号201310187584322申请日20130520G06F9/4820060171申请人阿里巴巴集团控股有限公司地址英国英属开曼群岛大开曼资本大厦一座四层847号邮箱72发明人段文国74专利代理机构北京安信方达知识产权代理有限公司11262代理人解婷婷栗若木54发明名称一种实现任务调度的方法及系统57摘要本申请公开了一种实现任务调度的方法及系统,包括利用采用插件实现的任务模板创建任务,根据任务的实时状态对任务进行调度。本申请通过利用采用插件实现的任务模板创建的任务,增强了任务的可扩展性,是一。
2、种通用性任务的创建方式;并且,由于任务模板中的插件,以及模板配置、和/或参数列表、和/或策略、和/或结果响应的相互独立性及可扩展性,而且它们之间可以做排列组合,因此,极大地实现了各个组件的重用,大大增强了任务的可扩展性,保证了本申请实现任务调度的方法的通用性,从而大大增强了触发事件的可扩展性,提高了工作效率,降低了工作成本。51INTCL权利要求书4页说明书12页附图2页19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书12页附图2页10申请公布号CN104166590ACN104166590A1/4页21一种实现任务调度的方法,其特征在于,包括利用采用插件实现的任务模板创建。
3、任务;根据任务的实时状态对实时队列中的任务进行调度。2根据权利要求1所述的方法,其特征在于,所述任务模板至少包括任务模板标识ID,用于唯一标识任务模板;任务模板名称,不同任务模板ID对应不同的任务模板名称;以及,插件,用于通过任务调度动态加载任务。3根据权利要求2所述的方法,其特征在于,所述任务模块还包括内容为命令的组合的模板配置;和/或,所述任务执行时,通过所述插件的执行函数传入的参数列表;和/或,对所述插件工作的输出进行分析的策略;和/或,用于根据任务的执行结果驱动任务的下一个环节的完成的结果响应。4根据权利要求2或3所述的方法,其特征在于,所述根据任务的实时状态对任务进行调度为对所述任务。
4、模板的各组成逐步装载、运用根据创建的任务实例启动工作线程,动态加载所述插件;任务成功执行后结束工作线程并销毁成功执行的任务。5根据权利要求4所述的方法,其特征在于,所述任务模板的各组成逐步装载、运用还包括调用插件的执行函数,传递模板配置参数,和/或参数列表中的参数,和/或策略信息,解析并处理参数。6根据权利要求5所述的方法,其特征在于,所述插件的接口包括执行函数、暂停函数、重试函数、中断函数。7根据权利要求6所述的方法,其特征在于,所述任务模板中包括有模板配置;所述模板配置使用任务调度引擎内置的宏,以及可变的外置宏。8根据权利要求6所述的方法,其特征在于,所述任务模板中包含有参数列表;所述参数。
5、列表中的参数为固定值的参数,和/或可变值的参数;所述可变值的参数中包含有参数宏及参数语句。9根据权利要求6所述的方法,其特征在于,所述任务模板中包含有策略;所述策略的格式为可扩展标记语言XML格式、或初始化文件INI格式、或数据配置文件DAT格式、或轻量级数据交换JSON格式,或二进制格式。10根据权利要求6所述的方法,其特征在于,所述任务模板中包含有结果响应;所述结果响应为操作函数。11根据权利要求1所述的方法,其特征在于,该方法还包括监测正在执行的任务的状态,记录其进度和完成情况如果所述实时队列中的任务执行成功,将该任务从实时队列中删除;如果所述实时队列中的任务执行失败,根据任务失败的间隔。
6、时间以及重试次数的限制,决定是否重新执行。12根据权利要求11所述的方法,其特征在于,所述是否重新执行具体包括判断所述重试次数是否超过预设重试次数阈值,在未超过重试次数阈值时,判断所述间隔时间是否超过预设重试间隔阈值,如果超过重试间隔阈值,则重新执行该任务;如果判断出所述重试次数已超过重试次数阈值,则不再执行该任务;权利要求书CN104166590A2/4页3如果判断出所述重试次数未超过重试次数阈值,所述间隔时间未超过重试间隔阈值,则暂时不执行该任务。13根据权利要求12所述的方法,其特征在于,该方法包括对所述不再执行的任务做镜像处理,将该任务从实时队列中删除。14根据权利要求11或13所述的。
7、方法,其特征在于,所述删除任务包括记录所述任务及其执行结果、销毁任务实例,并将该任务从实时任务队列中删除,更新用于记录该任务执行次数的计数器。15根据权利要求1所述的方法,其特征在于,该方法之前还包括根据预先配置的看门狗的状态,决定是否重新开始对任务的调度。16根据权利要求1所述的方法,其特征在于,当执行所述任务时,该方法还包括查询当前正在执行的任务队列的长度,如果当前的队列长度小于预先设置的队列长度阈值,则直接执行所述任务;如果当前队列的长度已超过队列长度阈值,则不执行所述任务。17根据权利要求1、11、15或16所述的方法,其特征在于,该方法之前还包括判断任务调度引擎是否被暂停,若被暂停,。
8、不检查自动任务队列;否则,检查自动任务队列并执行时刻表中所有时刻不晚于当前时刻的任务。18根据权利要求17所述的方法,其特征在于,在任务调度引擎中,预先设置有用于存放连续失败任务的连续失败任务队列,以及,任务连续失败后自动转入暂停状态的次数阈值,和任务暂停后重新尝试性探测的预设重试时间窗;该方法还包括在当前任务要执行前,如果判断出连续失败任务队列中存在该当前任务,则获取当前要执行的任务的连续失败次数和最后执行时间;在连续失败次数大于预设次数阈值,且当前时间与最后执行时间的差小于重试时间窗时,退出当前任务;在连续失败次数小于预设次数阈值时,执行当前准备要执行的任务;在连续失败次数大于预设次数阈值。
9、,且当前时间与最后执行时间的差大于重试时间窗时,执行当前准备要执行的任务。19根据权利要求18所述的方法,其特征在于,在所述任务执行成功后,该方法还包括重置该任务的连续失败次数清零,最后执行时间设置为当前时间。20根据权利要求18所述的方法,其特征在于,在所述任务执行失败后,该方法还包括将所述任务的连续失败次数加一,最后执行时间设置为当前时间。21一种实现任务调度的系统,其特征在于,包括接口与适配单元、任务调度引擎,以及任务实例单元,其中,接口与适配单元,用于获取来自外部的人工任务;任务实例单元,用于根据任务启动时传递的参数,并按照执行响应的顺序,完成赋予该任务的工作内容;将任务执行过程中的实。
10、时状态与进度信息上报给任务调度引擎;任务调度引擎,用于利用采用插件实现的任务模板创建任务,并根据任务的实时状态对任务进行调度。22根据权利要求21所述的系统,其特征在于,所述任务调度引擎包括任务创建模块和任务执行模块,其中,权利要求书CN104166590A3/4页4任务创建模块,用于利用采用插件实现的任务模板创建任务;任务执行模块,具体用于根据创建的任务实例启动工作线程,动态加载插件,任务成功执行后结束工作线程并销毁成功执行的任务。23根据权利要求22所述的系统,其特征在于,所述任务模板至少包括任务模板ID,用于唯一标识任务模板;任务模板名称,不同任务模板ID对应不同的任务模板名称;以及,插。
11、件,用于通过任务调度动态加载任务。24根据权利要求23所述的系统,其特征在于,所述任务模板还包括用于包含命令的组合的模板配置;和/或,任务执行时,通过执行函数传入的参数列表;和/或,用于对插件工作的输出进行分析的策略;和/或,用于根据任务的执行结果驱动任务的下一个环节的完成的结果响应。25根据权利要求24所述的系统,其特征在于,所述任务执行模块还用于,调用插件的执行函数,以传递模板配置参数,和/或参数列表中的参数,和/或策略信息,解析并处理参数。26根据权利要求22所述的系统,其特征在于,所述任务执行模块配置有看门狗,还用于在看门狗的状态为真时进入任务调度。27根据权利要求22所述的系统,其特。
12、征在于,所述接口与适配单元还用于,接收来自外部对任务调度引擎的控制指令,获取任务调度引擎的状态;所述任务执行模块,还用于在接收到的来自接口和适配单元的控制指令为暂停时,不检查自动任务队列;在接收到的来自接口和适配单元的控制指令为继续时,检查自动任务队列并执行时刻表中所有时刻不晚于当前时刻的任务。28根据权利要求22所述的系统,其特征在于,所述任务执行模块,还用于在执行一个新任务时,查询当前正在执行的任务队列的长度,在当前的队列长度小于预先设置的队列长度阈值时,直接执行该任务;在当前队列的长度已超过队列长度阈值时,不执行该任务。29根据权利要求22、26、27或28所述的系统,其特征在于,所述任。
13、务调度引擎还包括任务监测模块,用于监测正在执行的任务的状态,记录其进度和完成情况,在所述实时队列中的任务执行成功时,将该任务从实时队列中删除;在所述实时队列中的任务执行失败时,根据任务失败的间隔时间以及重试次数的限制,决定是否重新执行。30根据权利要求29所述的系统,其特征在于,所述任务监测模块具体用于在任务执行失败时,判断重试次数是否超过预设重试次数阈值,在未超过重试次数阈值时,进一步判断间隔时间是否超过重试间隔阈值,如果超过重试间隔,重新执行该任务;如果判断出该任务的重试次数已超过重试次数阈值,则不再执行该任务;如果判断出该任务的重试次数未超过重试次数阈值且间隔时间也未超过重试间隔阈值,则。
14、暂时不执行该任务;对于成功执行的任务,记录任务及其执行结果、销毁任务实例,并将该任务从实时任务队列中删除,更新用于记录任务执行次数的计数器。权利要求书CN104166590A4/4页531根据权利要求29所述的系统,其特征在于,所述任务执行模块进一步用于,将所述不再执行的任务的信息做镜像处理,删除该任务。32根据权利要求29所述的系统,其特征在于,所述任务调度引擎还包括自动运维模块;在自动运维模块中,预先设置有用于存放连续失败任务的连续失败任务队列,以及,任务连续失败后自动转入暂停状态的次数阈值,和任务暂停后重新尝试性探测的预设重试时间窗;所述自动运维模块用于,在当前任务要执行前,如果连续失败。
15、任务队列中存在该当前任务,则获取当前要执行的任务的连续失败次数和最后执行时间,在连续失败次数大于预设次数阈值,且当前时间与获得的最后执行时间的差小于重试时间窗时,退出当前任务;在连续失败次数小于预设次数阈值时,执行当前准备要执行的任务;在连续失败次数大于预设次数阈值,且当前时间与获得的最后执行时间的差大于重试时间窗时,执行当前准备要执行的任务。33根据权利要求32所述的系统,其特征在于,所述自动运维模块还用于,在任务执行成功后,重置所述任务的连续失败次数清零,最后执行时间设置为当前时间。34根据权利要求32所述的系统,其特征在于,所述自动运维模块还用于,在任务执行失败后,将该所述任务的连续失败。
16、次数加一,最后执行时间设置为当前时间。权利要求书CN104166590A1/12页6一种实现任务调度的方法及系统技术领域0001本申请涉及计算机处理技术,尤指一种实现任务调度的方法及系统。背景技术0002随着IT技术日益发展与深入,无论个人工作还是企业应用,几乎都会碰到任务调度的需求。任务调度,是指在给定的时刻执行特定任务的方法,可以分为自动调度和人工调度。其中,自动调度是指按照一定的时间规律或频率,比如每天几点几分几秒或者每隔几分钟等规律,一旦当前的时刻符合这样的规律,则立即执行任务;而人工任务是由人随机触发的,没有规律可言。但两者都有一个共同的属性即时间。在实际应用中,比如,一个BBS论坛。
17、,需要每隔半个小时生成精华文章的聚合内容RSS文件,需要每天凌晨统计论坛用户的积分排名,需要每隔30分钟执行锁定用户解锁任务等;再如,对于一个典型的管理信息系统MIS来说,在每月1号凌晨都会统计上个月各部门的业务数据生成月报表,每半个小时会查询用户是否已经有快到期的待处理业务等等。0003任务调度本身涉及到多线程并发、运行时间规则制定,以及解析、场景保持与恢复、线程池维护等诸多方面的工作。如果直接使用自定义线程的方法来开发任务调度程序,是一项颇具挑战性的工作。或者,如果每做一个新的任务,都需要做一套相应的调度机制,就不仅仅是技术层面的问题了,事实上还会造成大量的重复劳动,造成了严重的人力物力的。
18、浪费。0004任务调度的基本功能是实现周期性、有规律操作的需求。利用任务调度可以有效地解放管理、运维、运营人员的劳动力,完成频繁乏味的操作、管理任务。通过事先规定要完成的工作、指定什么时候完成该工作,利用任务调度并监测该工作的完成情况,来发现和纠正问题。任务调度一般分为任务调度触发点和任务调度执行事件。其中,任务调度触发点可以是时间、周期、独立参数数值等。如果达到预期触发点,就执行任务调度执行事件。任务调度的灵活性取决于调度引擎对触发点和被调度的事件类型的支持,多样可靠的触发点是任务调度实施的基础,而多种事件类型,则是任务调度是否可扩展的衡量标准。发明内容0005为了解决上述技术问题,本申请提。
19、供了一种实现任务调度的方法及系统,能够大大增强触发事件的可扩展性,从而提高工作效率,降低工作成本。0006为了达到本申请目的,本申请提供一种实现任务调度的方法,包括利用采用插件实现的任务模板创建任务;0007根据任务的实时状态对实时队列中的任务进行调度。0008所述任务模板至少包括任务模板标识ID,用于唯一标识任务模板;0009任务模板名称,不同任务模板ID对应不同的任务模板名称;以及,0010插件,用于通过任务调度动态加载任务。0011所述任务模块还包括说明书CN104166590A2/12页70012内容为命令的组合的模板配置;和/或,0013所述任务执行时,通过所述插件的执行函数传入的参。
20、数列表;和/或,0014对所述插件工作的输出进行分析的策略;和/或,0015用于根据任务的执行结果驱动任务的下一个环节的完成的结果响应。0016所述根据任务的实时状态对任务进行调度为对所述任务模板的各组成逐步装载、运用根据创建的任务实例启动工作线程,动态加载所述插件;任务成功执行后结束工作线程并销毁成功执行的任务。0017所述任务模板的各组成逐步装载、运用还包括调用插件的执行函数,传递模板配置参数,和/或参数列表中的参数,和/或策略信息,解析并处理参数。0018所述插件的接口包括执行函数、暂停函数、重试函数、中断函数。0019所述任务模板中包括有模板配置;所述模板配置使用任务调度引擎内置的宏,。
21、以及可变的外置宏。0020所述任务模板中包含有参数列表;所述参数列表中的参数为固定值的参数,和/或可变值的参数;0021所述可变值的参数中包含有参数宏及参数语句。0022所述任务模板中包含有策略;所述策略的格式为可扩展标记语言XML格式、或初始化文件INI格式、或数据配置文件DAT格式、或轻量级数据交换JSON格式,或二进制格式。0023所述任务模板中包含有结果响应;所述结果响应为操作函数。0024该方法还包括监测正在执行的任务的状态,记录其进度和完成情况0025如果所述实时队列中的任务执行成功,将该任务从实时队列中删除;0026如果所述实时队列中的任务执行失败,根据任务失败的间隔时间以及重试。
22、次数的限制,决定是否重新执行。0027所述是否重新执行具体包括判断所述重试次数是否超过预设重试次数阈值,在未超过重试次数阈值时,判断所述间隔时间是否超过预设重试间隔阈值,如果超过重试间隔阈值,则重新执行该任务;0028如果判断出所述重试次数已超过重试次数阈值,则不再执行该任务;0029如果判断出所述重试次数未超过重试次数阈值,所述间隔时间未超过重试间隔阈值,则暂时不执行该任务。0030该方法包括对所述不再执行的任务做镜像处理,将该任务从实时队列中删除。0031所述删除任务包括记录所述任务及其执行结果、销毁任务实例,并将该任务从实时任务队列中删除,更新用于记录该任务执行次数的计数器。0032该方。
23、法之前还包括根据预先配置的看门狗的状态,决定是否重新开始对任务的调度。0033当执行所述任务时,该方法还包括查询当前正在执行的任务队列的长度,0034如果当前的队列长度小于预先设置的队列长度阈值,则直接执行所述任务;如果当前队列的长度已超过队列长度阈值,则不执行所述任务。0035该方法之前还包括判断任务调度引擎是否被暂停,若被暂停,不检查自动任务队列;说明书CN104166590A3/12页80036否则,检查自动任务队列并执行时刻表中所有时刻不晚于当前时刻的任务。0037在任务调度引擎中,预先设置有用于存放连续失败任务的连续失败任务队列,以及,任务连续失败后自动转入暂停状态的次数阈值,和任务。
24、暂停后重新尝试性探测的预设重试时间窗;该方法还包括0038在当前任务要执行前,如果判断出连续失败任务队列中存在该当前任务,则获取当前要执行的任务的连续失败次数和最后执行时间;0039在连续失败次数大于预设次数阈值,且当前时间与最后执行时间的差小于重试时间窗时,退出当前任务;0040在连续失败次数小于预设次数阈值时,执行当前准备要执行的任务;0041在连续失败次数大于预设次数阈值,且当前时间与最后执行时间的差大于重试时间窗时,执行当前准备要执行的任务。0042在所述任务执行成功后,该方法还包括重置该任务的连续失败次数清零,最后执行时间设置为当前时间。0043在所述任务执行失败后,该方法还包括将所。
25、述任务的连续失败次数加一,最后执行时间设置为当前时间。0044本申请还提供一种实现任务调度的系统,包括接口与适配单元、任务调度引擎,以及任务实例单元,其中,0045接口与适配单元,用于获取来自外部的人工任务;0046任务实例单元,用于根据任务启动时传递的参数,并按照执行响应的顺序,完成赋予该任务的工作内容;将任务执行过程中的实时状态与进度信息上报给任务调度引擎;0047任务调度引擎,用于利用采用插件实现的任务模板创建任务,并根据任务的实时状态对任务进行调度。0048所述任务调度引擎包括任务创建模块和任务执行模块,其中,0049任务创建模块,用于利用采用插件实现的任务模板创建任务;0050任务执。
26、行模块,具体用于根据创建的任务实例启动工作线程,动态加载插件,任务成功执行后结束工作线程并销毁成功执行的任务。0051所述任务模板至少包括0052任务模板ID,用于唯一标识任务模板;0053任务模板名称,不同任务模板ID对应不同的任务模板名称;以及,0054插件,用于通过任务调度动态加载任务。0055所述任务模板还包括0056用于包含命令的组合的模板配置;和/或,0057任务执行时,通过执行函数传入的参数列表;和/或,0058用于对插件工作的输出进行分析的策略;和/或,0059用于根据任务的执行结果驱动任务的下一个环节的完成的结果响应。0060所述任务执行模块还用于,调用插件的执行函数,以传递。
27、模板配置参数,和/或参数列表中的参数,和/或策略信息,解析并处理参数。0061所述任务执行模块配置有看门狗,还用于在看门狗的状态为真时进入任务调度。0062所述接口与适配单元还用于,接收来自外部对任务调度引擎的控制指令,获取任说明书CN104166590A4/12页9务调度引擎的状态;0063所述任务执行模块,还用于在接收到的来自接口和适配单元的控制指令为暂停时,不检查自动任务队列;0064在接收到的来自接口和适配单元的控制指令为继续时,检查自动任务队列并执行时刻表中所有时刻不晚于当前时刻的任务。0065所述任务执行模块,还用于在执行一个新任务时,查询当前正在执行的任务队列的长度,在当前的队列。
28、长度小于预先设置的队列长度阈值时,直接执行该任务;在当前队列的长度已超过队列长度阈值时,不执行该任务。0066所述任务调度引擎还包括任务监测模块,用于监测正在执行的任务的状态,记录其进度和完成情况,在所述实时队列中的任务执行成功时,将该任务从实时队列中删除;0067在所述实时队列中的任务执行失败时,根据任务失败的间隔时间以及重试次数的限制,决定是否重新执行。0068所述任务监测模块具体用于在任务执行失败时,0069判断重试次数是否超过预设重试次数阈值,在未超过重试次数阈值时,进一步判断间隔时间是否超过重试间隔阈值,如果超过重试间隔,重新执行该任务;如果判断出该任务的重试次数已超过重试次数阈值,。
29、则不再执行该任务;如果判断出该任务的重试次数未超过重试次数阈值且间隔时间也未超过重试间隔阈值,则暂时不执行该任务;0070对于成功执行的任务,记录任务及其执行结果、销毁任务实例,并将该任务从实时任务队列中删除,更新用于记录任务执行次数的计数器。0071所述任务执行模块进一步用于,将所述不再执行的任务的信息做镜像处理,删除该任务。0072所述任务调度引擎还包括自动运维模块;在自动运维模块中,预先设置有用于存放连续失败任务的连续失败任务队列,以及,任务连续失败后自动转入暂停状态的次数阈值,和任务暂停后重新尝试性探测的预设重试时间窗;0073所述自动运维模块用于,0074在当前任务要执行前,如果连续。
30、失败任务队列中存在该当前任务,则获取当前要执行的任务的连续失败次数和最后执行时间,0075在连续失败次数大于预设次数阈值,且当前时间与获得的最后执行时间的差小于重试时间窗时,退出当前任务;0076在连续失败次数小于预设次数阈值时,执行当前准备要执行的任务;0077在连续失败次数大于预设次数阈值,且当前时间与获得的最后执行时间的差大于重试时间窗时,执行当前准备要执行的任务。0078所述自动运维模块还用于,在任务执行成功后,重置所述任务的连续失败次数清零,最后执行时间设置为当前时间。0079所述自动运维模块还用于,在任务执行失败后,将该所述任务的连续失败次数加一,最后执行时间设置为当前时间。008。
31、0本申请提供的方案包括利用采用插件实现的任务模板创建任务,根据任务的实时状态对任务进行调度。本申请通过利用采用插件实现的任务模板创建的任务,增强了任务的可扩展性,是一种通用性任务的创建方式;并且,由于任务模板中的插件,以及模板配置、说明书CN104166590A5/12页10和/或参数列表、和/或策略、和/或结果响应的相互独立性及可扩展性,而且它们之间可以做排列组合,因此,极大地实现了各个组件的重用,大大增强了任务的可扩展性,保证了本申请实现任务调度的方法的通用性,从而大大增强了触发事件的可扩展性,提高了工作效率,降低了工作成本。0081另外,本申请通过自动运维过程,在任务执行失败时,任务调度。
32、引擎自动对这一类任务进行管控,避免了失败的任务堆积而对正常任务运行的影响;而且,通过对失败任务的定期执行的尝试,使得失败任务重新进入正常的调度过程,从而节约了资源、提高了效率、避免了人工干预。0082本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明0083附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。0084图1为本申请实现任务调度的方法的流程。
33、图;0085图2为本申请实现自动运维过程的流程示意图;0086图3为本申请实现任务调度的系统的组成结构示意图。具体实施方式0087为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。0088在本申请一个典型的配置中,计算设备包括一个或多个处理器CPU、输入/输出接口、网络接口和内存。0089内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器RAM和/或非易失性内存等形式,如只读存储器ROM或闪存FLASHRAM。内存是计算机可读介质的示例。0090计算机可读介质包。
34、括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存PRAM、静态随机存取存储器SRAM、动态随机存取存储器DRAM、其他类型的随机存取存储器RAM、只读存储器ROM、电可擦除可编程只读存储器EEPROM、快闪记忆体或其他内存技术、只读光盘只读存储器CDROM、数字多功能光盘DVD或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体TRANSITOR。
35、YMEDIA,如调制的数据信号和载波。0091在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺说明书CN104166590A106/12页11序执行所示出或描述的步骤。0092目前,在实际应用中,大多数情况还是使用基于时间、周期的任务调度触发点。按照时间标准来触发任务,这时可以单独调度一个任务来按周期同步时间,以保证触发点的具有一个准确的时间标准。一种通用型的任务调度有QUARTZ,QUARTZ是一个开源的作业调度框架,完全由JAVA写成,并设计用于J2SE和J2EE应用中。QUARTZ提供了巨。
36、大的灵活性而不牺牲简单性。可以用QUARTZ来为执行一个作业而创建简单的或复杂的调度。QUARTZ有很多特征,比如数据库支持,集群,插件,EJB作业预构建,JAVAMAIL及其它,支持CRONLIKE表达式等。另外,还有CRON4J,CRON4J是一个JAVA的任务调度框架,类似于UNIX系统下的CRONTAB。0093现有实现任务调度的技术方案多以各种时间规律来触发事件,支持各种时间规律或频率的调度方案。但是,在触发的事件类型上,比较狭窄,一般都只是对预先设置好的、固定的一些触发事件可以驱动。即便对于通用型的任务调度程序如QUARTZ,其触发事件扩展性也仍不够理想,这样无疑降低了工作效率,增。
37、加了工作成本。此外,现有的一些实现任务调度的解决方案中,在大量任务运行过程中,一旦出现错误造成任务大量失败时,都必须通过人工干预、排查问题后才能继续运行;如果没有人工干预,大量正常的任务也将受到影响。对于问题的解决造成了效率低、成本高等。0094图1为本申请实现任务调度的方法的流程图,如图1所示,包括0095步骤100利用采用插件实现的任务模板创建任务。0096本申请中的任务衍生于任务模板,新的任务被创建,意味着它会继承任务模板的所有属性。任务模板至少包括任务模板标识ID,用于唯一标识任务模板;任务模板名称,不同任务模板ID对应不同的任务模板名称;以及插件,用于通过任务调度动态加载任务,其接口。
38、符合预设要求。0097由于插件是一个动态加载的模块,因此,插件可以根据需要临时编写,只要按照预先设置的接口要求编写即可。插件的接口可以是执行WORK、暂停PAUSE、重试RESUME、中断TERMINATE四个函数。不同的插件,任务被执行时体现出来的功能是完全不同的。本申请中,可以根据对插件的编写,方便地对触发事件进行扩展。需要说明的是,对于利用插件来创建任务是本领域技术人员的惯用技术手段,其具体实现方法也不用于限定本申请的保护范围,本申请要强调的是,在任务调度中,利用采用插件实现的任务模板来创建任务,增强了任务的可扩展性。0098进一步地,任务模板还可以包括模板配置、和/或参数列表、和/或策。
39、略、和/或结果响应;其中,0099模板配置的内容是命令的组合,模板配置可以是以TPL为扩展名的文件。在实际使用中,可以根据需要编写模板配置文件的内容。也就是说,同样的插件,不同的模板配置,其任务的功能是不一样的,从而进一步增强了任务的可扩展性。0100在模板配置中,可以使用任务调度引擎内置的几个宏,如表1所示说明书CN104166590A117/12页1201010102表10103模板配置中除了使用表1中所示的宏外,还可以使用可变的外置宏,其中国,外置宏用于将任务模板中的参数实例化后,传递到TPL文件中。外置宏的格式可以为N;其中N为0,1,2。在参数列表中,第一个参数为0,第二个参数为1,。
40、以此类推。插件在使用TPL文件时,会自动将不同位置的外置宏,准确地用参数列表中真正的参数值替换。0104参数列表是在任务执行时,通过WORK函数传入的参数列表。参数列表可以继续传入TPL文件,以控制、实例化TPL文件,也可以完全与TPL文件无关。参数列表中的参数具体如何使用,完全由插件来决定,而且,参数可以分为固定值的参数,和/或可变值的参数。其中,0105固定值的参数,是指参数的值是固定不变的,比如H127001P8080”ABC”等,其中五个参数的值固定,分别是H、127001、P、8080、”ABC”。此时,输入的值在传递过程中不会发生任何变化;0106而可变值的参数,是指参数中包含参数。
41、宏及参数语句。此时,输入的值在传递过程中,会从形式参数转换为实质参数,被实例化为不同的值。比如0107宏名称作用RANDOM0100的随机数NOWSYYYYMMDDHHMMSS格式的时间NOWU整数格式的时间Y当前时间中的年M当前时间中的月说明书CN104166590A128/12页13D当前时间中的日H当前时间中的小时M当前时间中的分钟S当前时间中的秒01080109表20110当参数列表中的参数中包含表2中与时间相关的参数时,任务调度引擎会自动从任务的预约时刻中提取相应的值。可以看出,即便插件、模板配置固定,参数列表也能产生出许多不同的变化,从而形成完全不一样的任务,从而进一步增强了任务的。
42、可扩展性。0111策略,用于对插件的输出进行分析。在插件开发过程中,策略可以采用任意格式、任意形态,比如可扩展标记语言XML格式、或初始化文件INI格式、或数据配置文件DAT格式、或轻量级数据交换JSON,JAVASCRIPTOBJECTNATATION格式,或二进制等。无论策略采用什么形式,都不影响任务调度引擎对策略的调度与管理,因为真正理解并能解析策略的是插件,而插件是动态开发和新增的。通过策略在整个任务处理流程的介入,进一步增强了任务的可扩展性。0112结果响应,是在任务的工作末期被调用的,可根据任务的执行结果驱动任务的下一个环节的完成。结果响应也是一个动态加载的模块,但结果响应只有一个。
43、操作ACTION函数。可以根据实际需要,新增或者改编结果响应,实现所需要的任意动作,从而进一步增强了任务的可扩展性。0113本步骤中,通过利用采用插件实现的任务模板创建的任务,增强了任务的可扩展性,是一种通用性任务的创建方式;并且,由于任务模板中的插件、模板配置、参数列表、策略及结果响应的相互独立性及可扩展性,而且它们之间可以做排列组合,因此,极大地实现了各个组件的重用,从而大大增强了任务的可扩展性,保证了本申请实现任务调度的方法的通用性。0114步骤101根据任务的实时状态对实时队列中的任务进行调度。0115对任务进行调度即任务被执行,实际上就是任务模板的各组成被逐步装载、运用的过程,大致包。
44、括根据步骤100中创建的任务所包含的任务实例启动工作线程;动态加载插件,任务成功执行后结束工作线程并销毁成功执行的任务。需要说明的是,本领域技术人员熟知,一个任务可以由一个或一个以上的任务实例组成。0116调度的开始可以根据时刻表触发,也可以根据人工触发,其中,时刻表是根据用于安排计划被调度的任务的计划任务表创建的;人工触发的任务是通过底层通信由外部接口获得的。0117进一步地,还包括调用插件的WORK函数,以传递模板配置参数,和/或参数列表中的参数,和/或策略信息,解析并处理参数;读取模板配置及使用策略,调用ACTION函数以加载结果响应;任务成功执行后结束工作线程并销毁成功执行完的任务。0。
45、118在任务的调度过程中,本申请方法还包括监测正在执行的任务的状态,记录其进说明书CN104166590A139/12页14度如重试次数等和完成情况如执行成功或执行失败等,如果实时队列中的任务成功执行完成,那么,将任务从实时队列中删除,即进行任务清理,主要包括将任务及其执行结果记录到数据库、销毁任务实例,并将该任务从实时任务队列中删除,然后更新用于记录该任务执行次数的计数器;0119如果任务执行失败,那么,根据任务失败的间隔时间即上次失败执行的时间与当前时间的间隔时长以及重试次数的限制,确定是否重新执行该任务。具体包括判断重试次数是否超过预设重试次数阈值,在未超过重试次数阈值时,进一步判断间隔。
46、时间是否超过预设重试间隔阈值,如果超过重试间隔阈值,则立即重试即重新执行该任务;如果判断出已超过重试次数阈值,那么,不再执行该任务。如果未超过重试次数阈值也未超过重试间隔阈值,则暂时不执行该任务,将其放回实时队列中继续等待。0120为了备忘或者将来调测,本申请方法进一步包括将不再执行的任务的全部信息DUMP即做镜像处理至一个文件中,然后对该任务进行任务清理,主要包括将任务及其执行结果记录到数据库、销毁任务实例,并将该任务从实时任务队列中删除,然后更新用于记录该任务执行次数的计数器。0121在执行任务过程中,任务调度引擎进一步根据实时任务队列当前的长度,进行并发任务控制,也就是控制同时执行的任务。
47、的总数。每当执行一个新任务,总是先查询一下当前正在执行的任务队列的长度,如果当前的队列长度小于预先设置的队列长度阈值任务队列所能允许的最大长度值,则直接执行该任务;如果当前队列的长度已超过队列长度阈值,那么本轮不会执行该任务。0122本步骤之前还进一步包括根据配置看门狗的状态即真/假TRUE/FALSE决定是否重新载入计划任务表并根据当前载入的计划任务表生成最新的时刻表。关于看门狗的应用属于本领域技术人员的惯用技术手段,具体实现可以通过硬件或软件实现,这里不再赘述,本申请方法中就是利用看门狗,在其状态为真时,重载入计划任务表,并根据当前载入的计划任务表生成最新的时刻表,并按照最新的时刻表触发调。
48、度的开始,以重新开始对任务的调度。0123进一步地,本申请方法还包括根据来自外部的控制指令判断任务调度引擎是否被暂停,如果被暂停,则不检查自动任务队列;否则,检查自动任务队列并执行时刻表中所有时刻不晚于当前时刻的任务。0124需要说明的是,任务调度引擎可以优先检查手工任务队列,即只要手工任务队列中存在任务则立即执行。0125作为任务调度引擎,每时每刻所调度的自动任务必然是数量繁多,种类多样的。而任务出现各种各样的问题或者失败,几乎就不可避免。一旦任务大量失败,失败的任务就会不断的重试,占据了实时任务的队列。鉴于同一时刻能并发执行的任务总数是受限的,则必然存在大量的任务排队等候,造成任务拥堵;即。
49、使有的类型的任务不会失败,也会因为其它类型的失败任务挤占实时任务而无法执行。因此,本申请方法还包括确定是否执行即将被执行的任务的自动运维过程。0126图2为本申请实现自动运维过程的流程示意图,在任务调度引擎中,预先设置有用于存放连续失败任务的连续失败任务队列,以及,任务连续失败后自动转入暂停状态的次数阈值,和任务暂停后重新尝试性探测的预设重试时间窗。这两个阀值可以设置在配置说明书CN104166590A1410/12页15文件中;如图2所示,包括以下步骤0127步骤200在当前任务自动任务队列中的任务要执行前,根据任务ID,查找连续失败任务队列中是否存在任务ID一致的连续失败任务,如果存在进入步骤201;否则进入步骤205。0128步骤201获取当前要执行的任务的连续失败次数和最后执行时间。0129步骤202判断获得的连续失败次数是否大于预设次数阈值,如果大于则进入步骤203;否则进入步骤2050130步骤203判断当前时间与获得的最后执行时间的差是否小于重试时间窗,如果小于则进入步骤204;否则进入步骤205。0131需要说明的是,此时执行的任务是进入自动运维过程后,进行尝试性的探测执行的任务。因此,在任务的连续失败次数是否大于预设次数阈值,但是当前时间与该任务的最后执行时间的差大于重试时间窗时,在自动运维过程中,需要对该任务进行探。