集群任务的处理方法和装置与流程

文档序号:12664933阅读:170来源:国知局
集群任务的处理方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种集群任务的处理方法和装置。



背景技术:

随着云服务的普及,越来越多信息需要进行云计算。为了提升云服务的每秒查询率(Query Per Second,QPS)性能,需要将大量的接口异步化。而异步化常用的技术之一就是定时任务。

而传统定时任务基本都是汇总在专门的一台服务器,或者跟随着业务部署在不同业务的某台机器上。汇总在一台服务器,虽然节省了管理监控任务成本,但会导致定时任务增多,同一时刻需要执行的任务很多,带来服务器的负载开销,而且各任务如果有依赖关系,则会导致任务阻塞。而分散在业务服务器,会出现任务卡死,进程异常等现象,无法确保每个任务都成功执行。

随着定时任务增多,同一时刻需要执行的任务很多,带来服务器的负载开销,而且各任务如果有依赖关系,则会导致任务阻塞。因此如何高效的将大量的定时任务快速执行称为亟待解决的问题。



技术实现要素:

本发明提供一种集群任务的处理方法和装置,用于解决随着定时任务增多,同一时刻需要执行的任务很多,带来服务器的负载开销,而且各任务如果有依赖关系,则会导致任务阻塞的问题,实现高效的将大量的定时任务快速执行。

本发明第一方面提供一种集群任务的处理方法,包括:

将定时任务按照周期类别分别设置在不同的执行队列;

在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记;

当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

可选的,所述执行周期类别包括:

每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

可选的,所述在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记,包括:

将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行;

其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。

可选的,所述根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行,包括:

获取每个定时任务对应的执行权重;

当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一;

当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

可选的,所述方法还包括:

若存在执行队列的执行时间大于所述执行周期,则设置锁;所述锁用于保证所述执行队列的所有任务执行完后再进行下一次轮询执行。

本发明第二方面提供一种集群任务的处理装置,包括:

第一处理模块,用于将定时任务按照周期类别分别设置在不同的执行队列;

第二处理模块,用于在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记;

第三处理模块,用于当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

可选的,所述执行周期类别包括:

每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

可选的,所述第二处理模块具体用于:

将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行;

其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。

可选的,所述第三处理模块具体用于:

获取每个定时任务对应的执行权重;

当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一;

当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

可选的,所述装置还包括:

第四处理模块,用于确定若存在执行队列的执行时间大于所述执行周期时设置锁;所述锁用于保证所述执行队列的所有任务执行完后再进行下一次轮询执行。

本发明第三方面提供一种设备,包括:用于控制可执行指令执行的处理器以及用于存储处理器可执行指令的存储器;

所述处理器用于:

将定时任务按照周期类别分别设置在不同的执行队列;

在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记;

当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

可选的,所述执行周期类别包括:

每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

可选的,所述处理器具体用于:

将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行;

其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。

可选的,所述处理器具体用于:

获取每个定时任务对应的执行权重;

当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一;

当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

可选的,所述处理器还用于:

若存在执行队列的执行时间大于所述执行周期,则设置锁;所述锁用于保证所述执行队列的所有任务执行完后再进行下一次轮询执行。

本发明实施例提供的集群任务的处理方法和装置,通过将所有的定时任务按照周期类别分别设置在不同的执行队列,在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记,当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行,拆解了不通类别定时任务队列池,大大缩短了队列池轮循时间,提升了执行效率。

附图说明

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

图1为本发明实施例提供的集群任务的处理方法实施例一的流程图;

图2为本发明实施例提供的集群任务的处理方法实施例二的流程图;

图3为本发明实施例提供的集群任务的处理装置实施例一的结构示意图;

图4为本发明实施例提供的集群任务的处理装置实施例二的结构示意图;

图5为本发明实施例提供的设备的结构示意图。

具体实施方式

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

图1为本发明实施例提供的集群任务的处理方法实施例一的流程图,如图1所示,该方案的执行主体为集群服务器等进行集群任务处理的设备,该集群任务的处理方法的具体实现步骤为:

步骤S101,将定时任务按照周期类别分别设置在不同的执行队列。

在本步骤中,获取到所有的定时任务,即将所有的定时任务按照约定规则进行录入,录入定时任务的约定规则包括:按照用户组运行录入、按照执行时间录入、按照执行脚本录入或者按照执行完毕后返回约定的状态码进行录入。

在获取到所有的要执行的定时任务之后,按照周期类别将所有的定时任务进行分组,分别设置在不同的执行队列中,每个执行队列中的定时任务的周期类别相同。

该方案中,执行周期类别包括:每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

步骤S102,在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记。

在本步骤中,在对定时任务进行分类之后,根据一定的时间参数对任务进行初始化,然后按照不同的队列进行轮询执行,在该过程中,在一个执行周期内,可将已经执行过的定时任务进行标记,以使在下次轮询到该定时任务时,能够判断该定时任务是否已经被执行过了,不需要重复执行。例如:某定时任务每小时执行一次,那么在执行周期为一小时时,若该定时任务第一次被执行完成,则需要增加标记,若在一小时内第二次轮询至该定时任务,则可以直接通过该标记直接跳过该任务执行下一个定时任务。若某定时任务是在每分钟执行一次,则在一个小时的执行周期内需要执行六十次,则需要标记出已经执行的次数,以便后续能够判断该任务的执行次数,避免已经执行完之后还需要再次轮询。

步骤S103,当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

在本步骤中,根据前述的方案,通过每个定时任务的标记,则在一个执行周期内对执行队列中已经完成执行的直接跳过,将执行队列中还需要再执行的任务继续进行处理,提升执行效率。

本实施例提供的集群任务的处理方法,通过将所有的定时任务按照周期类别分别设置在不同的执行队列,在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记,当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行,拆解了不通类别定时任务队列池,大大缩短了队列池轮循时间,提升了执行效率。

图2为本发明实施例提供的集群任务的处理方法实施例二的流程图,如图2所示,在上述方案中,步骤S102的一种具体执行方案为:将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行,其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。据此,上述步骤S103的实现过程为:

步骤S201:获取每个定时任务对应的执行权重。

在该方案中,可以预先对每个定时任务配置执行权重,该权重的初始值一般可以配置为在执行周期内的执行次数,在每次队列轮询执行到该定时任务时,均需要获取该定时任务的执行权重,以确定后续的操作。

步骤S202:当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一。

步骤S203:当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

在本步骤中,定时任务每执行一次,则其执行权重减一,按照该方法在执行周期内按照队列依次进行轮询执行,并在每次轮询到该定时任务时确定其的执行权重的大小,执行权重等于零,则确认该任务已经被执行完成,在该执行周期内不需要再进行处理,执行权重大于零,则确认该任务还需要被执行,并在执行完后将该任务的执行权重减一,以此类推。

在上述两个实施例的基础上,下面以一实例对该集群任务的处理方案进行说明。

定时任务举例脚本:10/*0 0**root sh/opt/cron.Sh(十分钟执行一次)

1、将所有的定时任务按照约定规则进行录入(约定规则比如以什么用户组运行,什么时间执行,执行什么脚本,执行完毕后返回约定的状态码)。

2、对所有定时任务进行分类,整理(由于定时基本都为周期性任务,因此可以根据周期类别分别设置不同的队列。将月份的、星期的、每天的,每小时的、每分钟的粒度进行分别初始化到不同队列。本实例主要针对分钟级别最细粒度优化,其他类别同理。)

3、根据设置的时间参数,于每天0点触发,进行任务初始化。将分钟队列按照设定时间,用户组,脚本命令,执行脚本ms级别耗时consume,执行权重poll(值为周期性任务计算所得,举例脚本60/10=6,则poll=6),最后执行时间参数进行初始化。

4、利用定时任务进行小时脚本轮循,其中轮循只读取poll值大于0的,等于0则认为该定时任务已经执行完毕,1天内不需要再重复执行。每执行一次,就将poll值减一,并且修改最后执行时间。如果poll值相同,则按照最后执行最后再插入原则,修改轮循队列。来保证轮循队列只需要按照队列顺序先后执行即可。此外,对于执行耗时大于定时轮循耗时的,需要额外加锁,来保证上一任务执行完毕后才开始下一轮的任务执行。对于非分钟类别周期性脚本,则就按照有分钟值大小从小到大插入队列。

5、根据不同脚本类别,同一时刻可以异步进行分别轮循,这样既减少了传统所有类有都在一个队列池轮循带来的额外开销,又能保证不再需要重复执行的任务进行归零。

6、记录每次定时任务执行时间和状态,如果执行时间超出波动范围值,则进行报警提醒,如果执行状态异常,则自动进行retry重试。

该方案通过大量汇总定时任务执行至少需要更大队列池的轮循,散列业务方式又不好监控每个任务是否成功执行,而采用本策略,拆解了不通类别定时任务队列池,大大缩短了队列池轮循时间,提升了执行效率。

图3为本发明实施例提供的集群任务的处理装置实施例一的结构示意图,如图3所示,本实施例提供的集群任务的处理装置10包括:

第一处理模块11,用于将定时任务按照周期类别分别设置在不同的执行队列;

第二处理模块12,用于在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记;

第三处理模块13,用于当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

可选的,所述执行周期类别包括:

每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

可选的,所述第二处理模块12具体用于:

将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行;

其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。

可选的,所述第三处理模块13具体用于:

获取每个定时任务对应的执行权重;

当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一;

当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

本实施例提供的集群任务的处理装置,用于执行前述任一实施例提供的方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。

图4为本发明实施例提供的集群任务的处理装置实施例二的结构示意图,如图4所示,所述集群任务的处理装置10还包括:

第四处理模块14,用于确定若存在执行队列的执行时间大于所述执行周期时设置锁;所述锁用于保证所述执行队列的所有任务执行完后再进行下一次轮询执行。

本实施例提供的集群任务的处理装置,用于执行前述任一实施例提供的方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。

图5为本发明实施例提供的设备的结构示意图,如图5所示,本发明还提供一种用于处理集群任务的设备,该设备包括:用于控制可执行指令执行的处理器以及用于存储处理器可执行指令的存储器;

所述处理器用于:

将定时任务按照周期类别分别设置在不同的执行队列;

在每个执行队列中,将在执行周期内已经执行过的定时任务进行标记;

当所述执行队列下次轮询时,根据每个定时任务的标记,获取在所述执行周期内还未执行的任务进行执行。

可选的,所述执行周期类别包括:

每分钟执行一次、每小时执行一次、每天执行一次、每周执行一次或者每个月执行一次。

可选的,所述处理器具体用于:

将所述执行队列中的定时任务,按照执行周期、用户组、脚本命令和执行权重进行执行;

其中,所述执行权重用于标识所述任务的执行次数;所述执行队列中每个定时任务的执行权重的初始值为预设时长内的总执行次数,每执行一次所述定时任务,所述执行任务对应的执行权重值减一。

可选的,所述处理器具体用于:

获取每个定时任务对应的执行权重;

当所述执行权重大于零时,则执行所述定时任务,并将所述定时任务的执行权重值减一;

当所述执行权重等于零时,则确定所述执行任务在所述执行周期内已执行完成。

可选的,所述处理器还用于:

若存在执行队列的执行时间大于所述执行周期,则设置锁;所述锁用于保证所述执行队列的所有任务执行完后再进行下一次轮询执行。

本实施例提供的设备,用于执行前述任一实施例提供的方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。

在上述设备的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetic tape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1