一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

分布式任务的执行方法以及相关装置、设备与流程

2022-02-20 19:54:17 来源:中国专利 TAG:


1.本技术涉及分布式任务的技术领域,特别是涉及分布式任务的执行方法以及相关装置、设备。


背景技术:

2.分布式任务可以由多个相互独立或者相互依赖的子任务组成,分布式任务的完成状态完全依赖于分布式任务中子任务的完成状态,只有在分布式任务的所有子任务完成时,分布式任务才算完成。
3.在分布式任务中,大多数是采用中心化的方式执行任务,即分布式任务是通过中心化的调度平台来调度任务的,且一般是通过执行脚本的形式执行任务。
4.上述方案不能与分布式服务结合在一起,造成了资源的浪费,同时给服务造成了多套部署方案的复杂结构降低了分布式任务的执行效率。


技术实现要素:

5.本技术提供了分布式任务的执行方法以及相关装置、设备,解决现有技术中存在的分布式任务的执行效率较低的问题。
6.本技术提供了一种分布式任务的执行方法,分布式任务的执行方法,包括:响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕;如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务;如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务。
7.其中,通过新的调度器与原调度器共同调度当前任务的步骤之后还包括:响应于调度器的数量超过预设数量,则新增一台容器服务。
8.其中,分布式任务的执行方法还包括:响应于当前任务执行完毕且未达到预设时间,关闭一台调度器,并判断剩余的调度器的数量是否超过预设数量;如果剩余的调度器的数量没有超过预设数量,则减少一台容器服务。
9.其中,通过新的调度器与原调度器共同调度当前任务的步骤包括:通过新的调度器与原调度器分别调度对应的执行器执行当前任务。
10.其中,响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕的步骤包括:响应于定时器启动,启动新的调度器,基于调度规则通过新的调度器判断当前任务的任务队列中是否存在需要被执行的子任务;如果当前任务的任务队列中不存在需要被执行的子任务,则确定当前任务被原调度器执行完毕;如果当前任务的任务队列中存在需要被执行的子任务,则确定当前任务未被原调度器执行完毕。
11.其中,通过原调度器利用分布式锁从多个分布式任务中确定新任务的步骤包括:通过原调度器利用redis分布式锁从多个分布式任务中确定具有创建权限的任务;将具有创建权限的任务确定为新任务。
12.其中,通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务的步骤还包括:将新任务对应的各子任务写入到任务队列中;通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务。
13.其中,将新任务对应的各子任务写入到任务队列中的步骤包括:通过预设规则将新任务进行初始化,得到新任务对应的各子任务;将各子任务写入redis分布式锁的list结构的任务队列中;响应于全部子任务写入到任务队列中,调用event执行任务开始事件。
14.其中,通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务的步骤包括:通过原调度器利用fifo规则依次从任务队列中获取各子任务,调用执行器执行各子任务,并调用event执行任务执行事件。
15.其中,通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务的步骤还包括:响应于原调度器从任务队列中获取到子任务,通过redis分布式锁的llen判断任务队列中是否还存在需要被执行的子任务;如果任务队列中还存在需要被执行的子任务,则继续执行通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务的步骤;如果任务队列中不存在需要被执行的子任务,则执行完当前获取的子任务后,调用event执行任务结束事件。
16.本技术还提供了一种分布式任务的执行装置,分布式任务的执行装置,包括:判断模块,用于响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕;调度模块,用于如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务;执行模块,用于如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务。
17.本技术还提供了一种电子设备,包括相互耦接的存储器和处理器,处理器用于执行存储器中存储的程序指令,以实现上述任意一分布式任务的执行方法。
18.本技术还提供了一种计算机可读存储介质,其上存储有程序指令,程序指令被处理器执行时实现上述任意一分布式任务的执行方法。
19.上述方案,本技术在定时器启动时,通过启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕,如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务,能够通过调度器的新增提高当前任务的执行效率和速度;如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务,从而能够利用分布式锁确定新任务的创建和执行得任务的创建和执行不依赖任何分布式的微服务架构,使得任务的创建和执行更加简洁,从而进一步提高了分布式任务的执行效率。
附图说明
20.图1是本技术分布式任务的执行方法一实施例的流程示意图;
21.图2是本技术分布式任务的执行方法另一实施例的流程示意图;
22.图3是图2实施例中对应的分布式系统一实施方式的框架示意图;
23.图4是本技术分布式任务的执行装置一实施例的框架示意图;
24.图5是本技术电子设备一实施例的框架示意图;
25.图6为本技术计算机可读存储介质一实施例的框架示意图。
具体实施方式
26.下面结合说明书附图,对本技术实施例的方案进行详细说明。
27.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透彻理解本技术。
28.本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,可以存在三种关系,例如,a和/或b,可以:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般前后关联对象是一种“或”的关系。此外,本文中的“多”两个或者多于两个。
29.请参阅图1,图1是本技术分布式任务的执行方法一实施例的流程示意图。
30.步骤s11:响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕。
31.响应于定时器(scheduler)启动,启动新的调度器(dispatcher),并通过该新的调度器(dispatcher)判断当前任务是否被原调度器(dispatcher)执行完毕。其中,当前任务为当前正在被原调度器(dispatcher)执行的分布式任务,其中,任意时刻,只能有一个分布式任务被执行。而执行当前任务的原调度器的数量包括至少一个,具体可以为1个、2个、5个等,在此不做限定。
32.其中,定时器(scheduler)中可以配置包括调度器的定时启动周期或定时启动具体时间,定时器基于调度器的定时启动周期或定时启动具体时间循环启动。例如:可以配置定时器10秒启动一次、20秒启动一次、8月18日9:00启动等具体可以基于实际需求进行设置,在此不做限定。
33.本实施例的定时器(scheduler)可以采用spring的@scheduled定时器、java定时器或其他技术的定时器。
34.而调度器(dispatcher)中可以包括任务的调度规则,例如:任务初始化的方法,任务内容,任务对应的子任务数量,任务的执行方法等,其可以决定任务(tasker),任务队列(queue),执行器(executor),事件(event)的相关调度。
35.步骤s12:如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务。
36.如果新的调度器判断出当前任务未被原调度器执行完毕,则新的调度器与当前任务对应的原调度器共同调度当前任务。从而实现如果当前任务未执行完毕,则新增一个调度器调度当前任务。
37.在一个具体的应用场景中,当新的调度器与原调度器共同调度当前任务时,可以对当前任务进行取模分片,从而将当前任务划分为多个子任务,并按照fifo规则将多个子任务分别分配至新的调度器与原调度器,以使得新的调度器与原调度器分别调度对应的执行器来执行所分配到的子任务,从而共同调度当前任务。
38.在一个具体的应用场景中,当新的调度器与原调度器共同调度当前任务时,可以
基于当前任务对应的程序数据中的标志性数据对当前任务进行固定划分,从而将当前任务划分为多个子任务,并按照fifo规则将多个子任务分别分配至新的调度器与原调度器,以使得新的调度器与原调度器分别调度对应的执行器来执行所分配到的子任务,从而共同调度当前任务。其中,程序数据中的标志性数据可以为字母“a”、标点“;”或单词“in”等,具体的标志性数据可以基于实际情况进行设置,在此不做限定。
39.在一个具体的应用场景中,当新的调度器与原调度器共同调度当前任务时,还可以使新的调度器与原调度器分别重复执行当前任务,并选取执行速度最快的调度器作为当前任务的调度器,选取后,停止其他调度器。从而通过在多个调度器中选取执行效率最快的调度器进行调度,以提高任务的执行效率。
40.在一个具体的应用场景中,当目前通过一台调度器正在执行当前任务,而定时器启动,新的调度器启动并判断出当前任务未执行完毕,则新的调度器与原来的一台调度器共同调度当前任务,也就是说,此时通过两台调度器来共同调度当前任务。在一个具体的应用场景中,当目前通过两台调度器正在执行当前任务,而定时器启动,新的调度器启动并判断出当前任务未执行完毕,则新的调度器与原来的两台调度器共同调度当前任务,也就是说,此时通过三台调度器来共同调度当前任务。
41.在一个具体的应用场景中,调度器调度当前任务时,可以通过调度器获取到当前任务,再将其发送至执行器,以通过执行器具体执行当前任务的方式调度当前任务。
42.在一个具体的应用场景中,当新增一个调度器调度当前任务时,可以同时新增调度器调度过程中所需的执行器,以通过原本的执行器与新增的执行器基于各自调度器的调度共同执行当前任务,从而提高当前任务的执行效率和速度。
43.在一个具体的应用场景中,当新增一个调度器调度当前任务时,可以通过新增一套调度器的调度逻辑,与原本的调度器的调度逻辑共同调度当前任务,从而提高当前任务的执行效率和速度。
44.步骤s13:如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务。
45.当定时器启动,新的调度器启动,且通过新的调度器判断出当前任务执行完毕后,新的调度器结束,进一步通过执行完毕的原本的当前任务对应的原调度器利用分布式锁从多个分布式任务中确定新任务,并通过原调度器对应的执行器来执行新任务。其中,分布式锁为控制分布式系统之间同步访问共享资源的一种方式,可以防止干扰保证一致性。其用于保证在分布式部署的应用集群中,同一时间只能执行同一个任务。
46.其中,通过原调度器利用分布式锁从多个分布式任务中确定新任务时,可以避免设置中心化的调度平台来确定新任务的情况,从而使得任务的创建和执行不依赖任何分布式的微服务架构,使得任务的创建和执行更加简洁。
47.通过上述方法,本实施例的分布式任务的执行方法,在定时器启动时,通过启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕,如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务,能够通过调度器的新增提高当前任务的执行效率和速度;如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务,从而能够利用分布式锁确定新任务的创建和执行得任务的创建和执行不依赖任何分布式的微服务架
构,使得任务的创建和执行更加简洁,从而进一步提高了分布式任务的执行效率。
48.请参阅图2-3,图2是本技术分布式任务的执行方法另一实施例的流程示意图。图3是图2实施例中对应的分布式系统一实施方式的框架示意图。其中,本实施方式中的分布式系统以两台调度器及其对应的执行器进行说明,当调度器为多台或一台时,其框架与本实施方式类似,在此不再赘述。
49.本实施例的分布式系统30用于实现任一实施例的分布式任务的执行方法,包括定时器(scheduler)31、执行器32、调度器(dispatcher)36、事件(event)35、任务队列(queue)33以及任务(tasker)34。
50.其中,定时器31中可以配置包括调度器36的定时启动周期或定时启动具体时间,定时器31基于上述定时规则循环启动,以启动调度器36;调度器36,配置了任务34的调度规则,例如:任务初始化的方法,任务内容,任务对应的子任务数量,任务的执行方法等,调度器36包括原调度器361与新的调度器362。其中,原调度器361与新的调度器362可以分别独立地配置有调度器36的所有调度规则,能实现调度器36的所有功能。任务34,每个任务34对应有一个任务队列33;任务队列33可以包括对应的任务34的具体内容,任务队列33的每个值是任务34的子任务;执行器32包括原执行器321以及新的执行器322,其中原执行器321与原调度器361对应,新的执行器322与新的调度器362对应,执行器32用于具体执行任务34对应的子任务;事件35用于任务34创建,任务34执行,任务34结束等事件。
51.具体地,定时器31用于基于定时规则启动并启动调度器36,调度器36用于初始化任务队列33、获取任务34以及获取任务队列33中的子任务。任务34用于生成任务队列33及其中的子任务。调度器36还用于接收的定时器31的启动信息并通知执行器32通过执行任务队列33中的子任务执行任务34,调度器36还用于通知事件35执行任务事件。
52.其中,分布式系统30的具体执行步骤如下:
53.步骤s21:响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕。
54.定时器31按照配置的定时规则循环启动。而当定时器31启动时,启动新的调度器362,则新的调度器362启动后执行对应的调度规则。其中,调度规则包括任务的创建以及执行的相关规则逻辑。
55.在一个具体的应用场景中,响应于定时器31启动,启动新的调度器362,可以通过新的调度器362基于调度规则判断当前任务是否被原调度器361执行完毕。当前任务为分布式系统当前正在执行的任务。
56.在一个具体的应用场景中,响应于定时器31启动,启动新的调度器362。可以基于调度规则通过新的调度器362判断当前任务的任务队列33中是否存在需要被执行的子任务;如果当前任务34的任务队列33中不存在需要被执行的子任务,则确定当前任务34被原调度器361执行完毕;如果当前任务34的任务队列33中存在需要被执行的子任务,则确定当前任务34未被原调度器361执行完毕。
57.步骤s22:如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务,并响应于调度器的数量超过预设数量,则新增一台容器服务。
58.当通过新的调度器362判断出当前任务34没有被原调度器361执行完毕,则通过新的调度器362与原调度器361共同调度当前任务34。在一个具体的应用场景中,当通过新的
调度器362与原调度器361共同调度当前任务34时,可以同时新增新的调度器362对应的新的执行器322,以通过原执行器321与新的执行器322共同执行当前任务34,从而提高当前任务34的执行效率和速度。
59.在一个具体的应用场景中,当目前通过一台原调度器361正在调度一台原执行器321执行当前任务34,而定时器31启动,新的调度器362启动,并判断出当前任务34未被原调度器361执行完毕,则通过新的调度器362与原调度器361共同调度当前任务34,也就是说,此时通过新的调度器362与原调度器361分别调度新的执行器322与原执行器321共同执行当前任务34。
60.当同时有多台调度器共同调度当前任务时,可以通过各调度器分别调度对应的执行器执行当前任务。在一个具体的应用场景中,各调度器可以从任务队列中分别获取当前任务的子任务,并调度对应的执行器进行执行。其中,各调度器从任务队列中分别获取子任务的分配规则可以基于各调度器对应的执行器的执行状态、子任务的执行所需空间和/或子任务排列顺序等进行分配各调度器所获取的子任务。其中,具体的子任务的分配规则请参阅步骤s25。
61.响应于调度器36的新增,判断调度器36的数量是否超过预设数量,如果调度器36的数量超过了预设数量,则新增一台容器服务。其中,预设数量可以包括3台、5台、6台等,具体可以基于实际需求进行设置,在此不做限定。其中,容器服务可以用于承载调度器36,当一台容器服务上的调度器36的数量超过了预设数量时,新增一台容器服务,以通过新增的容器服务提高调度器36的启动上限,从而能够通过增加调度器36进一步提高任务的执行效率。
62.步骤s23:响应于当前任务执行完毕且未达到预设时间,关闭一台调度器,并判断剩余的调度器的数量是否超过预设数量,如果剩余的调度器的数量没有超过预设数量,则减少一台容器服务。
63.当当前任务执行完毕且当前未达到预设时间,则关闭一台调度器,并判断剩余的调度器的数量是否超过预设数量,如果调度器的数量没有超过预设数量,则减少一台容器服务,从而避免资源浪费。其中,预设时间可以包括(3/4,(n-1)/n)分钟,或其他时间段,具体可以基于实际情况进行设置,在此不做限定。其中,n为任意正整数。
64.在一个具体的应用场景中,当通过执行器32执行完当前从任务队列33中获取的子任务时,可以通过调度器36按照预设频率判断当前任务34是否已经执行完成,如果当前任务34已经执行完成,则判断当前任务34的完成时间与当前时间的间隔是否小于预设时间,如果小于,则关闭一台调度器36。其中,预设频率可以为1秒/一次、3秒/一次或6秒/一次等,具体可以基于实际情况进行设置,在此不做限定。
65.在一个具体的应用场景中,可以判断当前任务34的完成时间与当前时间的间隔是否小于定时器31的启动时间间隔的3/4~(n-1)/n,如果小于,则关闭一台调度器36,其中,可以按照各调度器36的启动时间选取被关闭的调度器36,例如:关闭启动时间最长的一台调度器36。
66.步骤s24:如果当前任务执行完毕,则通过原调度器利用redis分布式锁从多个分布式任务中确定具有创建权限的任务,将具有创建权限的任务确定为新任务。
67.当通过新的调度器362判断当前任务34执行完毕,则新的调度器362结束,通过原
调度器361利用redis分布式锁从多个分布式任务中确定具有创建权限的任务,将具有创建权限的任务确定为新任务。
68.在一个具体的应用场景中,当通过新的调度器362判断当前任务34的任务队列33中不存在需要被执行的子任务时可以进一步检查是否有新任务要创建并执行,如果没有新任务到达其创建时间,则新的调度器362,定时器31结束本次启动。如果存在至少一个新任务到达其创建时间,则可以通过新的调度器362以及原调度器361共同创建并调度新任务。
69.具体地,当创建新任务时,多个分布式任务都发起创建任务权限的请求,拿到了创建权限的任务将被创建或执行。在一个具体的应用场景中,多个分布式任务可以通过set、setnx方式竞争并获取锁,也可以使用第三方插件jedis、redisson、lettuce提供的锁功能竞争并获取redis分布式锁的锁,当某个分布式任务竞争到了redis分布式锁的锁,则获取到创建权限,该分布式任务则为需要被创建的新任务。
70.而没有竞争到锁的分布式任务等待定时器31的再次启动,以循环执行步骤s21。
71.步骤s25:将新任务对应的各子任务写入到任务队列中,通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务。
72.当确定被创建的新任务后,可以通过预设规则将新任务对应的各子任务进行初始化。其中,初始化也就是将新任务划分为对应的多个子任务的过程。其中,预设规则包括取模分片任务或按照固定子任务(1=c,2=b,3=e)等方式,具体在此不做限定。
73.在一个具体的应用场景中,固定子任务的方式可以包括基于任务对应的程序数据中的标志性数据对当前任务进行固定划分,从而将当前任务划分为多个子任务。在一个具体的应用场景中,取模分片任务的方式可以包括对任务对应的程序数据进行取模,当模值为固定的某个值或模值具有一定规律时,将模值在程序数据中的对应位置进行划分,从而将当前任务划分为多个子任务。其中,模值的一定规律可以包括“1、2、3、4、5...9”或其他规律。
74.初始化后,将各子任务写入redis分布式锁的list结构的任务队列33中。其中,list是redis技术的存储结构。响应于全部子任务写入到任务队列33中,通过调度器36调用事件35(event)执行任务开始事件。其中,子任务使用redis分布式锁的rpush的方式按顺序入栈,获取子任务的时候使用redis分布式锁的lpop方式出栈。其中,redis分布式锁的rpush命令用于将一个或多个子任务插入到任务队列33的尾部。redis分布式锁的lpop命令用于取出并返回任务队列33的第一个子任务。
75.通过调度器36从任务队列33中获取各子任务,并调度执行器32执行各子任务,直至任务队列33中不存在需要被执行的子任务。在一个具体的应用场景中,可以通过调度器36基于fifo规则从任务队列33中获取子任务,通过执行器32执行子任务,并调用事件35执行任务执行事件。其中,fifo规则为先入先出。
76.在一个具体的应用场景中,当新的调度器362与原调度器361共同调度当前任务时,此时任务队列33已经被写入当前任务对应的子任务,此时,任务队列33按照fifo规则,即先入先出的规则将子任务分配给前来获取的新的调度器362或原调度器361,而新的调度器362或原调度器361从任务队列33获取子任务的时机基于新的调度器362或原调度器361自身执行上一个子任务的时间以及启动时间而定。
77.具体地,调度器启动,即从任务队列获取子任务,任务队列按照fifo规则将一个子任务分配给调度器,调度器获取并调度执行器执行该子任务,该子任务执行完毕后,调度器再从任务队列获取子任务,依次类推,各调度器按照自身执行上一个子任务的时间以及启动时间从任务队列获取子任务。
78.在一个具体的应用场景中,当任务队列33中存在需要被执行的子任务时,通过各调度器通过redis分布式锁的lpop方式获取任务队列33中的子任务,如果获取不到子任务,则通过调度器检查是否有新任务要创建并执行,即步骤s24。
79.而在子任务的执行过程中,响应于从任务队列33中获取到子任务,通过redis分布式锁的llen判断任务队列33中是否存在需要被执行的子任务;如果任务队列33中存在需要被执行的子任务,则继续执行通过执行器32依次从任务队列33中获取并执行各子任务,直至任务队列33中不存在需要被执行的子任务的步骤;如果任务队列33中不存在需要被执行的子任务,则执行完当前获取的子任务后,调用事件35执行任务结束事件。
80.redis的llen命令用于返回任务队列33的长度。如果列表key不存在,则key被解释为一个空列表,返回0。在一个具体的应用场景中,响应于从任务队列33中获取到子任务,通过redis分布式锁的llen判断任务队列33中是否存在需要被执行的子任务,如果llen返回0,则说明此时获取的子任务为任务队列33中最后一个需要被执行的子任务,则当该子任务执行完成时,调用事件35执行任务tasker结束事件,如果llen返回的值大于0,则继续通过redis的lpop方式从任务队列33中获取子任务,再通过执行器32进行执行。
81.当所有的子任务执行完毕后,即说明新任务已执行完成,则等待定时器的再次启动,以循环执行步骤s21。
82.通过上述步骤,本实施例的分布式任务的执行方法通过在定时器启动,但当前任务未执行完成时,通过新的调度器与原调度器共同调度当前任务,能够通过调度器的新增提高当前任务的执行效率和速度,且还在调度器数量超过预设数量时,新增容器服务,以提高调度器的启动上限,从而进一步提高各执行器的执行效率,并在当前任务执行完毕以及未达到定时器的再次启动时间,关闭一台调度器,并在调度器的数量没有超过预设数量时,减少容器服务,从而能够基于任务的执行状态实现扩缩容,加强了执行器的执行能力,加快了任务执行速度,避免高峰期任务执行效率低下且执行时间长的情况以及资源浪费的情况。且利用分布式锁确定新任务的创建和执行得任务的创建和执行不依赖任何分布式的微服务架构,使得任务的创建和执行更加简洁,从而进一步提高了分布式任务的执行效率,且本实施例通过避免采用脚本执行分布式任务,减少了服务部署资源的浪费。
83.请参阅图4,图4是本技术分布式任务的执行装置一实施例的框架示意图。分布式任务的执行装置40包括判断模块41、调度模块42、执行模块43。判断模块41,用于响应于定时器启动,启动新的调度器,并通过新的调度器判断当前任务是否被原调度器执行完毕;调度模块42用于如果当前任务未被原调度器执行完毕,则通过新的调度器与原调度器共同调度当前任务;执行模块43,用于如果当前任务被原调度器执行完毕,则通过原调度器利用分布式锁从多个分布式任务中确定新任务,并通过执行器执行新任务。
84.调度模块42还用于响应于调度器的数量超过预设数量,则新增一台容器服务。
85.调度模块42还用于响应于当前任务执行完毕且未达到预设时间,关闭一台调度器,并判断剩余的调度器的数量是否超过预设数量;如果剩余的调度器的数量没有超过预
设数量,则减少一台容器服务。
86.调度模块42还用于通过新的调度器与原调度器分别调度对应的执行器执行当前任务。
87.判断模块41还用于响应于定时器启动,启动新的调度器,基于调度规则通过新的调度器判断当前任务的任务队列中是否存在需要被执行的子任务;如果当前任务的任务队列中不存在需要被执行的子任务,则确定当前任务被原调度器执行完毕;如果当前任务的任务队列中存在需要被执行的子任务,则确定当前任务未被原调度器执行完毕。
88.执行模块43还用于通过原调度器利用redis分布式锁从多个分布式任务中确定具有创建权限的任务;将具有创建权限的任务确定为新任务。
89.执行模块43还用于将新任务对应的各子任务写入到任务队列中;通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务。
90.执行模块43还用于通过预设规则将新任务进行初始化,得到新任务对应的各子任务;将各子任务写入redis分布式锁的list结构的任务队列中;响应于全部子任务写入到任务队列中,调用event执行任务开始事件。
91.执行模块43还用于通过原调度器利用fifo规则依次从任务队列中获取各子任务,调用执行器执行各子任务,并调用event执行任务执行事件。
92.执行模块43还用于响应于原调度器从任务队列中获取到子任务,通过redis分布式锁的llen判断任务队列中是否还存在需要被执行的子任务;如果任务队列中还存在需要被执行的子任务,则继续执行通过原调度器从任务队列中获取各子任务,并调用原调度器对应的执行器执行各子任务,直至任务队列中不存在需要被执行的子任务的步骤;如果任务队列中不存在需要被执行的子任务,则执行完当前获取的子任务后,调用event执行任务结束事件。
93.上述方案,能够仅提高分布式任务的执行效率。
94.请参阅图5,图5是本技术电子设备一实施例的框架示意图。电子设备50包括相互耦接的存储器51和处理器52,处理器52用于执行存储器51中存储的程序指令,以实现上述任一实施例的分布式任务的执行方法的步骤。在一个具体的实施场景中,电子设备50可以包括但不限于:微型计算机、服务器,此外,电子设备50还可以包括笔记本电脑、平板电脑等移动设备,在此不做限定。
95.具体而言,处理器52用于控制其自身以及存储器51以实现上述任一分布式任务的执行方法实施例的步骤。处理器52还可以称为cpu(central processing unit,中央处理单元)。处理器52可能是一种集成电路芯片,具有信号的处理能力。处理器52还可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器52可以由集成电路芯片共同实现。
96.上述方案,能够提高分布式任务的执行效率。
97.请参阅图6,图6为本技术计算机可读存储介质一实施例的框架示意图。计算机可
读存储介质60存储有能够被处理器运行的程序指令601,程序指令601用于实现上述任一实施例的分布式任务的执行方法的步骤。
98.上述方案,能够提高分布式任务的执行效率。
99.在本技术所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
100.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
101.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
102.集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施方式方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献