延时任务执行方法、装置及电子设备转让专利

申请号 : CN201910332861.2

文献号 : CN110032438A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄添来贾利阳

申请人 : 北京高途云集教育科技有限公司

摘要 :

本申请涉及信息技术领域,涉及一种延时任务执行方法、装置及电子设备。该延时任务执行方法包括:按预设时间间隔依次轮询循环队列中包括的多个槽位,槽位用于储存延时任务的触发信息,触发信息包括剩余轮询次数和任务处理信息;针对每个正在被询问的槽位,将槽位中储存的延时任务的触发信息作为目标信息,并判断目标信息中剩余轮询次数的值是否为约定数值;若目标信息中剩余轮询次数的值为约定数值,则从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务。通过本申请实施例提供的延时任务执行方法、装置及电子设备能够确保延时任务的准时执行。

权利要求 :

1.一种延时任务执行方法,其特征在于,包括:

按预设时间间隔依次轮询循环队列中包括的多个槽位,所述槽位用于储存延时任务的触发信息,所述触发信息包括剩余轮询次数和任务处理信息;

针对每个正在被询问的槽位,将所述槽位中储存的延时任务的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值;

若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。

2.根据权利要求1所述的延时任务执行方法,其特征在于,所述若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:若所述目标信息中剩余轮询次数的值为所述约定数值,则获得服务器集群包括的多个节点中的每个节点的资源占用系数;

根据每个节点的资源占用系数,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。

3.根据权利要求2所述的延时任务执行方法,其特征在于,所述根据每个节点的资源占用系数,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:获得所述多个节点中的每个节点的地址信息;

针对每个节点,以所述节点的资源占用系数为值,所述节点的地址信息为键,通过预设选举算法获得每个节点的选举参考数据;

根据所述多个节点中每个节点的选举参考数据,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。

4.根据权利要求1所述的延时任务执行方法,其特征在于,所述若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:若所述目标信息中剩余轮询次数的值为所述约定数值,则从服务器集群包括的多个节点中选取出目标节点,以使所述目标节点为与所述目标信息对应的延时任务添加任务锁,并根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务;

在所述延时任务执行完成之后,使所述目标节点释放所述任务锁,并将所述延时任务的触发信息从所述槽位中删除。

5.根据权利要求1所述的延时任务执行方法,其特征在于,所述针对每个正在被询问的槽位,将所述槽位中储存的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值之后,所述延时任务执行方法,还包括:若所述目标信息中剩余轮询次数的值未达到所述约定数值,则对所述目标信息中的剩余轮询次数进行更新。

6.根据权利要求1所述的延时任务执行方法,其特征在于,所述延时任务执行方法,还包括:接收待执行任务之后,获得所述待执行任务的任务生成信息,所述任务生成信息包括待执行任务的延时时长和任务处理信息,所述待执行任务为生成的任一延时任务;

根据所述延时时长、所述循环队列中槽位的数量、所述预设时间间隔,以及正在被询问的槽位,获得与所述待执行任务对应的剩余轮询次数和槽位,并将与所述待执行任务对应的槽位作为目标槽位;

将所述剩余轮询次数和所述任务处理信息作为所述待执行任务的触发信息,并储存于所述目标槽位。

7.根据权利要求6所述的延时任务执行方法,其特征在于,所述接收待执行任务之后,获得所述待执行任务的任务生成信息,包括:接收待执行任务之后,获得所述待执行任务的指定执行时间和执行逻辑;

获得所述指定执行时间与当前时间的时间差值,作为所述待执行任务的延时时长;

将所述执行逻辑储存于预设分布式储存系统后,创建所述执行逻辑的检索标识,以将所述检索标识作为所述任务处理信息;

将所述延时时长和所述任务处理信息作为所述待执行任务的任务生成信息。

8.一种延时任务执行装置,其特征在于,包括:

轮询模块,用于按预设时间间隔依次轮询循环队列中包括的多个槽位,所述槽位用于储存延时任务的触发信息,所述触发信息包括剩余轮询次数和任务处理信息;

判断模块,用于针对每个正在被询问的槽位,将所述槽位中储存的延时任务的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值;

执行模块,用于在所述目标信息中剩余轮询次数的值为所述约定数值时,从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。

9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器上存储有计算机程序,所述处理器用于执行所述存储器中的所述计算机程序,以实现权利要求1-7中任一项所述的延时任务执行方法。

10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被执行时,可实现权利要求1-7中任一项所述的延时任务执行方法。

说明书 :

延时任务执行方法、装置及电子设备

技术领域

[0001] 本申请涉及信息技术领域,具体而言,涉及一种延时任务执行方法、装置及电子设备。

背景技术

[0002] 在应用开发过程中,经常会遇到需要在指定时间到来时去执行相应延时任务的业务需求。例如,订单提交之后,若超过指定支付时间未支付成功,则需要将该订单删除,再例如,订单完成之后,若超过指定评价时间未及时评价,则默认将该订单的评价设置为五星好评,又例如,代金券等虚拟网络资源在被激活之后,若超过指定使用时间未被使用,则自动作废。
[0003] 目前,针对此类业务需求,在一些实施方式中,会在接收到延时任务之后,将延时任务的触发信息存储于数据库,同时,通过定时任务周期性的去扫描该数据库,以检测是否存在需要执行的延时任务,若存在需要执行的延时任务,则一次性批量执行。这种方法存在的问题是,会导致延时任务的执行时间滞后。因此,如何确保延时任务能够准时执行,成为信息技术领域亟待解决的技术难题。

发明内容

[0004] 本申请实施例的目的在于提供一种延时任务执行方法、装置及电子设备,用以实现确保延时任务能够准时执行的技术效果。
[0005] 第一方面,本申请实施例提供了一种延时任务执行方法,所述延时任务执行方法,包括:
[0006] 按预设时间间隔依次轮询循环队列中包括的多个槽位,所述槽位用于储存延时任务的触发信息,所述触发信息包括剩余轮询次数和任务处理信息;
[0007] 针对每个正在被询问的槽位,将所述槽位中储存的延时任务的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值;
[0008] 若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0009] 本申请实施例提供的延时任务执行方法,通过按预设时间间隔依次轮询循环队列中包括的多个槽位,针对每个正在被询问的槽位,将该槽位中储存的延时任务的触发信息作为目标信息,并在判断出目标信息中剩余轮询次数的值为约定数值时,从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务,这种延时任务执行方法采用了循环队列实现延时任务的触发控制,因此,延时任务的执行是主动触发的,相对于现有技术中,通过定时任务周期性的去扫描数据库,以检测是否存在需要执行的延时任务,若存在需要执行的延时任务,则一次性批量执行的实施方式而言,能够确保延时任务的准时执行。
[0010] 结合第一方面,本申请实施例提供了第一方面的第一种可能的实施方式,其中,所述若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:
[0011] 若所述目标信息中剩余轮询次数的值为所述约定数值,则获得服务器集群包括的多个节点中的每个节点的资源占用系数;
[0012] 根据每个节点的资源占用系数,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0013] 进一步地,本申请实施例提供的延时任务执行方法,还可以获得服务器集群包括的多个节点中的每个节点的资源占用系数,并根据多个节点中的每个节点的资源占用系数,从多个节点中选取出目标节点。这样,便能够确保目标节点在被选取出时,具有较强的处理能力,基于此,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便能够确保延时任务具有较高的执行效率,以实现确保延时任务能够准时执行的技术效果。
[0014] 结合第一方面第一种可能的实施方式,本申请实施例提供了第二种可能的实施方式,其中,所述根据每个节点的资源占用系数,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:
[0015] 获得所述多个节点中的每个节点的地址信息;
[0016] 针对每个节点,以所述节点的资源占用系数为值,所述节点的地址信息为键,通过预设选举算法获得每个节点的选举参考数据;
[0017] 根据所述多个节点中每个节点的选举参考数据,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0018] 进一步地,本申请实施例提供的延时任务执行方法,还可以在获得服务器集群包括的多个节点中的每个节点的资源占用系数的同时,获得多个节点中的每个节点的地址信息,针对每个节点,以该节点的资源占用系数为值,所述节点的地址信息为键,通过预设选举算法获得每个节点的选举参考数据,此后,根据多个节点中每个节点的选举参考数据,从多个节点中选取出目标节点。这样,便能够确保目标节点在执行与目标信息对应的延时任务的过程中,能够始终维持较强的处理能力,基于此,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便能够确保延时任务具有较高的执行效率,以实现确保延时任务能够准时执行的技术效果。
[0019] 结合第一方面,本申请实施例提供了第一方面的第三种可能的实施方式,其中,所述若所述目标信息中剩余轮询次数的值为所述约定数值,则从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务,包括:
[0020] 若所述目标信息中剩余轮询次数的值为所述约定数值,则从服务器集群包括的多个节点中选取出目标节点,以使所述目标节点为与所述目标信息对应的延时任务添加任务锁,并根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务;
[0021] 在所述延时任务执行完成之后,使所述目标节点释放所述任务锁,并将所述延时任务的触发信息从所述槽位中删除。
[0022] 进一步地,本申请实施例提供的延时任务执行方法,还可以在从服务器集群包括的多个节点中选取出目标节点之后,使目标节点为与目标信息对应的延时任务添加任务锁,并根据目标信息中的任务处理信息执行与目标信息对应的延时任务,在延时任务执行完成之后,使目标节点释放任务锁,并将延时任务的触发信息从槽位中删除。这样,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便可以避免该延时任务被服务器集群中除目标节点以外的其他节点重复执行,也即,避免该延时任务占用服务器集群中除目标节点以外的其他节点的资源,这样,服务器集群中除目标节点以外的其他节点便可以在目标节点执行该延时任务时,高效地执行其他延时任务,以实现确保延时任务能够准时执行的技术效果。
[0023] 结合第一方面,本申请实施例提供了第一方面的第四种可能的实施方式,其中,所述针对每个正在被询问的槽位,将所述槽位中储存的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值之后,所述延时任务执行方法,还包括:
[0024] 若所述目标信息中剩余轮询次数的值未达到所述约定数值,则对所述目标信息中的剩余轮询次数进行更新。
[0025] 结合第一方面,本申请实施例提供了第一方面的第五种可能的实施方式,其中,所述延时任务执行方法,还包括:
[0026] 接收待执行任务之后,获得所述待执行任务的任务生成信息,所述任务生成信息包括待执行任务的延时时长和任务处理信息,所述待执行任务为生成的任一延时任务;
[0027] 根据所述延时时长、所述循环队列中槽位的数量、所述预设时间间隔,以及正在被询问的槽位,获得与所述待执行任务对应的剩余轮询次数和槽位,并将与所述待执行任务对应的槽位作为目标槽位;
[0028] 将所述剩余轮询次数和所述任务处理信息作为所述待执行任务的触发信息,并储存于所述目标槽位。
[0029] 结合第一方面第五种可能的实施方式,本申请实施例提供了第六种可能的实施方式,其中,所述接收待执行任务之后,获得所述待执行任务的任务生成信息,包括:
[0030] 接收待执行任务之后,获得所述待执行任务的指定执行时间和执行逻辑;
[0031] 获得所述指定执行时间与当前时间的时间差值,作为所述待执行任务的延时时长;
[0032] 将所述执行逻辑储存于预设分布式储存系统后,创建所述执行逻辑的检索标识,以将所述检索标识作为所述任务处理信息;
[0033] 将所述延时时长和所述任务处理信息作为所述待执行任务的任务生成信息。
[0034] 进一步地,本申请实施例提供的延时任务执行方法,还可以在接收待执行任务之后,获得待执行任务的指定执行时间和执行逻辑,并获得指定执行时间与当前时间的时间差值,将该时间差值作为待执行任务的延时时长,将执行逻辑储存于预设分布式储存系统,并创建执行逻辑的检索标识,将该检索标识作为任务处理信息,再将延时时长和任务处理信息作为待执行任务的任务生成信息。这样,不仅可以降低循环队列的空间占用率,同时,由于预设分布式储存系统提供的分布式数据存储方式具有高可靠性特点,并且能够提供高吞吐量的数据访问,因此,将执行逻辑储存于预设分布式储存系统中,便能够避免执行逻辑丢失,以确保执行逻辑的存储安全,同时,能够通过提供高吞吐量的数据确保待执行任务能够准时执行。
[0035] 第二方面,本申请实施例还提供了一种延时任务执行装置,所述延时任务执行装置,包括:
[0036] 轮询模块,用于按预设时间间隔依次轮询循环队列中包括的多个槽位,所述槽位用于储存延时任务的触发信息,所述触发信息包括剩余轮询次数和任务处理信息;
[0037] 判断模块,用于针对每个正在被询问的槽位,将所述槽位中储存的延时任务的触发信息作为目标信息,并判断所述目标信息中剩余轮询次数的值是否为约定数值;
[0038] 执行模块,用于在所述目标信息中剩余轮询次数的值为所述约定数值时,从多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0039] 第三方面,本申请实施例还提供一种电子设备,所述电子设备包括处理器和存储器,所述存储器上存储有计算机程序,所述处理器用于执行所述存储器中的所述计算机程序,以实现上述第一方面,或第一方面的任一种可能的实施方式中提供的延时任务执行方法。
[0040] 第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被执行时,可实现上述第一方面,或第一方面的任一种可能的实施方式中提供的延时任务执行方法。

附图说明

[0041] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0042] 图1为本申请实施例提供的一种电子设备的示意性结构框图。
[0043] 图2为本申请实施例提供的一种延时任务执行方法的流程图。
[0044] 图3为本申请实施例提供的延时任务执行方法的另一部分流程图。
[0045] 图4为本申请实施例提供的一种环形阵列的示意性结构图。
[0046] 图5为本申请实施例提供的一种延时任务执行装置的示意性结构框图。
[0047] 图标:100-电子设备;110-延时任务执行装置;111-轮询模块;112-判断模块;113-执行模块;120-处理器;130-存储器。

具体实施方式

[0048] 下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行描述。
[0049] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0050] 请参阅图1,为本申请实施例提供的一种应用延时任务执行方法及装置的电子设备100的示意性结构框图。进一步地,本申请实施例中,电子设备100包括延时任务执行装置110、处理器120和存储器130。
[0051] 处理器120和存储器130之间直接或间接地电性连接,以实现数据的传输或交互,例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。延时任务执行装置110包括至少一个可以软件或固件(Firmware)的形式存储在存储器130中或固化在电子设备100的操作系统(Operating System,OS)中的软件模块。处理器120用于执行存储器130中存储的可执行模块,例如,延时任务执行装置110所包括的软件功能模块及计算机程序等。处理器120可以在接收到执行指令后,执行计算机程序。
[0052] 其中,处理器120可以是一种集成电路芯片,具有信号处理能力。处理器120也可以是通用处理器,例如,可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、分立门或晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。此外,通用处理器可以是微处理器或者任何常规处理器等。
[0053] 此外,存储器130可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦可编程序只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦编程只读存储器Electric Erasable Programmable Read-Only Memory,EEPROM)等。存储器130用于存储程序,处理器120在接收到执行指令后,执行该程序。
[0054] 应当理解,图1所示的结构仅为示意,本申请实施例提供的电子设备100还可以具有比图1更少或更多的组件,或是具有与图1所示不同的配置。此外,图1所示的各组件可以通过软件、硬件或其组合实现。
[0055] 请参阅图2,图2为本申请实施例提供的延时任务执行方法的流程示意图,该方法应用于图1所示的电子设备100。所应说明的是,本申请实施例提供的延时任务执行方法不以图2及以下所示的顺序为限制,以下结合图2对延时任务执行方法的具体流程及步骤进行详细阐述。
[0056] 步骤S110,按预设时间间隔依次轮询循环队列中包括的多个槽位,槽位用于储存延时任务的触发信息,触发信息包括剩余轮询次数和任务处理信息。
[0057] 需要说明的是,本申请实施例中,循环队列即为顺序循环队列,是通过为顺序队列所使用的存储空间创建逻辑上的首尾连接关系形成的,例如,可以采用环形队列,而循环队列中包括的槽位(slot)则为环形阵列所使用的存储空间。预设时间间隔是指从一个槽位到下一个槽位的时间间隔,也可以称为走位间隔。示例性的,每个槽位中存储的延时任务的触发信息可以以任务链表(taskLink)的形式存储。其中,触发信息中的剩余轮询次数表示对应的延时任务在当前时刻距离被执行时间需要等待的轮询次数,任务处理信息可以包括延时任务的元(meta)信息(可以理解为包括执行该延时任务所需的关键信息以及处理算子信息,算子可以理解为该延时任务的执行逻辑)。
[0058] 步骤S120,针对每个正在被询问的槽位,将槽位中储存的延时任务的触发信息作为目标信息,并判断目标信息中剩余轮询次数的值是否为约定数值。本申请实施例中,约定数值为0,但不限于0。
[0059] 步骤S130,若目标信息中剩余轮询次数的值为约定数值,则从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务。
[0060] 需要说明的是,本申请实施例中,若目标信息中剩余轮询次数的值未达到约定数值,则对目标信息中的剩余轮询次数进行更新,例如,对目标信息中的剩余轮询次数进行减1操作,以获得新的剩余轮询次数。
[0061] 回到上述步骤S130,本申请实施例中,该步骤S130可以包括以下步骤:当目标信息中剩余轮询次数的值为约定数值时,可以获得服务器集群包括的多个节点中的每个节点的资源占用系数,再根据每个节点的资源占用系数,从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务。可以理解的是,本申请实施例中,节点为服务器集群中包括的任一服务器。
[0062] 针对多个节点中的每个节点,可以获得该节点正在执行的任务数量、该节点的系统资源使用率,系统资源使用率可以包括该节点的CPU使用率,以及该节点的内存使用率,再根据该节点正在执行的任务数量、该节点的CPU使用率,以及该节点的内存使用率,获得该节点的资源占用系数。示例性的,针对多个节点中的每个节点,该节点的资源占用系数可以通过以下计算规则获得:
[0063] W=(C+1)*R1*R2
[0064] 其中,W为节点的资源占用系数,C为节点正在执行的任务数量,R1为节点的CPU使用率,R2为节点的内存使用率。
[0065] 获得多个节点中的每个节点的资源占用系数之后,作为一种可选的实施方式,可以从多个节点中选取出资源占用系数最小的节点,作为目标节点。这样,便能够确保目标节点在被选取出时,具有较强的处理能力,基于此,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便能够确保延时任务具有较高的执行效率,以实现确保延时任务能够准时执行的技术效果。
[0066] 获得多个节点中的每个节点的资源占用系数之后,作为另一种可选的实施方式,还可以获得多个节点中的每个节点的地址信息,该地址信息可以为IP信息,针对每个节点,以节点的资源占用系数为值(value),节点的地址信息为键(key),通过预设选举算法获得每个节点的选举参考数据,其中,该预设选举算法可以是PAXOS算法。然后,再根据多个节点中每个节点的选举参考数据,从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务。这样,目标节点在执行与目标信息对应的延时任务的过程中,便能够始终维持较强的处理能力,基于此,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便能够确保延时任务具有较高的执行效率,以实现确保延时任务能够准时执行的技术效果。
[0067] 此外,本申请实施例中,当目标信息中剩余轮询次数的值为约定数值,且从服务器集群包括的多个节点中选取出目标节点后,还可以使目标节点为与目标信息对应的延时任务添加任务锁,再根据目标信息中的任务处理信息执行与目标信息对应的延时任务,并在延时任务执行完成之后,使目标节点释放任务锁,并将延时任务的触发信息从槽位中删除。这样,在目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务时,便可以避免该延时任务被服务器集群中除目标节点以外的其他节点重复执行,也即,避免该延时任务占用服务器集群中除目标节点以外的其他节点的资源,服务器集群中除目标节点以外的其他节点便可以在目标节点执行该延时任务时,高效地执行其他延时任务,以实现确保延时任务能够准时执行的技术效果。
[0068] 需要说明的是,本申请实施例中,当目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务失败时,可以为该延时任务设置二次延时时间,并根据二次延时时间获得将该延时任务在环形阵列中对应的槽位,将该延时任务的触发信息存储于环形阵列中对应的槽位。其中,二次延时时间可以是预设时间间隔的整数倍。
[0069] 进一步地,请结合图3,本申请实施例中,延时任务执行方法还可以包括步骤S210、步骤S220和步骤S230,用于将生成的延时任务的触发信息存储于环形阵列中与该延时任务对应的槽位。
[0070] 步骤S210,接收待执行任务之后,获得待执行任务的任务生成信息,任务生成信息包括待执行任务的延时时长和任务处理信息,待执行任务为生成的任一延时任务。
[0071] 本申请实施例中,可以在接收待执行任务之后,获得待执行任务的指定执行时间,进一步获得该指定执行时间与当前时间的时间差值,将该时间差值作为待执行任务的延时时长。
[0072] 此外,待执行任务的任务处理信息可以为待执行任务的执行逻辑,但为了降低循环队列的空间占用率,待执行任务的任务处理信息也可以为用于检索待执行任务的执行逻辑的检索标识。基于此,本申请实施例中,也可以在接收待执行任务之后,获得待执行任务的执行逻辑,将执行逻辑储存于预设分布式储存系统,并根据执行逻辑在预设分布式存储系统中的存储位置,创建执行逻辑的检索标识,将检索标识作为待执行任务的任务处理信息。
[0073] 其中,预设分布式储存系统可以是Redis缓存系统、MongoDB数据库、Memcache缓存系统、MySQL关系型数据库中的任一种,具体可以根据实际需求选择,也即,根据待执行任务的特征选择。例如,当待执行任务为删除超过指定支付时间未成功支付的订单时,由于订单生成量较大,且订单的生成时间与指定支付时间之间的时间差值较小,通常为5min-15min,因此,可以采用Redis缓存系统对执行逻辑进行存储。再例如,当待执行任务为订单完成之后,将超过指定评价时间未及时评价的订单的评价设置为五星好评时,由于需要评价的订单量较大,且订单的完成时间与指定评价时间之间的时间差值较大,通常为45天以上,因此,可以采用MongoDB数据库对执行逻辑进行存储。
[0074] 本申请实施例中,由于预设分布式储存系统提供的分布式数据存储方式具有高可靠性特点,并且能够提供高吞吐量的数据访问,因此,将执行逻辑储存于预设分布式储存系统中,便能够避免执行逻辑丢失,以确保执行逻辑的存储安全,同时,能够通过提供高吞吐量的数据确保待执行任务能够准时执行。
[0075] 步骤S220,根据延时时长、循环队列中槽位的数量、预设时间间隔,以及正在被询问的槽位,获得与待执行任务对应的剩余轮询次数和槽位,并将与待执行任务对应的槽位作为目标槽位。
[0076] 本申请实施例中,将根据延时时长、循环队列中槽位的数量,以及预设时间间隔,获得与待执行任务对应的剩余轮询次数。示例性的,与待执行任务对应的剩余轮询次数可以通过以下计算规则获得:
[0077] M=T div(L*S)
[0078] 其中,M为与待执行任务对应的剩余轮询次数,T为延时时长,L为循环队列中槽位的数量,S为预设时间间隔。
[0079] 本申请实施例中,将根据延时时长、循环队列中槽位的数量、预设时间间隔,以及正在被询问的槽位,获得与待执行任务对应的槽位。示例性的,与待执行任务对应的槽位可以通过以下计算规则获得:
[0080] N=[(T+n*S)mod(L*S)]/S
[0081] 其中,N为与待执行任务对应的槽位的序号,T为延时时长,n为正在被询问的槽位的序号,S为预设时间间隔,L为循环队列中槽位的数量。
[0082] 同样,与待执行任务对应的槽位也可以通过以下计算规则获得:
[0083] N={[T mod(L*S)]/S}+n
[0084] 其中,N为与待执行任务对应的槽位的序号,T为延时时长,L为循环队列中槽位的数量,S为预设时间间隔,n为正在被询问的槽位的序号。
[0085] 步骤S230,将剩余轮询次数和任务处理信息作为待执行任务的触发信息,并储存于目标槽位。本申请实施例中,一个或多个待执行任务的触发信息可以以任务链表的形式存储于目标槽位。
[0086] 以下将举例对本申请实施例提供的关于延时任务执行方法的一种可能的实施方式进行实现过程介绍。
[0087] 例如,正在被询问的槽位的序号为3(即图4中的指针指向序号为3的槽位)时,接收到的延时任务包括第一延时任务和第二延时任务,其中,第一延时任务的延时时长为8s,第二延时任务的延时时长为56s,而预设时间间隔为2s,那么,根据上述提供的相应计算规则,可以获得与第一延时任务对应的剩余轮询次数为0,槽位的序号为7,与第二延时任务对应的剩余轮询次数为3,槽位的序号为7。因此,可以将剩余轮询次数0,以及第一延时任务的任务处理信息,作为第一延时任务的触发信息,并储存于序号为7的槽位,将剩余轮询次数3,以及第二延时任务的任务处理信息,作为第二延时任务的触发信息,并储存于序号为7的槽位。
[0088] 然后,继续按预设时间间隔依次轮询循环队列中包括的多个槽位,当轮询至序号为7的槽位时,将序号为7的槽位中第一延时任务的触发信息,以及第二延时任务的触发信息共同作为目标信息分别进行判断。
[0089] 其中,第一延时任务的触发信息中剩余轮询次数为0,则从多个节点中选取出目标节点,以使目标节点为第一延时任务添加任务锁,再根据第一延时任务的触发信息中的任务处理信息执行第一延时任务,并在第一延时任务执行完成之后,使目标节点释放任务锁,并将第一延时任务的触发信息从槽位中删除。第二延时任务的触发信息中剩余轮询次数为3,则对该剩余轮询次数进行减1操作,获得第二延时任务的触发信息中新的剩余轮询次数为2,再继续按预设时间间隔依次轮询循环队列中包括的多个槽位,并重复以上步骤,直至第二延时任务的触发信息中剩余轮询次数为0时,从多个节点中选取出目标节点,以使目标节点为第二延时任务添加任务锁,再根据第二延时任务的触发信息中的任务处理信息执行第二延时任务,并在第二延时任务执行完成之后,使目标节点释放任务锁,并将第二延时任务的触发信息从槽位中删除。
[0090] 基于与上述延时任务执行方法同样的发明构思,本申请实施例还提供了一种延时任务执行装置110。请参阅图5,延时任务执行装置110包括轮询模块111、判断模块112和执行模块113。
[0091] 轮询模块111,用于按预设时间间隔依次轮询循环队列中包括的多个槽位,槽位用于储存延时任务的触发信息,触发信息包括剩余轮询次数和任务处理信息。
[0092] 关于轮询模块111的描述具体可参考上述步骤S110的详细描述,也即,步骤S110可以由轮询模块111执行,此处不再赘述。
[0093] 判断模块112,用于针对每个正在被询问的槽位,将槽位中储存的延时任务的触发信息作为目标信息,并判断目标信息中剩余轮询次数的值是否为约定数值。
[0094] 关于判断模块112的描述具体可参考上述步骤S120的详细描述,也即,步骤S120可以由判断模块112执行,此处不再赘述。
[0095] 执行模块113,用于在目标信息中剩余轮询次数的值为约定数值时,从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务。
[0096] 关于执行模块113的描述具体可参考上述步骤S130的详细描述,也即,步骤S130可以由执行模块113执行,此处不再赘述。
[0097] 作为一种可选的实施方式,执行模块113可以包括:
[0098] 第一计算单元,用于在所述目标信息中剩余轮询次数的值为所述约定数值时,获得服务器集群包括的多个节点中的每个节点的资源占用系数。
[0099] 第一执行单元,用于根据每个节点的资源占用系数,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0100] 其中,第一执行单元可以包括:
[0101] 查找子单元,用于获得所述多个节点中的每个节点的地址信息。
[0102] 计算子单元,用于针对每个节点,以所述节点的资源占用系数为值,所述节点的地址信息为键,通过预设选举算法获得每个节点的选举参考数据。
[0103] 执行子单元,用于根据所述多个节点中每个节点的选举参考数据,从所述多个节点中选取出目标节点,以使所述目标节点根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0104] 作为另一种可选的实施方式,执行模块113可以包括:
[0105] 第二执行单元,用于在所述目标信息中剩余轮询次数的值为所述约定数值时,从服务器集群包括的多个节点中选取出目标节点,以使所述目标节点为与所述目标信息对应的延时任务添加任务锁,并根据所述目标信息中的任务处理信息执行与所述目标信息对应的延时任务。
[0106] 删除单元,用于在所述延时任务执行完成之后,使所述目标节点释放所述任务锁,并将所述延时任务的触发信息从所述槽位中删除。
[0107] 本申请实施例中,延时任务执行装置110还可以包括:
[0108] 更新模块,用于若所述目标信息中剩余轮询次数的值未达到所述约定数值,则对所述目标信息中的剩余轮询次数进行更新。
[0109] 本申请实施例中,延时任务执行装置110还可以包括:
[0110] 采集模块,用于在接收待执行任务之后,获得所述待执行任务的任务生成信息,所述任务生成信息包括待执行任务的延时时长和任务处理信息,所述待执行任务为生成的任一延时任务。
[0111] 关于采集模块的描述具体可参考上述步骤S210的详细描述,也即,步骤S210可以由采集模块执行,此处不再赘述。
[0112] 定位模块,用于根据所述延时时长、所述循环队列中槽位的数量、所述预设时间间隔,以及正在被询问的槽位,获得与所述待执行任务对应的剩余轮询次数和槽位,并将与所述待执行任务对应的槽位作为目标槽位。
[0113] 关于定位模块的描述具体可参考上述步骤S220的详细描述,也即,步骤S220可以由定位模块执行,此处不再赘述。
[0114] 存储模块,用于将所述剩余轮询次数和所述任务处理信息作为所述待执行任务的触发信息,并储存于所述目标槽位。
[0115] 关于存储模块的描述具体可参考上述步骤S230的详细描述,也即,步骤S230可以由存储模块执行,此处不再赘述。
[0116] 其中,采集模块可以包括:
[0117] 获取单元,用于接收待执行任务之后,获得所述待执行任务的指定执行时间和执行逻辑;
[0118] 第二计算单元,用于获得所述指定执行时间与当前时间的时间差值,作为所述待执行任务的延时时长;
[0119] 创建单元,用于将所述执行逻辑储存于预设分布式储存系统后,创建所述执行逻辑的检索标识,以将所述检索标识作为所述任务处理信息;
[0120] 整合单元,用于将所述延时时长和所述任务处理信息作为所述待执行任务的任务生成信息。此外,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,可实现上述方法实施例中提供的延时任务执行方法,具体可参见上述方法实施例,此处不再赘述。
[0121] 综上所述,本申请实施例提供的延时任务执行方法、装置及电子设备,通过按预设时间间隔依次轮询循环队列中包括的多个槽位,针对每个正在被询问的槽位,将该槽位中储存的延时任务的触发信息作为目标信息,并在判断出目标信息中剩余轮询次数的值为约定数值时,从多个节点中选取出目标节点,以使目标节点根据目标信息中的任务处理信息执行与目标信息对应的延时任务,这种延时任务执行方法采用了循环队列实现延时任务的触发控制,因此,延时任务的执行是主动触发的,相对于现有技术中,通过定时任务周期性的去扫描数据库,以检测是否存在需要执行的延时任务,若存在需要执行的延时任务,则一次性批量执行的实施方式而言,能够确保延时任务的准时执行。
[0122] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0123] 另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0124] 所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0125] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0126] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
[0127] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。