CN115129438A - 任务分布式调度的方法和装置 - Google Patents
任务分布式调度的方法和装置 Download PDFInfo
- Publication number
- CN115129438A CN115129438A CN202110325235.8A CN202110325235A CN115129438A CN 115129438 A CN115129438 A CN 115129438A CN 202110325235 A CN202110325235 A CN 202110325235A CN 115129438 A CN115129438 A CN 115129438A
- Authority
- CN
- China
- Prior art keywords
- task
- fragment
- priority
- fragments
- scheduling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Abstract
本发明公开了任务分布式调度的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收应用系统的待处理任务,根据待处理任务的任务信息确定待处理任务的分片总数,然后将待处理任务写入对应优先级的任务列表;任务信息包括:任务标识和优先级;异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。该实施方式能够在复杂多变的任务分布式处理需求下,高效、健壮、平滑地支持大任务的分布式调度。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种任务分布式调度的方法和装置。
背景技术
如今信息系统的复杂程度越来越高,系统任务分布式处理需求也随着互联网+热潮的到来越发复杂多变,信息系统中的大任务分布式处理变得越来越重要。现有技术中的任务分布式调度的方案无法同时保证大任务高效、健壮和平滑地分布式调度。
发明内容
有鉴于此,本发明实施例提供一种任务分布式调度的方法和装置,能够在复杂多变的任务分布式处理需求下,高效、健壮、平滑地支持大任务的分布式调度。
为实现上述目的,根据本发明实施例的一个方面,提供了一种任务分布式调度的方法,包括:
接收应用系统的待处理任务,根据所述待处理任务的任务信息确定所述待处理任务的分片总数,然后将所述待处理任务写入对应优先级的任务列表;所述任务信息包括:任务标识和优先级;
异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
可选地,所述任务分片调度队列包括:任务标识、队列容量和最大任务分片序号;
异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列,包括:对于任一优先级,监控所述任一优先级的任务分片调度队列的最大任务分片序号,当所述最大任务分片序号小于所述任一优先级的任务分片调度队列的队列容量时,从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,直到所述任一优先级的任务分片调度队列的最大任务分片序号等于队列容量、或者所述任一优先级的任务列表为空。
可选地,所述任务信息包括:任务规模和任务分片粒度;
所述方法还包括:在从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列之前,根据任务处理集群的线程总数和所述任一优先级的线程比例,确定所述任一优先级的任务分片消费线程数,根据任务处理集群实例总数和所述任一优先级的任务分片消费线程数,确定所述任一优先级的任务分片调度队列的队列容量。
可选地,所述任务信息包括:任务标识、已调度分片数和分片总数;所述任务列表包括任务游标;
从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,包括:根据所述任一优先级的任务列表的任务游标,确定目标任务;从所述任一优先级的任务列表中获取所述目标任务的已调度分片数和分片总数;当所述目标任务的已调度分片数小于分片总数时,构建所述目标任务的下一任务分片信息,并放入所述任一优先级的任务分片调度队列队尾,同时更新所述目标任务的已调度分片数和所述任一优先级的任务列表的任务游标;当所述目标任务的已调度分片数量等于分片总数时,将所述目标任务从所述任一优先级的任务列表中删除,更新所述任一优先级的任务列表的任务游标,以所述任务游标指向的下一任务作为目标任务;循环分配目标任务的任务分片到所述任一优先级的任务分片调度队列。
可选地,异步消费每个优先级的任务分片调度队列中的任务分片,包括:
对于任一优先级,异步利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片;若所述任一优先级的任务分片调度队列中不存在任务分片,则间隔预设等待时长之后,异步按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片。
可选地,所述方法还包括:
若间隔预设等待时长之后,所述任一优先级的任务分片调度队列中仍然不存在任务分片,则异步按照从前到后的顺序从下一个优先级的任务分片调度队列中获取一个任务分片,直到所有任务分片调度队列均为空。
可选地,所述方法还包括:
在利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片之前,根据任务处理集群的线程总数和每个优先级的线程比例,确定除最高优先级以外的各个优先级的任务分片消费线程数,以所述线程总数与所述各个优先级的任务分片消费线程数之间的差值作为所述最高优先级的任务分片消费线程数。
可选地,所述方法还包括:
在根据所述待处理任务的任务信息确定所述待处理任务的分片总数之后,将所述待处理任务写入任务执行进度哈希表;所述任务执行进度哈希表包括:任务标识、开始执行时间、任务状态、执行完成分片数、分片总数和优先级;
在异步消费每个优先级的任务分片调度队列中的任务分片之后,更新所述任务执行进度哈希表中与所述消费到的任务分片对应任务的属性信息;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务执行进度哈希表中与执行完成的任务分片对应任务的属性信息。
可选地,所述方法还包括:
监控所述任务执行进度哈希表,当所述任务执行进度哈希表中存在执行完成的任务时,将执行完成的任务从所述任务执行进度哈希表中删除。
可选地,所述方法还包括:
在异步消费每个优先级的任务分片调度队列中的任务分片之后,将消费到的任务写入任务分片有序集合;所述任务分片有序集合包括:任务标识、分片标识和任务分片开始执行时间;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务分片有序集合中执行完成的任务分片的属性信息;
异步根据所述任务分片有序集合中每个任务分片的任务分片开始执行时间确定超时任务分片,将所述超时任务分片从所述任务分片有序集合中删除,并放入对应优先级的任务分片调度队列队尾,等待任务分片消费线程补偿执行。
可选地,所述任务信息还包括:任务分片处理信息和的任务完成通知服务信;
调用应用系统中的程序幂等执行消费到的任务分片,包括:根据所述消费到的任务分片的任务分片处理信息,调用应用系统的任务分片处理服务幂等执行所述消费到的任务分片;
所述方法还包括:在调用应用系统中的程序幂等执行消费到的任务分片之后,根据执行完成的任务的任务完成通知服务信息调用应用系统的任务完成通知服务,向应用系统发出表明任务执行完成的通知信息。
根据本发明实施例的第二方面,提供一种任务分布式调度的装置,包括:
任务接收单元,接收应用系统的待处理任务,根据所述待处理任务的任务信息确定所述待处理任务的分片总数,然后将所述待处理任务写入对应优先级的任务列表;所述任务信息包括:任务标识和优先级;
任务分片调度单元,异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
任务分片执行单元,异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
可选地,所述任务分片调度队列包括:任务标识、队列容量和最大任务分片序号;
所述任务分片调度单元异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列,包括:对于任一优先级,监控所述任一优先级的任务分片调度队列的最大任务分片序号,当所述最大任务分片序号小于所述任一优先级的任务分片调度队列的队列容量时,从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,直到所述任一优先级的任务分片调度队列的最大任务分片序号等于队列容量、或者所述任一优先级的任务列表为空。
可选地,所述任务信息包括:任务规模和任务分片粒度;
所述任务分片调度单元还用于:在从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列之前,根据任务处理集群的线程总数和所述任一优先级的线程比例,确定所述任一优先级的任务分片消费线程数,根据任务处理集群实例总数和所述任一优先级的任务分片消费线程数,确定所述任一优先级的任务分片调度队列的队列容量。
可选地,所述任务信息包括:任务标识、已调度分片数和分片总数;所述任务列表包括任务游标;
所述任务分片调度单元从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,包括:根据所述任一优先级的任务列表的任务游标,确定目标任务;从所述任一优先级的任务列表中获取所述目标任务的已调度分片数和分片总数;当所述目标任务的已调度分片数小于分片总数时,构建所述目标任务的下一任务分片信息,并放入所述任一优先级的任务分片调度队列队尾,同时更新所述目标任务的已调度分片数和所述任一优先级的任务列表的任务游标;当所述目标任务的已调度分片数量等于分片总数时,将所述目标任务从所述任一优先级的任务列表中删除,更新所述任一优先级的任务列表的任务游标,以所述任务游标指向的下一任务作为目标任务;循环分配目标任务的任务分片到所述任一优先级的任务分片调度队列。
可选地,所述任务分片执行单元异步消费每个优先级的任务分片调度队列中的任务分片,包括:
对于任一优先级,异步利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片;若所述任一优先级的任务分片调度队列中不存在任务分片,则间隔预设等待时长之后,异步按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片。
可选地,所述任务分片执行单元还用于:
若间隔预设等待时长之后,所述任一优先级的任务分片调度队列中仍然不存在任务分片,则异步按照从前到后的顺序从下一个优先级的任务分片调度队列中获取一个任务分片,直到所有任务分片调度队列均为空。
可选地,所述任务分片执行单元还用于:
在利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片之前,根据任务处理集群的线程总数和每个优先级的线程比例,确定除最高优先级以外的各个优先级的任务分片消费线程数,以所述线程总数与所述各个优先级的任务分片消费线程数之间的差值作为所述最高优先级的任务分片消费线程数。
可选地,所述任务接收单元还用于:在根据所述待处理任务的任务信息确定所述待处理任务的分片总数之后,将所述待处理任务写入任务执行进度哈希表;所述任务执行进度哈希表包括:任务标识、开始执行时间、任务状态、执行完成分片数、分片总数和优先级;
所述任务分片片调度单元还用于:在异步消费每个优先级的任务分片调度队列中的任务分片之后,更新所述任务执行进度哈希表中与所述消费到的任务分片对应任务的属性信息;
所述任务分片执行单元还用于:在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务执行进度哈希表中与执行完成的任务分片对应任务的属性信息。
可选地,所述任务分片执行单元还用于:监控所述任务执行进度哈希表,当所述任务执行进度哈希表中存在执行完成的任务时,将执行完成的任务从所述任务执行进度哈希表中删除。
可选地,所述任务分片执行单元还用于:在异步消费每个优先级的任务分片调度队列中的任务分片之后,将消费到的任务写入任务分片有序集合;所述任务分片有序集合包括:任务标识、分片标识和任务分片开始执行时间;在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务分片有序集合中执行完成的任务分片的属性信息;
所述装置还包括任务补偿调度单元,用于:异步根据所述任务分片有序集合中每个任务分片的任务分片开始执行时间确定超时任务分片,将所述超时任务分片从所述任务分片有序集合中删除,并放入对应优先级的任务分片调度队列队尾,等待任务分片消费线程补偿执行。
可选地,所述任务信息还包括:任务分片处理信息和的任务完成通知服务信;
所述任务分片执行单元调用应用系统中的程序幂等执行消费到的任务分片,包括:根据所述消费到的任务分片的任务分片处理信息,调用应用系统的任务分片处理服务幂等执行所述消费到的任务分片;
所述任务分片执行单元还用于:在调用应用系统中的程序幂等执行消费到的任务分片之后,根据执行完成的任务的任务完成通知服务信息调用应用系统的任务完成通知服务,向应用系统发出表明任务执行完成的通知信息。
根据本发明实施例的第三方面,提供一种任务分布式调度的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一方面提供的方法。
根据本发明实施例的第四方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一方面提供的方法。
上述发明中的一个实施例具有如下优点或有益效果:通过采用任务动态分片机制对待执行任务进行分片,能够实现大任务精细化处理,支持不同大小粒度的系统任务高效、稳定、并发地分布式平滑调度;通过设置不同优先级的任务分片调度队列,能够实现不同优先级任务的灵活调度;通过任务执行进度表实现系统任务的准实时进度监控;通过任务执行超时重新调度机制,能够实现系统任务的健壮处理。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是本发明实施例的任务分布式调度的装置的主要模块示意图;
图2是本发明实施例中任务分片调度的装置的总体架构示意图;
图3是本发明可选实施例中任务分片调度的流程示意图;
图4是本发明可选实施例中从任务调度队列中获取任务分片的流程示意图;
图5是本发明可选实施例中任务分片消费的流程示意图;
图6是本发明可选实施例中任务列表、任务分片调度队列和任务执行进度表的示意图;
图7是本发明可选实施例中任务状态和任务分片状态的示意图;
图8是本发明可选实施例中任务调度处理的方法的流程示意图;
图9是本发明实施例的任务分布式调度的方法的主要流程的示意图;
图10是本发明实施例可以应用于其中的示例性系统架构图;
图11是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本发明提供了任务分布式调度的方法、装置、电子设备和计算机可读介质。
图1是本发明实施例的任务分布式调度的装置的主要模块示意图,如图1所示,任务分布式调度的装置100包括:
任务接收单元101,接收应用系统的待处理任务,根据待处理任务的任务信息确定待处理任务的分片总数,然后将待处理任务写入对应优先级的任务列表;
任务分片调度单元102,异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
任务分片执行单元103,异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
图2是本发明可选实施例中任务分片调度的装置的总体架构示意图,如图2所示,任务接收单元101负责应用系统任务的接收、存储和任务动态分片管理,来自外部应用系统的待处理任务被存储至任务列表中。任务分片调度单元102负责优先级任务的任务分片分配和平滑调度管理,各个任务被划分成多个任务分片之后存入任务分片调度队列。任务分片执行单元103负责任务分片的高效幂等执行,还可以负责任务及其分片执行进度的监控管理。
任务信息是指待处理任务的相关信息,其具体内容可以根据实际情况进行选择性设定,例如包括如下内容中的任意一项或多项:任务标识、任务名称、优先级等。任务分片指应用系统的任务中的一个相对独立的可直接处理的部分任务,任务被分解成若干个相互独立的部分,这些部分可以先后分别被直接处理,所有任务部分均被处理完成即任务处理完成。
本发明通过采用任务动态分片机制对待执行任务进行分片,能够实现大任务精细化处理,支持不同大小粒度的系统任务高效、稳定、并发地分布式平滑调度;通过设置不同优先级的任务分片调度队列,能够实现不同优先级任务的灵活调度;通过任务执行进度表实现系统任务的准实时进度监控。
根据待处理任务的任务信息确定待处理任务的分片总数的方式可以选择性设定。示例性地,任务信息包括任务规模和任务分片粒度,根据每个任务的任务规模和任务分片粒度确定分片总数,如用任务规模除以任务分片粒度(小数位向上取整)得到分片总数。任务规模是应用系统传送过来的参数,该参数的取值可以根据任务中包含的任务明细条目数量和每个任务明细条目的处理效率来确定。任务分片粒度即任务分片中包含的任务明细数据条目数量,用于指定任务分片的大小,具体根据任务明细条目的处理效率进行配置,设置过小时任务分片会太小影响任务总体执行效率,设置过大时任务处理可能不够平滑。实际工作中可根据信息系统任务特点进行性能评估或测试后选取合适的任务分片粒度。
本发明实施例按照任务优先级分别为每个优先级设置一个任务列表,在确定好任务的分片总数后,根据任务优先级将任务存储到对应优先级的任务列表中。优先级的标识可以选择性设定。例如优先级1号为最高优先级,接下来是2号,依次排列。任务列表用于存储所有来自应用系统的未被任务分片调度单元102调度完成的任务。采用任务表管理所有未调度完成的任务,便于集中管理和调度,也便于使任务接收和分片、与任务分片调度异步执行。任务接收、分片与存储处理完成后,任务分片调度单元102异步调用对任务列表中的任务分片进行调度。每个任务调度完成(即该任务的所有任务分片都被写入任务分片调度队列)后,任务分片调度单元102可以给应用系统返回调度成功。
可选地,任务分片调度队列包括:任务标识、队列容量和最大任务分片序号。任务分片调度单元102异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列,包括:对于任一优先级,监控该任一优先级的任务分片调度队列的最大任务分片序号,当最大任务分片序号小于该任一优先级的任务分片调度队列的队列容量时,从该任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列,直到该任一优先级的任务分片调度队列的最大任务分片序号等于队列容量、或者该任一优先级的任务列表为空。
本实施例中,任务分片调度队列中任务分片的序号从1开始逐渐自增,最大任务分片序号的取值代表任务分片调度队列中任务分片的数量。当任务分片调度队列中任务分片小于该任务分片调度队列的队列容量时,表明该任务分片调度队列中存在多余的位置、可以存入多待调度的任务分片。每次从任务列表中获取的任务分片的数量可以选择性设定,例如一个、两个或更多个。通常情况下,同时获取的任务分片不宜过多,以保证任务列表中后到任务的任务分片也能被及时分配调度到。
图3是本发明可选实施例中任务分片调度的流程示意图。以对第2优先级的任务列表中的任务分片进行调度为例,如图3所示,任务分片调度的流程包括:
步骤S301、监控第2优先级的任务分片调度队列;
步骤S302、判断该任务分片调度的最大任务分片序号是否小于该任务分片调度的队列容量;若是,则跳转至步骤S303,否则间隔预设时长后跳转至步骤S301;
步骤S303、判断第2优先级的任务列表中是否存在任务分片;若是,则跳转至步骤S304,否则,表明第2优先级的任务列表中所有任务的任务分片被调度完成,流程结束;
步骤S304、从第2优先级的任务列表中获取一个任务分片放入第2优先级的任务分片调度队列,然后跳转至步骤S301。
通过监控每个优先级的任务分片调度队列的最大任务分片序号,并在最大任务分片序号小于对应优先级的任务分片调度队列的队列容量时,从对应优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列中,能够保证任务分片调度队列中始终有较多的任务分片可供任务分片执行单元103消费和执行,提高大任务分布式处理的效率和高并发性。
任务信息还可以包括:任务规模和任务分片粒度。任务分片调度单元102还可以用于:在从任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列之前,根据任务处理集群的线程总数和该任一优先级的线程比例,确定该任一优先级的任务分片消费线程数,根据任务处理集群实例总数和该任一优先级的任务分片消费线程数,确定该任一优先级的任务分片调度队列的队列容量。
实际应用过程中,可以以任务处理集群实例总数和对应优先级的任务分片消费线程数的乘积作为对应优先级的任务分片调度队列的队列容量。当然,也可以在该乘积的基础上,扩大一定倍数得到队列容量。该倍数可以选择性设定,例如2倍、3倍或更多倍。通过将上述乘积扩大一定倍数,能够多获取一些任务分片放到任务分片调度队列中供消费,避免到达下次任务分片调度的执行时间之前任务分片调度队列中的任务分片已被处理完,保证任务分片调度队列中一直有任务分片可消费,提高大任务分布式处理的效率和高并发性。
例如当系统设置了3个优先级,任务处理集群实例总数为5,线程数量比例配置为4:2:1,线程总数配置为16时,2号优先级的任务分片调度队列容量大小为:Math.Round(5×(16×2/(4+2+1))×2)=46。其中,Math.Round代表Java中的取整函数。
采用这种方式确定任务分片调度队列的队列容量,能够实现调度系统的负载均衡,提高大任务分布式处理的稳定性。
可选地,任务信息包括:任务标识、已调度分片数和分片总数;任务列表包括任务游标。任务分片调度单元从任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列,包括:根据该任一优先级的任务列表的任务游标,确定目标任务;从该任一优先级的任务列表中获取目标任务的已调度分片数和分片总数;当目标任务的已调度分片数小于分片总数时,构建目标任务的下一任务分片信息,并放入该任一优先级的任务分片调度队列队尾,同时更新目标任务的已调度分片数和该任一优先级的任务列表的任务游标;当目标任务的已调度分片数量等于分片总数时,将目标任务从该任一优先级的任务列表中删除,更新该任一优先级的任务列表的任务游标,以任务游标指向的下一任务作为目标任务;循环分配目标任务的任务分片到该任一优先级的任务分片调度队列。
图4是本发明可选实施例中从任务调度队列中获取任务分片的流程示意图。以图3中的步骤S304为例,如图4所示,从任务调度队列中获取任务分片的流程包括:
步骤S401、根据第2优先级的任务列表的任务游标,确定目标任务i;
步骤S402、判断任务i的已调度分片数是否小于分片总数;若是,则跳转至步骤S403,否则i+1后跳转至步骤S401;
步骤S403、构建任务i的下一个任务分片,放入第2优先级的任务分片调度队列队尾。
需要说明的是,本实施例中,当任务游标达到任务列表尾部之后重新设置到任务列表首部。在将目标任务的任务分片分配到对应优先级的任务分片调度队列之后,需要更新任务列表中目标任务的已调度分片数。通过设置任务游标,便于快速确定任务列表中下一个需要调度的任务的任务分片,提高调度效率。
将任务列表中的任务分配到对应优先级的任务分片调度队列中的过程即任务分片调度的过程。任务分片调度单元102循环处理所有优先级的任务分片调度队列各一次后任务分片调度结束。本发明实施例的调度装置可以采用高可用Redis(一个Key-Value数据库)集群存储和管理任务列表、任务分片调度队列,这些内部存储对应用系统均无感知。整个任务分片调度过程涉及到的所有Redis操作可以封装到一个Lua(一种脚本语言)脚本中执行,以保证调度操作的原子性。
任务分片执行单元103异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
可选地,任务分片执行单元103异步消费每个优先级的任务分片调度队列中的任务分片,包括:对于任一优先级,异步利用该任一优先级的线程池中的线程,按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片;若该任一优先级的任务分片调度队列中不存在任务分片,则间隔预设等待时长之后,异步按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片。
任务分片调度可以异步多次执行,例如在任务接收时异步执行、任务分片消费后异步执行和系统定时(时间可配置)执行。本实施例在未从任务分片调度队列中消费到任务分片时间隔预设等待时长之后再次消费,能够避免遗漏未消费的任务分片。
可选地,任务分片执行单元103还用于:若间隔预设等待时长之后,该任一优先级的任务分片调度队列中仍然不存在任务分片,则异步按照从前到后的顺序从下一个优先级的任务分片调度队列中获取一个任务分片,直到所有任务分片调度队列均为空。
图5是本发明可选实施例中任务分片消费的流程示意图。假设优先级数量为2个,分别为第1优先级和第2优先级。以第2优先级的线程池中的线程消费任务分片为例,如图5所示,任务分片消费的流程包括:
步骤S501、判断第2优先级的任务分片调度队列中是否存在任务分片;若是,则跳转至步骤S502,否则间隔预设时长后跳转至步骤S503;
步骤S502、从第2优先级的任务分片调度队列中消费一个任务分片;
步骤S503、判断第2优先级的任务分片调度队列中是否存在任务分片;若是,则跳转至步骤S502,否则跳转至步骤S504;
步骤S504、判断第3优先级的任务分片调度队列中是否存在任务分片;若是,则跳转至步骤S505,否则间隔预设时长后跳转至步骤S506;
步骤S505、从第3优先级的任务分片调度队列中消费一个任务分片;
步骤S506、判断第3优先级的任务分片调度队列中是否存在任务分片;若是,则跳转至步骤S505;否则表明所有优先级的任务分片调度队列中的任务分片已全部消费完,流程结束。
本实施例中,在某个优先级的任务分片消费完之后,利用该优先级的线程池处理其他优先级的任务分片,能够提高线程池利用率,提高任务分布式调度效率。
可选地,任务分片执行单元103还用于:在利用任一优先级的线程池中的线程,按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片之前,根据任务处理集群的线程总数和每个优先级的线程比例,确定除最高优先级以外的各个优先级的任务分片消费线程数,以线程总数与各个优先级的任务分片消费线程数之间的差值作为最高优先级的任务分片消费线程数。本实施例能够在充分利用所有线程的基础上保证各个优先级任务的执行效率。
例如,当应用系统设置了3个优先级,线程数量比例配置为4:2:1,线程总数配置为16时,2号优先级的任务分片消费线程数为Math.Round(16*2/(4+2+1))=5,3号优先级的任务分片消费线程数为2,1号优先级的任务分片消费线程数为16-5-2=9。
将任务分片调度队列中任务分片消费并幂等执行的过程即任务分片执行的过程。整个任务分片执行过程涉及到的所有Redis操作可以封装到一个Lua(一种脚本语言)脚本中执行,以保证调度操作的原子性。
可选地,任务接收单元101还用于:在根据待处理任务的任务信息确定待处理任务的分片总数之后,将待处理任务写入任务执行进度哈希表;任务执行进度哈希表包括:任务标识、开始执行时间、任务状态、执行完成分片数、分片总数和优先级。任务分片调度单元102还用于:在异步消费每个优先级的任务分片调度队列中的任务分片之后,更新任务执行进度哈希表中与消费到的任务分片对应任务的属性信息。任务分片执行单元103还用于:在调用应用系统中的程序幂等执行消费到的任务分片之后,更新任务执行进度哈希表中与执行完成的任务分片对应任务的属性信息。进一步地,任务分片执行单元103还用于:监控任务执行进度哈希表,当任务执行进度哈希表中存在执行完成的任务时,将执行完成的任务从任务执行进度哈希表中删除。任务执行进度哈希表中存储所有未执行完成的任务。通过设置任务执行进度表能够实现系统任务的准实时进度监控。
可选地,任务分片执行单元103还用于:在异步消费每个优先级的任务分片调度队列中的任务分片之后,将消费到的任务写入任务分片有序集合。任务分片有序集合包括:任务标识、分片标识和任务分片开始执行时间。在调用应用系统中的程序幂等执行消费到的任务分片之后,更新任务分片有序集合中执行完成的任务分片的属性信息。本发明实施例的装置还包括任务补偿调度单元(图中未示出),用于异步根据任务分片有序集合中每个任务分片的任务分片开始执行时间确定超时任务分片,将超时任务分片从任务分片有序集合中删除,并放入对应优先级的任务分片调度队列队尾,等待任务分片消费线程补偿执行。
本发明实施例中,每个正在执行的任务对应一个任务分片有序集合,任务分片有序集合中每个元素代表一个正在执行的任务分片。如图6所示,每个元素具有score属性,元素的score值代表对应任务分片开始执行的时间。将超时任务分片从任务分片有序集合中删除以及放入任务分片调度队列队尾的执行顺序可以选择性设定,例如将超时任务分片从任务分片有序集合中删除的同时放入对应优先级的任务分片调度队列队尾,再例如将超时任务分片从任务分片有序集合中删除之后再放入对应优先级的任务分片调度队列队尾。本发明实施例通过任务执行超时重新调度机制,能够实现系统任务的健壮处理。
可选地,任务信息还包括:任务分片处理信息和的任务完成通知服务信。任务分片执行单元103调用应用系统中的程序幂等执行消费到的任务分片,包括:根据消费到的任务分片的任务分片处理信息,调用应用系统的任务分片处理服务幂等执行消费到的任务分片。任务分片执行单元103还用于:在调用应用系统中的程序幂等执行消费到的任务分片之后,根据执行完成的任务的任务完成通知服务信息调用应用系统的任务完成通知服务,向应用系统发出表明任务执行完成的通知信息。
任务分片处理服务是指用于执行任务的方法。每个任务的不同任务分片的执行方法是相同的。任务完成通知服务是指用于异步调用应用程序提供的接口向应用程序发出通知的方法。本实施例中,用于执行每个任务的方法以及发出通知的方法由应用系统定义,使得应用系统可以根据实际情况进行个性化设置,满足应用系统的多样化需求。
本发明实施例中任务分布式调度的装置实现成一个独立的组件,与应用系统运行在同一个操作系统进程内。与发起复杂大任务执行的应用系统部署运行在同一个进程中,并支持分布式集群部署,以保证系统整体大任务分布式处理的高可用性、容错性和高并发性。例如实现成Java语言中一个Jar包,或者C#语言的一个DLL(Dynamic Link Library,动态链接库)。
图8是本发明可选实施例中任务调度处理的流程示意图。本实施例中,任务分布式调度的装置包含任务接收单元、任务分片调度单元、任务分片执行单元和任务补偿调度单元。其中,任务接收单元负责应用系统任务的接收、存储和任务动态分片管理;任务分片调度单元负责优先级任务的任务分片分配和平滑调度管理;任务分片执行单元负责任务分片的高效幂等执行和任务及其分片执行进度的监控管理;任务补偿调度单元负责执行超时任务分片的识别和重新调度处理。装置内部采用高可用Redis集群存储和管理任务列表、任务分片调度队列和任务执行进度表,对应用系统无感知。
本发明实施例中任务分布式调度的装置实现一个任务接收单元,供应用系统发起任务的分布式执行;按照任务接收的顺序和优先级依次驱动任务的分片、调度、执行和出错处理,并在任务最终完成后通知应用系统。基于本发明实施例中任务分布式调度装置统一进行规范约定,并制定标准化服务接口,在相关规范约定的指导下,从任务接收与分片、优先级任务分片调度、任务分片幂等执行、任务分片补偿调度、Redis数据结构和任务状态几个部分入手,分别进行落地实现。
(1)任务接收与分片
本发明实施例中任务分布式调度的装置提供任务接收接口,用于接收任务信息、任务分片处理服务和任务完成通知服务。任务信息包括但不限于:任务Id(全局唯一)、任务名称、任务规模和任务优先级等信息。任务分片处理服务和任务完成通知服务可以是一个Java或C#类方法,支持静态方法或Bean方法,均由应用系统提供;任务分片处理服务用于处理任务单个分片,支持幂等性。任务接收单元接收到任务后立即进行任务的动态分片和存储处理。
任务动态分片:按照配置的任务分片粒度,结合当前任务的任务规模,用任务规模除以任务粒度(小数位向上取整)得到分片总数。计算好任务分片总数后根据任务优先级将任务存储到对应的Redis任务列表中,同时将任务初始进度信息写入Redis任务执行进度哈希表。任务列表按照任务优先级分别为每个优先级设置一个任务列表,任务按照优先级分别存储到对应优先级的任务列表中。任务进度表不分优先级,所有任务存储到同一个任务执行进度哈希表中。
任务接收、分片与存储处理完成后异步调用优先级任务分片调度服务进行处理,并立即给应用系统调用返回调度成功通知。
任务优先级数量可以在系统启动前进行配置其取值可以选择性设置,例如2个、3个或更多个。
(2)优先级任务分片调度
此部分负责从Redis任务列表中构造任务分片,并放入任务分片调度队列,再由任务分片消费线程去按顺序消费,最后提交任务分片至执行服务进行处理。
任务列表提供任务游标哈希表,记录每一个优先级任务列表中任务调度的当前待调度任务序号,即游标,初始值为0,从列表队首开始。Redis任务列表中的任务信息属性包含但不限于:任务Id、任务名称、任务规模、任务状态(图7中示出的任务分片执行状态)、任务调度时间、分片总数、已调度分片数和任务分片处理服务信息。
任务分片调度队列按照优先级分为多个Redis列表,不同列表仅存储对应优先级的任务分片。每个任务分片调度队列都设置有容量大小,该值设置为任务处理集群实例总数(该数值默认为16个,在系统启动前进行配置)*单实例该优先级任务分片消费线程数*2。Redis任务分片调度队列中存储的任务分片信息属性包含但不限于:任务Id、任务名称、分片总数、当前分片序号(从1开始),分片处理状态(图7中示出的任务调度执行状态)和任务分片处理服务。
在进行优先级任务分片调度时,循环处理所有的任务分片调度队列,循环检查当前优先级任务分片调度队列中的任务分片数量,当任务分片数量小于当前优先级任务分片调度队列容量时,从对应优先级的任务列表中根据其任务游标值获取当前任务,再解析数据获取当前任务的已调度分片数和分片总数。当已调度分片数小于分片总数时,构建下一任务分片信息,并放入对应优先级的任务分片调度队列队尾,同时更新当前任务已调度分片数增加1,同时更新当前任务列表游标值赠加1(当游标值达到任务列表尾部之后重新设置到列表首部);当已调度分片数量等于分片总数时,说明当前任务已调度完成,将其从当前任务列表中删除掉,再调度游标指向的下一任务的任务分片。循环分配当前优先级的任务分片到对应优先级的任务分片调度队列,直到任务分片调度队列已达队列容量或者任务列表为空时为止;循环处理所有优先级的任务分片调度队列各一次后结束。整个任务分片调度过程涉及到的所有Redis操作封装到一个Lua脚本中执行,以保证调度操作的原子性。
分片调度的触发方式有三种:任务接收时异步调用、任务分片消费后异步调用和系统定时(时间在系统启动前配置,默认为30秒)任务分片调度。该调度方式的优点:当任务数量较少时大任务的多个任务分片能被同时调度到,保证系统任务处理高性能;当任务数量较多时,多个任务的任务分片均能被均衡平滑的调度到,且能按照优先级关系对高优先级的任务提供更快速的处理服务。
(3)任务分片幂等执行
为每个优先级的任务分片调度队列分别设置一个任务分片消费线程池,线程池中线程数量按照配置的任务分片处理优先级线程数量比例进行计算。具体计算方式参见前文相关描述,此处不再赘述。
任务分片多线程消费:每个优先级线程池中的线程从对应优先级的Redis任务分片调度队列队首获取一个任务分片,如果没有任务分片,则依次从第一个优先级的任务分片调度队列队首获取,直到所有任务分片调度队列均为空时为止。当获取到一个任务分片时,同时将该任务分片从任务分片调度队列中移除掉,同时将当前任务分片信息写入Redis任务执行进度表中任务分片有序集合中去,并设置对应任务分片Redis有序集合元素的score值为系统当前时间毫秒Long值。任务分片消费过程中涉及到所有Redis操作统一封装到一个Lua脚本中执行,以保证任务分片消费操作的原子性。当任务分片调度队列为空,消费不到任务分片时,消费线程等待若干时间(默认为30秒,在系统启动前进行配置)后再执行任务分片消费。一个任务分片消费到后立即同步调用任务分片幂等执行服务进行处理,同时异步调用任务分片调度服务进行新任务分片的分配。
任务分片幂等执行:任务分片获取到后,按照当前任务接收时传入的任务分片处理服务(一个Java或C#类方法,支持静态方法或Bean方法)进行调用处理。应用系统服务支持幂等性,即对于同一任务分片,一次调用执行出错或超时后再次调用或者多次成功调用对应用系统的数据影响都是相同的,即多次调用后业务数据要保持最终一致性。任务分片幂等执行和任务分片补偿调度依次保证了任务分布式处理服务的高可用性和容错性。
任务执行进度处理:当一个任务分片执行处理完成时将任务进度信息写入Redis任务执行进度表,具体包括:删除任务执行进度表有序集合中的当前任务分片,同时将任务执行进度哈希表中当前任务的执行完成分片总数增加1,同时检查当前任务执行完成分片总数,当其已达到任务分片总数时,即任务所有分片均处理完成,则调用当前任务对应的任务完成通知服务(任务接收时传入的一个Java或C#类方法,支持静态方法或Bean方法)进行任务完成通知,通知完成后删除任务执行进度哈希表中的当前任务。此处所有涉及到的所有Redis操作统一封装到一个Lua脚本中执行,以保证任务执行进度信息处理的原子性。任务执行进度哈希表任务进度信息属性包含但不限于:任务Id、任务名称、开始执行时间、任务状态、分片总数、执行完成分片数、任务优先级和任务完成通知服务信息。
一个任务分片处理完成后,当前线程立即消费下一个任务分片。
(4)任务分片补偿调度
当某个任务分片执行超时或者所执行任务分片的分布式处理实例故障时,该任务分片长期无法完成,需要进行任务分片补偿执行。本方面在每个任务分布式处理实例中均设置一个定时触发线程,按照一定的时间间隔(可配置,默认为300秒,在系统启动前进行配置)从Redis任务执行进度表有序集合中获取处理已超时(配置一个任务补偿间隔时间(默认为300秒,在系统启动前进行配置),当当前时间与某个任务分片的开始执行时间之间的时间差大于该任务补偿间隔时间时,判定该任务分片执行超时。对于不同的任务分片、同一优先级的不同任务、或者不同优先级的任务,任务补偿间隔时间相同)的所有任务分片,将其从Redis有序集合中删除掉,再按照任务优先级依次将任务加入到对应优先级的任务分片调度队列队尾。此处设置到的所有Redis操作统一封装到一个Lua脚本中执行,以保证任务执行进度信息处理的原子性。
图6示出了本发明实施例中涉及到的Redis任务列表、Redis任务分片调度队列和Redis任务执行进度表的数据组成结构、存储结构及其明细结构。图7示出了本发明实施例中涉及到的任务调度执行状态和任务分片执行状态。
本发明实施例的任务动态分片机制是根据预设的任务分片粒度将任务分成若干个片段,然后依据任务的优先级分别进行任务分片调度处理,以实现大任务的分段高效处理、多任务的平滑调度,保证并发任务多时的优先级均衡调度和并发任务少时的大任务高效处理。基于本发明实施例的引擎提供的任务动态分片机制,应用系统只需按照这种机制提供任务分片执行程序服务(比如一个Java或C#类方法)即可,无需关心任务分片调度、优先级处理、出错补偿调度等问题,大大简化了信息系统处理不同粒度任务的分布式调度问题。
本发明实施例的任务分片幂等执行机制,一方面为每个优先级的任务分片调度队列分配一个线程池进行高性能任务分片处理,另一方面要求应用系统在任务分片处理时支持幂等性,这样保证系统任务处理的容错性;当任务分片执行异常或超时,本发明实施例的装置会自动重新调度并执行相应任务分片,以保证任务整体顺利有效执行完成。
本发明实施例还提供了一种任务分布式调度的方法。
图9是本发明实施例的任务分布式调度的方法的主要流程的示意图,如图9所示,任务调度处理的方法的流程包括:
步骤S901、接收应用系统的待处理任务,根据待处理任务的任务信息确定待处理任务的分片总数,然后将待处理任务写入对应优先级的任务列表;任务信息包括:任务标识和优先级;
步骤S902、异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
步骤S903、异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
可选地,任务分片调度队列包括:任务标识、队列容量和最大任务分片序号;
异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列,包括:对于任一优先级,监控该任一优先级的任务分片调度队列的最大任务分片序号,当最大任务分片序号小于该任一优先级的任务分片调度队列的队列容量时,从该任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列,直到该任一优先级的任务分片调度队列的最大任务分片序号等于队列容量、或者该任一优先级的任务列表为空。
可选地,任务信息包括:任务规模和任务分片粒度;
本发明实施例的方法还包括:在从该任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列之前,根据任务处理集群的线程总数和该任一优先级的线程比例,确定该任一优先级的任务分片消费线程数,根据任务处理集群实例总数和该任一优先级的任务分片消费线程数,确定该任一优先级的任务分片调度队列的队列容量。
可选地,任务信息包括:任务标识、已调度分片数和分片总数;所述任务列表包括任务游标;
从该任一优先级的任务列表中获取任务分片放入该任一优先级的任务分片调度队列,包括:根据该任一优先级的任务列表的任务游标,确定目标任务;从该任一优先级的任务列表中获取目标任务的已调度分片数和分片总数;当目标任务的已调度分片数小于分片总数时,构建目标任务的下一任务分片信息,并放入该任一优先级的任务分片调度队列队尾,同时更新目标任务的已调度分片数和该任一优先级的任务列表的任务游标;当目标任务的已调度分片数量等于分片总数时,将目标任务从该任一优先级的任务列表中删除,更新该任一优先级的任务列表的任务游标,以任务游标指向的下一任务作为目标任务;循环分配目标任务的任务分片到该任一优先级的任务分片调度队列。
可选地,异步消费每个优先级的任务分片调度队列中的任务分片,包括:
对于任一优先级,异步利用该任一优先级的线程池中的线程,按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片;若该任一优先级的任务分片调度队列中不存在任务分片,则间隔预设等待时长之后,异步按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片。
可选地,本发明实施例的方法还包括:
若间隔预设等待时长之后,该任一优先级的任务分片调度队列中仍然不存在任务分片,则异步按照从前到后的顺序从下一个优先级的任务分片调度队列中获取一个任务分片,直到所有任务分片调度队列均为空。
可选地,本发明实施例的方法还包括:
在利用该任一优先级的线程池中的线程,按照从前到后的顺序从该任一优先级的任务分片调度队列中获取一个任务分片之前,根据任务处理集群的线程总数和每个优先级的线程比例,确定除最高优先级以外的各个优先级的任务分片消费线程数,以线程总数与各个优先级的任务分片消费线程数之间的差值作为最高优先级的任务分片消费线程数。
可选地,本发明实施例的方法还包括:
在根据待处理任务的任务信息确定待处理任务的分片总数之后,将待处理任务写入任务执行进度哈希表;任务执行进度哈希表包括:任务标识、开始执行时间、任务状态、执行完成分片数、分片总数和优先级;
在异步消费每个优先级的任务分片调度队列中的任务分片之后,更新任务执行进度哈希表中与消费到的任务分片对应任务的属性信息;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新任务执行进度哈希表中与执行完成的任务分片对应任务的属性信息。
可选地,本发明实施例的方法还包括:
监控任务执行进度哈希表,当任务执行进度哈希表中存在执行完成的任务时,将执行完成的任务从任务执行进度哈希表中删除。
可选地,本发明实施例的方法还包括:
在异步消费每个优先级的任务分片调度队列中的任务分片之后,将消费到的任务写入任务分片有序集合;任务分片有序集合包括:任务标识、分片标识和任务分片开始执行时间;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新任务分片有序集合中执行完成的任务分片的属性信息;
异步根据任务分片有序集合中每个任务分片的任务分片开始执行时间确定超时任务分片,将超时任务分片从所述任务分片有序集合中删除,并放入对应优先级的任务分片调度队列队尾,等待任务分片消费线程补偿执行。
可选地,任务信息还包括:任务分片处理信息和的任务完成通知服务信;
调用应用系统中的程序幂等执行消费到的任务分片,包括:根据消费到的任务分片的任务分片处理信息,调用应用系统的任务分片处理服务幂等执行消费到的任务分片;
本发明实施例的方法还包括:在调用应用系统中的程序幂等执行消费到的任务分片之后,根据执行完成的任务的任务完成通知服务信息调用应用系统的任务完成通知服务,向应用系统发出表明任务执行完成的通知信息。
根据本发明实施例的第三方面,提供一种任务分布式调度的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当该一个或多个程序被所述一个或多个处理器执行,使得该一个或多个处理器实现本发明实施例第一方面提供的方法。
根据本发明实施例的第四方面,提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例第一方面提供的方法。
图10示出了可以应用本发明实施例的任务分布式调度的方法或任务分布式调度的装置的示例性系统架构1000。
如图10所示,系统架构1000可以包括终端设备1001、1002、1003,网络1004和服务器1005。网络1004用以在终端设备1001、1002、1003和服务器1005之间提供通信链路的介质。网络1004可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1001、1002、1003通过网络1004与服务器1005交互,以接收或发送消息等。终端设备1001、1002、1003上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备1001、1002、1003可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1005可以是提供各种服务的服务器,例如对用户利用终端设备1001、1002、1003所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的任务分布式调度的方法一般由服务器1005执行,相应地,任务分布式调度的装置一般设置于服务器1005中。
应该理解,图10中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图11,其示出了适于用来实现本发明实施例的终端设备的计算机系统1100的结构示意图。图11示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图11所示,计算机系统1100包括中央处理单元(CPU)1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。在RAM 1103中,还存储有系统1100操作所需的各种程序和数据。CPU 1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(I/O)接口1105也连接至总线1104。
以下部件连接至I/O接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被中央处理单元(CPU)1101执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括任务接收单元、任务分片调度单元和任务分片执行对应。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,任务分片调度单元还可以被描述为“异步消费每个优先级的任务分片调度队列中的任务分片的单元”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收应用系统的待处理任务,根据待处理任务的任务信息确定待处理任务的分片总数,然后将待处理任务写入对应优先级的任务列表;任务信息:任务标识和优先级;异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
根据本发明实施例的技术方案,通过采用任务动态分片机制对待执行任务进行分片,能够实现大任务精细化处理,支持不同大小粒度的系统任务高效、稳定、并发地分布式平滑调度;通过设置不同优先级的任务分片调度队列,能够实现不同优先级任务的灵活调度;通过任务执行进度表实现系统任务的准实时进度监控;通过任务执行超时重新调度机制,能够实现系统任务的健壮处理。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种任务分布式调度的方法,其特征在于,包括:
接收应用系统的待处理任务,根据所述待处理任务的任务信息确定所述待处理任务的分片总数,然后将所述待处理任务写入对应优先级的任务列表;所述任务信息包括:任务标识和优先级;
异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
2.如权利要求1所述的方法,其特征在于,所述任务分片调度队列包括:任务标识、队列容量和最大任务分片序号;
异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列,包括:对于任一优先级,监控所述任一优先级的任务分片调度队列的最大任务分片序号,当所述最大任务分片序号小于所述任一优先级的任务分片调度队列的队列容量时,从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,直到所述任一优先级的任务分片调度队列的最大任务分片序号等于队列容量、或者所述任一优先级的任务列表为空。
3.如权利要求2所述的方法,其特征在于,所述任务信息包括:任务规模和任务分片粒度;
所述方法还包括:在从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列之前,根据任务处理集群的线程总数和所述任一优先级的线程比例,确定所述任一优先级的任务分片消费线程数,根据任务处理集群实例总数和所述任一优先级的任务分片消费线程数,确定所述任一优先级的任务分片调度队列的队列容量。
4.如权利要求2所述的方法,其特征在于,所述任务信息包括:任务标识、已调度分片数和分片总数;所述任务列表包括任务游标;
从所述任一优先级的任务列表中获取任务分片放入所述任一优先级的任务分片调度队列,包括:根据所述任一优先级的任务列表的任务游标,确定目标任务;从所述任一优先级的任务列表中获取所述目标任务的已调度分片数和分片总数;当所述目标任务的已调度分片数小于分片总数时,构建所述目标任务的下一任务分片信息,并放入所述任一优先级的任务分片调度队列队尾,同时更新所述目标任务的已调度分片数和所述任一优先级的任务列表的任务游标;当所述目标任务的已调度分片数量等于分片总数时,将所述目标任务从所述任一优先级的任务列表中删除,更新所述任一优先级的任务列表的任务游标,以所述任务游标指向的下一任务作为目标任务;循环分配目标任务的任务分片到所述任一优先级的任务分片调度队列。
5.如权利要求1所述的方法,其特征在于,异步消费每个优先级的任务分片调度队列中的任务分片,包括:
对于任一优先级,异步利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片;若所述任一优先级的任务分片调度队列中不存在任务分片,则间隔预设等待时长之后,异步按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
若间隔预设等待时长之后,所述任一优先级的任务分片调度队列中仍然不存在任务分片,则异步按照从前到后的顺序从下一个优先级的任务分片调度队列中获取一个任务分片,直到所有任务分片调度队列均为空。
7.如权利要求5所述的方法,其特征在于,所述方法还包括:
在利用所述任一优先级的线程池中的线程,按照从前到后的顺序从所述任一优先级的任务分片调度队列中获取一个任务分片之前,根据任务处理集群的线程总数和每个优先级的线程比例,确定除最高优先级以外的各个优先级的任务分片消费线程数,以所述线程总数与所述各个优先级的任务分片消费线程数之间的差值作为所述最高优先级的任务分片消费线程数。
8.如权利要求1-7任一所述的方法,其特征在于,所述方法还包括:
在根据所述待处理任务的任务信息确定所述待处理任务的分片总数之后,将所述待处理任务写入任务执行进度哈希表;所述任务执行进度哈希表包括:任务标识、开始执行时间、任务状态、执行完成分片数、分片总数和优先级;
在异步消费每个优先级的任务分片调度队列中的任务分片之后,更新所述任务执行进度哈希表中与所述消费到的任务分片对应任务的属性信息;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务执行进度哈希表中与执行完成的任务分片对应任务的属性信息。
9.如权利要求8所述的方法,其特征在于,所述方法还包括:
监控所述任务执行进度哈希表,当所述任务执行进度哈希表中存在执行完成的任务时,将执行完成的任务从所述任务执行进度哈希表中删除。
10.如权利要求1-7任一所述的方法,其特征在于,所述方法还包括:
在异步消费每个优先级的任务分片调度队列中的任务分片之后,将消费到的任务写入任务分片有序集合;所述任务分片有序集合包括:任务标识、分片标识和任务分片开始执行时间;
在调用应用系统中的程序幂等执行消费到的任务分片之后,更新所述任务分片有序集合中执行完成的任务分片的属性信息;
异步根据所述任务分片有序集合中每个任务分片的任务分片开始执行时间确定超时任务分片,将所述超时任务分片从所述任务分片有序集合中删除,并放入对应优先级的任务分片调度队列队尾,等待任务分片消费线程补偿执行。
11.如权利要求1所述的方法,其特征在于,所述任务信息还包括:任务分片处理信息和的任务完成通知服务信;
调用应用系统中的程序幂等执行消费到的任务分片,包括:根据所述消费到的任务分片的任务分片处理信息,调用应用系统的任务分片处理服务幂等执行所述消费到的任务分片;
所述方法还包括:在调用应用系统中的程序幂等执行消费到的任务分片之后,根据执行完成的任务的任务完成通知服务信息调用应用系统的任务完成通知服务,向应用系统发出表明任务执行完成的通知信息。
12.一种任务分布式调度的装置,其特征在于,包括:
任务接收单元,接收应用系统的待处理任务,根据所述待处理任务的任务信息确定所述待处理任务的分片总数,然后将所述待处理任务写入对应优先级的任务列表;所述任务信息包括:任务标识和优先级;
任务分片调度单元,异步从每个优先级的任务列表中获取任务分片放入对应优先级的任务分片调度队列;
任务分片执行单元,异步消费每个优先级的任务分片调度队列中的任务分片,然后调用应用系统中的程序幂等执行消费到的任务分片。
13.一种任务分布式调度的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110325235.8A CN115129438A (zh) | 2021-03-26 | 2021-03-26 | 任务分布式调度的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110325235.8A CN115129438A (zh) | 2021-03-26 | 2021-03-26 | 任务分布式调度的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115129438A true CN115129438A (zh) | 2022-09-30 |
Family
ID=83373910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110325235.8A Pending CN115129438A (zh) | 2021-03-26 | 2021-03-26 | 任务分布式调度的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115129438A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116089414A (zh) * | 2023-04-10 | 2023-05-09 | 之江实验室 | 基于海量数据场景的时序数据库写入性能优化方法及装置 |
-
2021
- 2021-03-26 CN CN202110325235.8A patent/CN115129438A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116089414A (zh) * | 2023-04-10 | 2023-05-09 | 之江实验室 | 基于海量数据场景的时序数据库写入性能优化方法及装置 |
CN116089414B (zh) * | 2023-04-10 | 2023-09-08 | 之江实验室 | 基于海量数据场景的时序数据库写入性能优化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729139B (zh) | 一种并发获取资源的方法和装置 | |
CN109408205B (zh) | 基于hadoop集群的任务调度方法和装置 | |
CN113535367B (zh) | 任务调度方法及相关装置 | |
CN111950988B (zh) | 分布式工作流调度方法、装置、存储介质及电子设备 | |
US10929280B2 (en) | Scheduling tests of software for a cloud computing environment | |
CN112114950A (zh) | 任务调度方法和装置、以及集群管理系统 | |
CN109408286A (zh) | 数据处理方法、装置、系统、计算机可读存储介质 | |
CN110555068A (zh) | 数据导出方法和装置 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
CN113722056A (zh) | 任务调度方法、装置、电子设备和计算机可读介质 | |
CN110673959A (zh) | 用于处理任务的系统、方法和装置 | |
CN115686805A (zh) | Gpu资源共享的方法和装置、调度gpu资源共享的方法和装置 | |
CN115964153A (zh) | 一种异步任务处理方法、装置、设备以及存储介质 | |
CN114968567A (zh) | 用于分配计算节点的计算资源的方法、装置和介质 | |
CN114490048A (zh) | 任务执行方法、装置、电子设备及计算机存储介质 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN114489997A (zh) | 定时任务调度方法、装置、设备和介质 | |
CN115129438A (zh) | 任务分布式调度的方法和装置 | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN113742057A (zh) | 一种任务执行方法和装置 | |
CN111767126A (zh) | 分布式批量处理的系统和方法 | |
CN110912949B (zh) | 位点提交方法和装置 | |
CN112711485A (zh) | 一种消息处理方法和装置 | |
CN110851245A (zh) | 一种分布式异步任务调度方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |