1.本技术涉及服务器集群技术,尤其涉及一种定时任务执行方法、装置、服务器和可读存储介质。
背景技术:2.随着服务器集群技术的发展,为了实现服务器集群的高效运行,通常将服务器集群设置成具有高可用性且负载均衡。这些服务器集群中的服务器可分配处理同一时间点的任务,例如定时任务,为了避免服务器集群中的服务器执行操作冗余,因而出现了定时任务执行方法。
3.目前,服务器集群中的多个服务器,针对于相同的定时任务,通常是将各服务器中的定时任务剥离,使其由一个单独的服务器执行。
4.然而,这种将定时任务剥离的方式,会出现定时任务单点问题,即,若处理该定时任务的服务器出现异常情况时,将会导致该定时任务无法得到执行。
技术实现要素:5.本技术提供一种定时任务执行方法、装置、服务器和可读存储介质,用以解决现有技术中,将定时任务剥离可能会导致定时任务无法被执行的技术问题。
6.第一方面,本技术提供一种定时任务执行方法,应用于服务器集群中的任一第一服务器,所述服务器集群中还包括一个第二服务器,所述方法包括:
7.获取定时任务的标识信息;
8.判断所述定时任务的标识信息所对应的定时任务是否被第二服务器锁定;
9.若所述定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定所述第二服务器在执行所述定时任务时发生异常,对所述定时任务进行解锁,以解除所述定时任务与所述第二服务器的绑定关系;
10.对所述定时任务进行锁定,以将所述定时任务与所述第一服务器进行绑定;
11.若成功锁定,则继续执行所述定时任务。
12.第二方面,应用于服务器集群中的任一第一服务器,所述服务器集群中还包括一个第二服务器,所述装置包括:
13.标识信息获取模块,用于获取定时任务的标识信息;
14.锁定判断模块,用于判断所述定时任务的标识信息所对应的定时任务是否被第二服务器锁定;
15.任务解锁模块,用于若所述定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定所述第二服务器在执行所述定时任务时发生异常,对所述定时任务进行解锁,以解除所述定时任务与所述第二服务器的绑定关系;
16.任务锁定模块,用于对所述定时任务进行锁定,以将所述定时任务与所述第一服务器进行绑定;
17.任务执行模块,用于若成功锁定,则继续执行所述定时任务。
18.第三方面,本技术提供一种第一服务器,包括:处理器,以及与所述处理器通信连接的存储器;
19.所述存储器存储计算机执行指令;
20.所述处理器执行所述存储器存储的计算机执行指令,以实现如第一方面所述的方法。
21.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面所述的方法。
22.本技术提供的定时任务执行方法、装置、服务器和可读存储介质,获取定时任务的标识信息;判断所述定时任务的标识信息所对应的定时任务是否被第二服务器锁定;若所述定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定所述第二服务器在执行所述定时任务时发生异常,对所述定时任务进行解锁,以解除所述定时任务与所述第二服务器的绑定关系;对所述定时任务进行锁定,以将所述定时任务与所述第一服务器进行绑定;若成功锁定,则继续执行所述定时任务。具体地,服务器集群中任一第一服务器,获取到定时任务的标识信息之后,若确定定时任务原先是第二服务器锁定的,且锁定时长超过设定超时时长,可以确定第二服务器在执行定时任务时发生异常,因此没有及时对定时任务进行解锁。此时,第一服务器可以先对定时任务进行解锁,使其不再与第二服务器有绑定关系,再对定时任务进行锁定,从而在成功锁定后,即使第二服务器长时间异常,也可以继续由任一第一服务器继续执行定时任务,而不会出现第二服务器出现异常后,导致该定时任务无法得到执行。
附图说明
23.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
24.图1为实现本技术实施例的定时任务执行方法的一种应用场景图;
25.图2为本技术一实施例的实现定时任务执行方法的流程示意图;
26.图3为本技术另一实施例的实现定时任务执行方法的流程示意图;
27.图4为本技术实现定时任务执行方法的结构示意图;
28.图5为用来实现定时任务执行方法中的第一服务器的结构示意图。
29.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
30.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
31.首先对本技术所涉及的名词进行解释:
32.定时任务:是指已设置好执行时间间隔的任务,当经过一个执行时间间隔,即可被执行一次的任务。
33.为了清楚理解本技术的技术方案,首先对现有技术的方案进行详细介绍。
34.传统方式中,服务器集群中的多个服务器,针对于相同的定时任务,通常是将各服务器中的定时任务剥离,使其由一个单独的服务器执行。然而,这种将定时任务剥离的方式,会出现定时任务单点问题,即,若处理该定时任务的服务器出现异常情况时,将会导致该定时任务无法得到执行。
35.所以在面对现有技术的技术问题时,发明人通过创造性的研究后发现,为了克服在服务器出现掉电/掉网时,定时任务无法再被执行的问题,因此,将执行定时任务时出现掉电/掉网的服务器作为第二服务器,将服务器集群中其他服务器作为第一服务器。设置服务器集群中的任一第一服务器,在确定第二服务器锁定定时任务的锁定时长超过设定超时时长时,确定第二服务器在执行定时任务时发生异常,对定时任务进行解锁,以解除定时任务与第二服务器的绑定关系;对定时任务进行锁定,以将定时任务与第一服务器进行绑定;若成功锁定,则继续执行定时任务。从而在成功锁定后,即使第二服务器长时间异常,也可以继续由任一第一服务器继续执行定时任务,而不会出现第二服务器出现异常情况后,导致该定时任务无法得到执行。
36.如图1所示,本技术实施例提供的定时任务执行方法的应用场景,在该应用场景中对应的网络架构中包括服务器集群和数据库30,服务器集群包括多个服务器,可以将服务器分成第一服务器10或第二服务器20,第一服务器10可以有多个,但处理定时任务执行方法的只有其中一个。定时任务存储于数据库30中,预先设置有任务的执行时间间隔,服务器集群中的服务器可以通过锁定定时任务的方式,以获得执行定时任务的机会。若上次竞争执行定时任务的结果是由第二服务器20锁定定时任务,且第二服务器20对定时任务的锁定时长超过设定超时时长,则本次在竞争处理该定时任务时,在从数据库30中获取到定时任务的标识信息之后,第一服务器10先解除该定时任务与第二服务器20的绑定关系,以便对该定时任务进行锁定。在第一服务器10成功锁定该定时任务后,定时任务可在本次由该第一服务器10继续执行。
37.需要注意的是,定时任务是每经过一个执行时间间隔,即可被执行一次的任务。因此,假设本次由第二服务器锁定,出现锁定时长超过设定超时时长的情况时,即使定时任务未正常被执行完,也不会再执行。
38.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
39.图2是本技术一实施例提供的定时任务执行方法,如图2所示,本实施例提供的定时任务执行方法的执行主体是第一服务器。则本实施例提供的定时任务执行方法包括以下步骤:
40.步骤101,获取定时任务的标识信息。
41.其中,标识信息是指可以标识以区分定时任务的信息,例如名称,编号等。获取定时任务的标识信息的时机,可以发生在在定时任务即将被执行前的预设时间间隔内。定时
任务的标识信息的获取可以是通过遍历前述的数据库获取。
42.示例性地,定时任务是每天的10:00执行(即执行时间间隔为24小时),假设预设时间间隔为5分钟,则服务器集群中的任一第一服务器是在每天的9:55时分准时遍历数据库中的定时任务。
43.步骤102,判断定时任务的标识信息所对应的定时任务是否被第二服务器锁定。
44.具体地,在获取到定时任务的标识信息之后,第一服务器可以通过获取定时任务的加锁状态以判断对应的定时任务是否被第二服务器锁定。
45.步骤103,若定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定第二服务器在执行定时任务时发生异常,对定时任务进行解锁,以解除定时任务与第二服务器的绑定关系。
46.其中,设定超时时长通常可以设置小于定时任务的执行时间间隔,可以根据具体情况设置,只要满足不等于或者大于定时执行时间间隔即可。例如,若定时任务的执行时间间隔为半小时执行一次,可以设置设定超时时长为10分钟。
47.具体地,若根据定时任务的加锁状态,确定该定时任务被第二服务器锁定,则进一步确定被第二服务器锁定的锁定时长是否超过设定超时时长。若超过设定超时时长,则确定第二服务器在执行定时任务过程中可能出现异常,导致无法对定时任务及时解锁。其中,异常包括掉电/掉网,也可以是其他影响第二服务器执行定时任务的情况。
48.在已知第二服务器在上次执行定时任务时发生异常,则本次执行定时任务时,第一服务器先对定时任务进行解锁,解锁的目的在于解除定时任务与第二服务器的绑定关系,从而使得该第一服务器可以和定时任务进行绑定。
49.步骤104,对定时任务进行锁定,以将定时任务与第一服务器进行绑定。
50.其中,定时任务可以被服务器集群中的任一服务器绑定,在上一次第二服务器锁定超时后,本次可以由任一第一服务器对定时任务进行锁定,以和定时任务绑定,绑定的目的在于,使定时任务只能由绑定该定时任务的第一服务器执行。
51.本次执行定时任务前,服务器集群中的任一第一服务器均执行步骤101至步骤104,其他第一服务器与作为执行主体的第一服务器是竞争对该定时任务进行锁定,但只有作为执行主体的第一服务器才能成功锁定定时任务。
52.步骤105,若成功锁定,则继续执行定时任务。
53.其中,成功锁定指的是第一服务器成功锁定定时任务,二者已建立好对应的绑定关系。等达到定时任务的执行时间,第一服务器执行定时任务。
54.且在没有出现执行异常的情况下,通常执行完定时任务之后,第一服务器会自动解除定时任务和第一服务器的绑定关系。
55.本技术,通过获取定时任务的标识信息;判断定时任务的标识信息所对应的定时任务是否被第二服务器锁定;若定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定第二服务器在执行定时任务时发生异常,对定时任务进行解锁,以解除定时任务与第二服务器的绑定关系;对定时任务进行锁定,以将定时任务与第一服务器进行绑定;若成功锁定,则继续执行定时任务。具体地,服务器集群中任一第一服务器,获取到定时任务的标识信息之后,若确定定时任务原先是第二服务器锁定的,且锁定时长超过设定超时时长,可以确定第二服务器在执行定时任务时发生异常,因此没有及时对定时任务进行解锁。
此时,第一服务器可以先对定时任务进行解锁,使其不再与第二服务器有绑定关系,再对定时任务进行锁定,从而在成功锁定后,即使第二服务器长时间异常,也可以继续由任一第一服务器继续执行定时任务,而不会出现第二服务器出现异常后,导致该定时任务无法得到执行。
56.作为一种可选实施方式,本实施例中,步骤101,具体包括:从堆栈中回溯定时任务的标识信息,堆栈中存储有各定时任务的标识信息。
57.其中,堆栈是一种数据结构,而且是一种数据项按序排列的数据结构,只能在栈顶(top)对数据项进行插入和删除。在数据库以堆栈形式存储有各定时任务的标识信息,服务器集群中的服务器可以从数据库的堆栈中获取定时任务的标识信息。
58.在获取方式上,可以采用回溯法。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。
59.本实施例中,从堆栈中回溯定时任务的标识信息,堆栈中存储有各定时任务的标识信息。从堆栈中回溯定时任务的标识信息,可以减少对定时任务方法的侵入性。
60.作为一种可选实施方式,如图3所示,本实施例中,步骤102,包括以下步骤:
61.步骤201,根据定时任务的标识信息,查找到对应的定时任务,定时任务包括加锁状态的标识。
62.其中,定时任务的标识信息以及对应的定时任务,可以存储于数据库的堆栈中。第一服务器获取定时任务的标识信息时,可以找到对应的定时任务,定时任务携带有加锁状态的标识,以表示定时任务当前是否被锁定。
63.步骤202,根据定时任务查找与其具有绑定关系的服务器标识信息。
64.其中,若定时任务与服务器具有绑定关系,则定时任务还携带有与该服务器的标识信息。服务器标识信息是指可以用于区分服务器集群中不同服务器的标识信息。根据定时任务查找与其具有绑定关系的服务器标识信息,可以确定是否有服务器绑定该定时任务,以及为哪一个服务器。
65.步骤203,根据定时任务的加锁状态的标识和与其具有绑定关系的服务器标识信息,确定定时任务是否被第二服务器锁定。
66.其中,加锁状态的标识包括加锁标识或者解锁标识。当加锁状态的标识为加锁标识时,则定时任务被锁定,若加锁状态的标识为解锁状态时,则定时任务未被锁定。
67.根据定时任务的加锁状态的标识,和与其具有绑定关系的服务器标识信息,可以确定定时任务是否被锁定,以及如果锁定,是否是被第二服务器锁定的。
68.本实施例中,根据定时任务的标识信息,查找到对应的定时任务,定时任务包括加锁状态的标识;根据定时任务查找与其具有绑定关系的服务器标识信息;根据定时任务的加锁状态的标识和与其具有绑定关系的服务器标识信息,确定定时任务是否被第二服务器锁定;其中,加锁状态的标识包括加锁标识或者解锁标识。由于判断定时任务是否被第二服务器锁定,是根据查找到的定时任务的加锁状态的标识和与其具有绑定关系的服务器标识信息确定的,可以提高判断的准确性。
69.作为一种可选实施方式,本实施例中,步骤104,包括以下步骤:
70.步骤301,获取定时任务的上次锁定时间与当前时间的时间差值。
71.其中,定时任务的上次锁定时间,是指定时任务上一次被执行前锁定的时间点。当前时间是指该定时任务本次被锁定前,当前的时间点。
72.获取定时任务的上次锁定时间和当前时间的时间差值,是为了保证该定时任务在上一次被一个服务器执行完后,不会在未达执行时间间隔前,又被其他服务器再次执行。即,保证定时任务每次仅被服务器执行一次。
73.步骤302,若时间差值大于设定时间差值,则对定时任务进行锁定,设定时间差值大于服务器集群中处理定时任务最耗时的服务器的处理时长。
74.其中,设定时间差值是预先设定的时间差值,服务器集群中的各服务器均设置有与定时任务对应的设定时间差值。设定时间差值,一般设置下限值要大于服务器集群中处理定时任务最耗时的服务器的处理时长,且同时要满足上限值要小于定时任务的执行时间间隔。
75.若时间差值大于设定时间差值,对定时任务进行锁定,从而在锁定后执行过程中,不会出现定时任务每次被多个服务器均执行一次,也不会出现间隔多个执行时间间隔执行一次定时任务的情况。
76.本实施例中,获取定时任务的上次锁定时间与当前时间的时间差值;若时间差值大于设定时间差值,则对定时任务进行锁定,设定时间差值大于服务器集群中处理定时任务最耗时的服务器的处理时长。由于对定时任务进行锁定之前,还基于时间差值和设定时间差值进行比较,以确定是否对定时任务进行锁定,从而有利于保证不会出现定时任务每次被多个服务器均执行一次,避免出现重复执行的情况。
77.作为一种可选实施方式,本实施例中,步骤105,包括以下步骤:
78.步骤401,判断第一服务器是否为服务器集群中最先对定时任务进行锁定的服务器。
79.如前述,本次服务器集群中各第一服务器竞争对定时任务进行锁定,能够成功锁定的只有作为执行主体的第一服务器,作为执行主体的第一服务器是服务器集群中最先对定时任务进行锁定的服务器。即,能够成功锁定定时任务的竞争成功准则是,最先对定时任务进行锁定。
80.步骤402,若是,则确定第一服务器成功锁定定时任务,则执行定时任务。
81.具体地,竞争成功,能够成功锁定定时任务的第一服务器,执行该定时任务。
82.本实施例中,判断第一服务器是否为服务器集群中最先对定时任务进行锁定的服务器;若是,则确定第一服务器成功锁定定时任务,则执行定时任务。由于只有最先对定时任务进行锁定的服务器才能作为第一服务器,对定时任务成功锁定,从而使得竞争定时任务的规则标准化,有利于防止竞争冲突。
83.作为一种可选实施方式,本实施例中,步骤401之后,还包括步骤501,若否,则根据当前时间确定定时任务是否被服务器集群中其他服务器成功锁定,以确定是否继续执行对定时任务进行锁定的步骤。
84.其中,若作为执行主体的第一服务器不是最先对定时任务进行锁定的服务器,考虑到最先对定时任务进行锁定的服务器,可能会由于异常出现未成功锁定的情况,此时则进一步获取定时任务当前的加锁状态的标识,确定该定时任务是否被服务器集群中其他服务器成功锁定。
85.本实施例中,若第一服务器不是服务器集群中最先对定时任务进行锁定的服务器,则根据当前时间确定定时任务是否被服务器集群中其他服务器成功锁定,以确定是否继续执行对定时任务进行锁定的步骤。从而可以在最先对定时任务进行锁定的服务器出现锁定异常,未成功锁定时,能够代替该锁定异常的服务器,执行定时任务。
86.具体地,作为一种可选实施方式,本实施例中,步骤501,包括以下步骤:
87.步骤601,判断在当前时间定时任务是否被服务器集群中其他服务器成功锁定。
88.步骤602,若定时任务未被其他服务器成功锁定,则继续执行对定时任务进行锁定的步骤。
89.步骤603,若定时任务被其他服务器成功锁定,则退出。
90.图4是本技术一实施例提供的定时任务执行装置的结构示意图,如图4所示,本实施例提供的定时任务执行装置40应用于服务器集群中的任一第一服务器,服务器集群中还包括一个第二服务器,则本实施例提供的定时任务执行装置40,包括:标识信息获取模块41,锁定判断模块42,任务解锁模块43,任务锁定模块44和任务执行模块45。
91.其中,标识信息获取模块41,用于获取定时任务的标识信息;锁定判断模块42,用于判断定时任务的标识信息所对应的定时任务是否被第二服务器锁定;任务解锁模块43,用于若定时任务被第二服务器锁定,且锁定时长超过设定超时时长,则确定第二服务器在执行定时任务时发生异常,对定时任务进行解锁,以解除定时任务与第二服务器的绑定关系;任务锁定模块44,用于对定时任务进行锁定,以将定时任务与第一服务器进行绑定;任务执行模块45,用于若成功锁定,则继续执行定时任务。
92.可选地,标识信息获取模块41,具体用于:从堆栈中回溯定时任务的标识信息,堆栈中存储有各定时任务的标识信息。
93.可选地,锁定判断模块42,判断定时任务的标识信息所对应的定时任务是否被第二服务器锁定时,具体用于:根据定时任务的标识信息,查找到对应的定时任务,定时任务包括加锁状态的标识;根据定时任务查找与其具有绑定关系的服务器标识信息;根据定时任务的加锁状态的标识和与其具有绑定关系的服务器标识信息,确定定时任务是否被第二服务器锁定;其中,加锁状态的标识包括加锁标识或者解锁标识。
94.可选地,任务锁定模块44,具体用于:获取定时任务的上次锁定时间与当前时间的时间差值;若时间差值大于设定时间差值,则对定时任务进行锁定,设定时间差值大于服务器集群中处理定时任务最耗时的服务器的处理时长。
95.可选地,任务执行模块45,具体用于:判断第一服务器是否为服务器集群中最先对定时任务进行锁定的服务器;若是,则确定第一服务器成功锁定定时任务,则执行定时任务。
96.可选地,定时任务执行装置40,还包括锁定继续执行模块,用于若第一服务器不是服务器集群中最先对定时任务进行锁定的服务器,则根据当前时间确定定时任务是否被服务器集群中其他服务器成功锁定,以确定是否继续执行对定时任务进行锁定的步骤。
97.可选地,锁定继续执行模块,具体用于:判断在当前时间定时任务是否被服务器集群中其他服务器成功锁定;若定时任务未被其他服务器成功锁定,则继续执行对定时任务进行锁定的步骤;若定时任务被其他服务器成功锁定,则退出。
98.图5是根据一示例性实施例示出的一种第一服务器的框图,该设备可以是如图5所
示,第一服务器,包括:存储器51,处理器52;存储器51用于存储处理器可执行指令的存储器;处理器52用于运行计算机程序或指令,以实现如上任意一个实施例提供的定时任务执行方法。
99.其中,存储器51,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器51可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
100.其中,处理器52可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本公开实施例的一个或多个集成电路。
101.可选的,在具体实现上,如果存储器51和处理器52独立实现,则存储器51和处理器52可以通过总线53相互连接并完成相互间的通信。总线53可以是工业标准体系结构(industry standard architecture,简称为isa)总线53、外部设备互连(peripheral component,简称为pci)总线53或扩展工业标准体系结构(extended industry standard architecture,简称为eisa)总线53等。总线53可以分为地址总线53、数据总线53、控制总线53等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线53或一种类型的总线53。
102.可选的,在具体实现上,如果存储器51和处理器52集成在一块芯片上实现,则存储器51和处理器52可以通过内部接口完成相同间的通信。
103.一种非临时性计算机可读存储介质,当该存储介质中的指令由第一服务器的处理器执行时,使得第一服务器能够执行上述第一服务器的定时任务执行方法。
104.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求书指出。
105.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。