基于任务队列的任务执行方法和系统与流程

文档序号:28442685发布日期:2022-01-12 02:46阅读:122来源:国知局
基于任务队列的任务执行方法和系统与流程

1.本技术涉及计算机技术领域,尤其涉及一种基于任务队列的任务执行方法、系统、计算机设备及计算机可读存储介质。


背景技术:

2.任务队列是一个任务列表,用于暂存任务。消费者可以根据自身的处理能力进行任务消费。任务队列具有顺序性,各任务按照它在队列中添加的先后顺序被消费。
3.在当前的服务架构下,一个任务队列通常会绑定多个消费者,消费者的消费效率低下。


技术实现要素:

4.有鉴于此,本技术实施例的目的是提供一种基于任务队列的任务执行方法、系统、计算机设备及计算机可读存储介质,可以上述问题。
5.本技术实施例的一个方面提供了一种基于任务队列的任务执行方法,包括:
6.确定目标任务队列的队列类型;
7.根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略;及
8.根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务。
9.可选的,所述队列类别包括第一队列类型和第二队列类型;其中:
10.所述第一队列类型,表示队列中的各任务的执行顺序有强制要求;
11.所述第二队列类型,表示队列中的各任务的执行顺序无强制要求。
12.可选的,所述队列类型为所述第一队列类型;
13.所述根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略,包括:根据所述第一队列类型,确定所述任务执行策略为第一任务执行策略,所述第一任务执行策略表示对所述目标任务队列中的各个任务按先后顺序执行;
14.所述根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务,包括:根据所述第一任务执行策略,基于所述先后顺序串行执行所述各个任务。
15.可选的,所述根据所述第一任务执行策略,基于所述先后顺序串行执行所述各个任务,包括:
16.响应于多个实例的当前一轮竞争,将分布式锁给其中一个实例并设置一个锁周期;及
17.通过获取到所述分布式锁的实例执行待处理的任务,并对未获取到所述分布式锁的实例进行锁定,直到所述锁周期期限届满,释放所述分布式锁,并响应下一轮竞争。
18.可选的,所述根据所述第一任务执行策略,基于所述先后顺序串行执行所述各个任务,包括:
19.以幂等方式执行所述各个任务,被执行完毕的任务从所述目标任务队列中删除。
20.可选的,所述队列类型为所述第二队列类型;
21.所述根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略,包括:根据所述第二队列类型,确定所述任务执行策略为第二任务执行策略,所述第二任务执行策略表示对所述目标任务队列中的各个任务不强制按先后顺序执行;
22.所述根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务,包括:根据所述第二任务执行策略,在不受所述先后顺序的制约下,执行所述各个任务。
23.可选的,所述根根据所述第二任务执行策略,在不受所述先后顺序的制约下,执行所述各个任务,包括:
24.响应于多个实例的任务执行请求,为所述多个实例各取出部分任务,加入到所述多个实例各自的备用队列中;及
25.通过所述多个实例执行各自备用队列中的任务。
26.可选的,还包括:
27.判断是否有执行失败的任务;及
28.若确定有所述执行失败的任务,则将所述执行失败的任务放回所述目标任务队列。
29.本技术实施例的一个方面又提供了一种基于任务队列的任务执行系统,包括:
30.第一确定模块,用于确定目标任务队列的队列类型;
31.第二确定模块,用于根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略;及
32.执行模块,用于根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务。
33.本技术实施例的一个方面又提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现如上所述的基于任务队列的任务执行方法的步骤。
34.本技术实施例的一个方面又提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上所述的基于任务队列的任务执行方法的步骤。
35.本技术实施例提供的基于任务队列的任务执行方法、系统、设备及计算机可读存储介质,确定目标任务队列的队列类型,通过目标任务队列的队列类型配置最优的任务处理策略,从而使得各个任务以最优方式被执行,提升任务处理效率。
附图说明
36.图1示意性示出了根据本技术实施例的基于任务队列的任务执行方法的应用环境图;
37.图2示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的流程图;
38.图3示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的另一流程图;
39.图4示意性示出了图3中步骤s204a的子流程图;
40.图5示意性示出了通过分布式锁进行任务消费的示意图;
41.图6示意性示出了图3中步骤s204a的另一子流程图;
42.图7示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的另一流程图;
43.图8示意性示出了图7中步骤s204b的子流程图;
44.图9示意性示出了通过多个备用队列进行任务消费的示意图;
45.图10示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的新增步骤流程图;
46.图11示意性示出了根据本技术实施例二的基于任务队列的任务执行系统的框图;
47.图12示意性示出了根据本技术实施例三的适于实现基于任务队列的任务执行方法的计算机设备的硬件架构示意图。
具体实施方式
48.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
49.需要说明的是,在本技术实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本技术要求的保护范围之内。
50.在本技术的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本技术及区别每一步骤,因此不能理解为对本技术的限制。
51.消费者(又称,实例),队列中任务的实际执行者,即用于执行任务的运行代码。
52.分布式锁,一种逻辑锁,同一时间点上只能被一个消费者获得并持有一个周期。
53.任务队列(task queue),为了保证正常提供服务,需要将任务暂存到任务队列中,由任务的消费者根据自身的最大交付能力进行消费。其尤其适用于任务的生产高峰期和低谷期,进入高峰期时,任务的生产速率很快,受困于有限的资源。
54.任务队列中的任务是不允许丢失的,队列必须具有可靠的持久化机制;同时,任务被要求严格按照生产时间的先后顺序进行消费,这就要求队列必须是严格有序的。
55.幂等方式,在编程中是指任意多次执行所产生的影响均与一次执行的影响相同,不会因重复执行会对系统造成改变,可以采用乐观锁、唯一约束、悲观锁等机制实现。
56.本发明人发现,在微服务架构下,担任消费者角色的服务通常会同时存在多个实例(此服务除了消费队列的功能之外往往还有其他的功能,无论是出于业务安全的考虑做冗余,还是利用服务的规模化提升吞吐量,都需要部署多个实例),也即同一个队列会绑定多个消费者,消费者之间可能会发生冲突,出现同时消费同一个任务的情况,不仅浪费资源、效率低下,同时还可能造成致命的错误。
57.在实际业务场景中,存在一部分类型的任务,对任务的执行顺序不作强制要求,在这种情况下,如果仍按照顺序执行的策略去消费,会因为保证顺序而损失部分性能。
58.因此,本技术旨在提供执行不同执行顺序要求的任务队列的执行策略,以解决上述问题。
59.图1示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的环境应用示意图。计算机设备10000可以被配置多个任务队列,用于提供任务处理服务。计算机设备10000可以包括任何类型的计算设备,诸如膝上型计算机、服务器等。计算机设备10000可以运行ios系统、android系统、windows系统、linux系统等。
60.实施例一
61.图2示意性示出了根据本技术实施例一的基于任务队列的任务执行方法的流程图。
62.如图2所示,该基于任务队列的任务执行方法可以包括步骤s200~s204,其中:
63.步骤s200,确定目标任务队列的队列类型。
64.基于各个任务在所述目标任务队列中的可靠性要求,所述目标任务队列可以是redis list。
65.redis是一款性能极高的开源key-value数据库,支持丰富的数据类型,同时有可靠的持久化机制。redis的list数据类型是有序列表,可以作为所述目标任务队列。
66.需要说明的是,所述目标队列也可以是mysql等各类数据库中的数据表等。
67.所述目标任务队列绑定多个实例,各实例可以处理其内的任务,但是处理效率低下。
68.为了提升处理效率,可以分析队列类型,不同的队列类型对应不同的任务处理策略。
69.步骤s202,根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略。
70.所述队列类型,可以从不同的维度分类得到。
71.例如:
72.在一些应用场景中,存在一部分类型的任务,它们需要严格按照队列中的先后顺序被执行。举例而言,用户投稿任务,先进入到队列中的任务需要先执行投稿。
73.在另一些应用场景中,存在一部分类型的任务,它们对任务的执行顺序无强制要求。在这种情况下,若仍按照顺序执行的策略去消费,会因为保证顺序而损失部分性能。举例而言,直播录像存档任务,进入到队列中的任务没有顺序执行需求。
74.鉴于上述场景,作为一种示例性的分类方式,所述队列类别可以包括第一队列类型和第二队列类型;其中:
75.所述第一队列类型,表示队列中的各任务的执行顺序有强制要求;
76.所述第二队列类型,表示队列中的各任务的执行顺序无强制要求。
77.步骤s204,根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务。
78.不同的队列类型配置不同的任务处理策略,从而使得各个任务以最优的方式被执行。
79.继续以第一队列类型和第二队列类型为例进行说明。如果所述队列类型为所述第一队列类型,则强制按照先后顺序执行所述目标任务队列的各个任务,以确保各个任务能够被有效执行。如果所述队列类型为所述第二队列类型,则不强制按照先后顺序执行所述目标任务队列的各个任务,以确保各个任务能够被高效执行。
80.本技术实施例一提供的基于任务队列的任务执行方法,通过目标任务队列的队列类型配置最优的任务处理策略,使得各个任务以最优方式被执行,提升任务处理效率。如,针对具有不同执行顺序要求的任务队列采用不同的消费策略,提升消费效率。
81.以下将提供若干个可选实施例。
82.由于所述目标任务队列绑定有多个实例,实例之间可能会发生冲突,出现同时处理同一个任务的情况,这样不仅是对资源的浪费,同时还可能造成致命的错误。
83.作为可选的实施例,所述队列类型为第一队列类型。如图3所示,所述步骤s202包括步骤s202a:根据所述第一队列类型,确定所述任务执行策略为第一任务执行策略,所述第一任务执行策略表示对所述目标任务队列中的各个任务按先后顺序执行。所述步骤s204包括步骤s204a:根据所述第一任务执行策略,基于所述先后顺序串行执行所述各个任务。串行执行,指同一时间段内仅有一个实例读取和执行所述目标任务队列中的任务,任务是按照先后顺序被读取和执行的。因此,在本实施例中,各个实例之间不会发生冲突,即不会出现同时处理同一个任务的情况,这样不仅避免了资源的浪费,同时还防止了由于冲突导致的致命错误。
84.如图4所示,所述步骤s204a可以包括步骤s400~s402。其中,步骤s400,响应于多个实例的当前一轮竞争,将分布式锁给其中一个实例并设置一个锁周期;步骤s402,通过获取到所述分布式锁的实例执行待处理的任务,并对未获取到所述分布式锁的实例进行锁定,直到所述锁周期期限届满,释放所述分布式锁,并响应下一轮竞争。在本实施例中,通过分布式锁有效保证了不重复执行任务及避免不同实例的冲突。
85.举例而言,如图5所示,目标任务队列q同时绑定了3个实例a、b、c,目标任务队列q的队列类型为第一队列类型,即目标任务队列q中的各个任务必须严格按照顺序执行。实例a、b、c在发起消费请求时,需要先请求分布式锁,分布式锁在同一时间点只能被一个实例获取,并持有一段时间。继续参考图5,实例b成功获取了分布式锁,在一个持有周期内(假定为100秒),只有实例b可以按顺序消费(执行)目标任务队列q中待处理的任务。实例b获取到任务a,如果消费成功,则将任务a从目标任务队列q中删除,继续消费紧邻任务a的下一个任务b。如果消费失败,则重新执行任务a,直到成功。当一个分布式锁的锁周期结束后(此例中为实例b持有分布式锁达到100秒),实例b释放分布式锁,进入下一个周期,实例a、b、c将重新争分布式锁,重复以上流程。
86.如果实例b消费任务a失败且持有分布式锁达到100秒,则进入下一个周期,实例a、b、c将重新争分布式锁,由竞争到分布式锁的实例继续消费任务a以及任务a的后续任务。
87.如图6所示,所述步骤s204a可以包括步骤s600:以幂等方式执行所述各个任务,被执行完毕的任务从所述目标任务队列中删除。在本实施例,在不使用分布式锁的情况下,需要保证执行任务是幂等的,即重复执行不会造成额外的影响。如,任务是写入一条数据a,则以幂等方式保证不会重复写入,最终只有一条数据a。
88.作为可选的实施例,所述队列类型为第二队列类型。如图7所示,所述步骤s202包
括步骤s202b:根据所述第二队列类型,确定所述任务执行策略为第二任务执行策略,所述第二任务执行策略表示对所述目标任务队列中的各个任务不强制按先后顺序执行;所述步骤s204包括步骤s204b:根据所述第二任务执行策略,在不受所述先后顺序的制约下,执行所述各个任务。在本实施例中,由于所述目标任务队列中的各个任务不强制按先后顺序执行,因此可以采用无锁方式减少效率损失。
89.如图8所示,所述步骤s204b可以包括步骤s800~s802。其中,步骤s800,响应于多个实例的任务执行请求,为所述多个实例各取出部分任务,加入到所述多个实例各自的备用队列中;及步骤s802,通过所述多个实例执行各自备用队列中的任务。在本实施例中,为各个实例分别配置备用队列,为所述多个实例各取出部分任务,加入到所述多个实例各自的备用队列中,从而各个实例从各自备用队列中进行任务消费,从而各个实例可以同时执行取自所述目标任务队列的不同任务以提升消费效率,保证任务不会被重复消费的同时,还可以防止不同实例之间可能发生的冲突,不会出现同时处理同一个任务的情况,不仅避免了资源的浪费,还防止了由于冲突导致的致命错误。
90.举例而言,如图9所示,目标任务队列q同时绑定了3个实例a、b、c,目标任务队列q的队列类型为第二队列类型,即目标任务队列q中的各个任务不是必须严格按照顺序执行。实例a、b、c发起消费请求时,会从目标任务队列q中获取指定数量的任务存入自己的备用队列中,此例中实例a、b、c分别获取了一个任务。如果任务执行成功,如实例a、c所示,只需清除本地备用队列即可。
91.如图10所示,所述方法还可以包括步骤s1000~s1002。其中,步骤s1000,判断是否有执行失败的任务;步骤s1002,若确定有所述执行失败的任务,则将所述执行失败的任务放回所述目标任务队列。在本实施例中,可以确保每个任务均能执行成功。
92.举例而言,继续参考图9,如果任务执行失败,如实例b,需要进行补偿,将任务b重新加入目标任务队列q中。需要说明的是,由于目标任务队列q的各个任务没有按先后顺序执行的需求,因此任务b重新加入目标任务队列q无位置限定。
93.实施例二
94.图11示意性示出了根据本技术实施例二的基于任务队列的任务执行系统的框图。所述基于任务队列的任务执行系统可以被分割成一个或多个程序模块,所述一个或多个程序模块被存储于计算机可读存储介质中,并由一个或多个处理器所执行,以完成本技术实施例。本技术实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。
95.如图11所示,该基于任务队列的任务执行系统1100可以包括第一确定模块1110、第二确定模块1120及执行模块1130,其中:
96.第一确定模块1110,用于确定目标任务队列的队列类型;
97.第二确定模块1120,用于根据所述目标任务队列的队列类型,确定针对所述目标任务队列的任务执行策略;及
98.执行模块1130,用于根据所述目标任务队列的任务执行策略,执行所述目标任务队列中的各个任务。
99.作为可选的实施例,所述队列类别包括第一队列类型和第二队列类型;其中:
100.所述第一队列类型,表示队列中的各任务的执行顺序有强制要求;
101.所述第二队列类型,表示队列中的各任务的执行顺序无强制要求。
102.作为可选的实施例,所述队列类型为所述第一队列类型;
103.所述第二确定模块1120,还用于:根据所述第一队列类型,确定所述任务执行策略为第一任务执行策略,所述第一任务执行策略表示对所述目标任务队列中的各个任务按先后顺序执行;
104.所述执行模块1130,还用于:根据所述第一任务执行策略,基于所述先后顺序串行执行所述各个任务。
105.作为可选的实施例,所述执行模块1130,还用于:
106.响应于多个实例的当前一轮竞争,将分布式锁给其中一个实例并设置一个锁周期;及
107.通过获取到所述分布式锁的实例执行待处理的任务,并对未获取到所述分布式锁的实例进行锁定,直到所述锁周期期限届满,释放所述分布式锁,并响应下一轮竞争。
108.作为可选的实施例,所述执行模块1130,还用于:
109.以幂等方式执行所述各个任务,被执行完毕的任务从所述目标任务队列中删除。
110.作为可选的实施例,所述队列类型为所述第二队列类型;
111.所述第二确定模块1120,还用于:根据所述第二队列类型,确定所述任务执行策略为第二任务执行策略,所述第二任务执行策略表示对所述目标任务队列中的各个任务不强制按先后顺序执行;
112.所述执行模块1130,还用于:根据所述第二任务执行策略,在不受所述先后顺序的制约下,执行所述各个任务。
113.作为可选的实施例,所述执行模块1130,还用于:
114.响应于多个实例的任务执行请求,为所述多个实例各取出部分任务,加入到所述多个实例各自的备用队列中;及
115.通过所述多个实例执行各自备用队列中的任务。
116.作为可选的实施例,所述系统还包括返回模块(未标识),用于:
117.判断是否有执行失败的任务;及
118.若确定有所述执行失败的任务,则将所述执行失败的任务放回所述目标任务队列。
119.实施例三
120.图12示意性示出了根据本技术实施例三的适于实现基于任务队列的任务执行方法的计算机设备的硬件架构示意图。本实施例中,计算机设备10000是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备,例如,可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图12所示,计算机设备10000至少包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
121.存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备
10000的内部存储模块,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(smart media card,简称为smc),安全数字(secure digital,简称为sd)卡,闪存卡(flash card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如基于任务队列的任务执行方法的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
122.处理器10020在一些实施例中可以是中央处理器(central processing unit,简称为cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
123.网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信链接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(global system of mobile communication,简称为gsm)、宽带码分多址(wideband code division multiple access,简称为wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。
124.需要指出的是,图12仅示出了具有部件10010-10030的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
125.在本实施例中,存储于存储器10010中的基于任务队列的任务执行方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器10020)所执行,以完成本技术。
126.实施例四
127.本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的基于任务队列的任务执行方法的步骤。
128.本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,简称为smc),安全数字(secure digital,简称为sd)卡,闪存卡(flash card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中的基于任务队列的任务执行方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
129.显然,本领域的技术人员应该明白,上述的本技术实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本技术实施例不限制于任何特定的硬件和软件结合。
130.以上仅为本技术的优选实施例,并非因此限制本技术的专利范围,凡是利用本技术说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本技术的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1