一种任务调度管理的方法、装置及电子设备与流程

文档序号:17185290发布日期:2019-03-22 21:18阅读:139来源:国知局
一种任务调度管理的方法、装置及电子设备与流程

本发明涉及通信技术领域,尤其涉及一种任务调度管理的方法、装置及电子设备。



背景技术:

随着互联网应用的发展,分布式系统(distributedsystem)的使用越来越广泛,在现有技术中,采用基于gearman的分布式系统进行任务调度管理,具体的,上述分布式系统中包括多个计算机以及软件系统,所述多个计算机通过网络互连,所述软件系统建立在网络之上,上述多个计算机与软件系统相互配合,完成大批量,高并发,高复杂度的计算,其中,所述软件系统可以是gearman,上述gearman是一个分发任务的程序框架,将任务分发到不同的计算机或者不同的进程当中,提供了进行并行工作、负载均衡处理的能力,支持各种编程语言。

举例说明,gearman通过任务服务器(jobserver)把从客户端(client)接收到的任务发送给任务处理者(worker)进行处理,worker完成任务后,将结果通过jobserver返回给client,gearman提供client和worker的应用程序编程接口(applicationprogramminginterface,api),由于gearman支持的语言种类非常丰富,因此可以使用一种语言来编写worker程序,使用另外一种语言编写client程序,client和worker利用api与jobserver进行通信,client和worker之间通过传输控制协议(transmissioncontrolprotocol,tcp)进行通信。具体的处理过程如图1所示,client发出的任务均衡的发送到不同的jobserver,jobserver将任务发送到注册在该jobserver上的worker上进行处理,其中,jobserver上注册多个worker,当其中一个worker发生故障时,将任务再调度给其它worker上进行处理;每个worker固定注册在两个指定的jobserver上,当其中一个jobserver故障时,worker才能接收另一个jobserver的调度,除了上述两个jobserver之外,worker不能在其他jobserver上获取任务。由于client发出的任务均衡的发送到不同的jobserver上的,若任一jobserver上没有可用的worker,任务将堆积在jobserver的队列中,导致任务处理速率低;由于worker固定注册在jobserver上,即使jobserver没有分发任务给worker进行处理,worker也不能接收其他jobserver的调度,造成worker资源的浪费。

综上所述,如何提高任务处理速率、减少worker资源浪费是目前需要解决的问题。



技术实现要素:

有鉴于此,本发明提供了一种任务调度管理的方法、装置及电子设备,用于解决现有技术中任务处理速率慢、worker资源浪费的问题。

根据本发明实施例的第一个方面,提供了一种任务调度管理的方法,包括:接收到客户端发送的任务;查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量;将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。

在一个实施例中,在所述将接收到的所述任务分配给所述两台任务服务器的任务队列中任务量最少的第一任务服务器之后,该方法还包括:将所述任务分配给注册在所述第一任务服务器上的任务处理者worker,其中,所述worker是通过虚拟服务器按照设定规则动态的注册到所述第一任务服务器上的。

在一个实施例中,所述将所述任务分配给注册在所述第一任务服务器上的任务处理者worker,具体包括:查询所述第一任务服务器对应的worker列表;将所述任务分配给所述worker列表中的可用worker,其中,所述worker列表是注册在所述第一任务服务器上的worker。

在一个实施例中,所述将所述任务分配给注册在所述第一任务服务器上的任务处理者worker之后,该方法还包括:将所述任务处理完成后,断开与所述worker的连接。

在一个实施例中,所述接收到客户端发送的任务之前,该方法还包括:接收到所述至少两台任务服务器的任务队列状态,更新所述任务队列状态列表。

在一个实施例中,所述查询所述任务服务器对应的worker列表之前,该方法还包括:接收所述任务服务器对应的worker的使用状态,更新所述worker列表。

在一个实施例中,所述更新所述任务队列状态列表或更新所述worker列表,具体包括:更新所述任务队列状态和所述worker的使用状态所在的数据库;根据更新后的所述数据库更新所述任务队列状态列表或更新所述worker列表,其中,所述任务队列状态列表与所述worker列表由数据库生成,所述任务队列状态列表与所述worker列表保存为同一表格或者不同表格。

根据本发明实施例的第二个方面,提供了一种任务调度管理的装置,包括:接收单元,用于接收到客户端发送的任务;查询单元,用于查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量;分配单元,用于将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。

在一个实施例中,所述装置还包括:所述分配单元还用于,将所述任务分配给注册在所述第一任务服务器上的任务处理者worker,其中,所述worker是通过虚拟服务器动态的注册到所述第一任务服务器上的。

在一个实施例中,所述查询单元还用于包括:查询所述第一任务服务器对应的worker列表;所述分配单元用于:将所述任务分配给所述worker列表中的可用worker,其中,所述worker列表是注册在所述第一任务服务器上的worker。

在一个实施例中,该装置还包括:处理单元,将所述任务处理完成后,断开与所述worker的连接。

在一个实施例中,所述接收到客户端发送的任务之前,所述接收单元还用于:接收到所述至少两台任务服务器的任务队列状态,更新所述任务队列状态列表。

在一个实施例中,所述查询所述任务服务器对应的worker列表之前,所述接收单元还用于:接收所述任务服务器对应的worker的使用状态,更新所述worker列表。

在一个实施例中,所述接收单元具体用于:更新所述任务队列状态和所述worker的使用状态所在的数据库;根据更新后的所述数据库更新所述任务队列状态列表或更新所述worker列表,其中,所述任务队列状态列表与所述worker列表由数据库生成,所述任务队列状态列表与所述worker列表保存为同一表格或者不同表格。

根据本发明实施例的第三个方面,提供了一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面或第一方面任一种可能所述的方法。

根据本发明实施例的第四个方面,提供了一种计算机可读存储介质,其上存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如第一方面或第一方面任一种可能所述的方法。

本发明实施例的有益效果包括:首先接收到客户端发送的任务,然后查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量,最后将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。采用上述方式,可以将任务分配给任务量最少的任务服务器进行处理,可以减少处理任务时排队时间长,处理任务速率慢的问题。

附图说明

通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1是现有技术中的一种任务调度管理的方法流程图;

图2是本发明实施例提供的一种任务调度管理的方法流程图;

图3是本发明实施例提供的一种任务调度管理的装置示意图;

图4是本发明实施例提供的另一种任务调度管理的方法流程图;

图5是本发明实施例提供的另一种任务调度管理的装置示意图;

图6是本发明实施例提供的一种电子设备结构示意图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本申请。此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的。

除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。

在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

本发明提供的一种任务调度管理的方法,具体如图2所示,包括:

步骤s200、接收到客户端发送的任务。

具体的,接收到的任务是其它系统的客户端client发起,并提交的任务。

步骤s201、查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量。

举例说明,假设两台任务服务器分别为第一任务服务器jobserver和第二任务服务器,所述第一处理器的任务队列状态列表中需要排队处理的任务为2个,第一处理器的任务队列状态列表中需要排队处理的任务为8个,第一任务服务器排队的任务少,空间大。

步骤s202、将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。

通过本发明实施例,首先接收到客户端发送的任务,然后查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量,最后将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。采用上述方式,可以将任务分配给任务量最少的任务服务器进行处理,可以减少处理任务时排队时间长,处理任务速率慢的问题。

可选的,在步骤s202之后,该方法还包括步骤s203、将所述任务分配给注册在所述第一任务服务器上的任务处理者worker,其中,所述worker是通过虚拟服务器按照设定规则动态的注册到所述第一任务服务器上的。

具体的,查询所述第一任务服务器对应的worker列表,将所述任务分配给所述worker列表中的可用worker,其中,所述worker列表是注册在所述第一任务服务器上的worker,所述设定规则为负载均衡。

举例说明,假设第一任务服务器上注册有6个worker,上述6个worker保存在所述worker列表,6个worker列表中,4个是正在使用的worker,剩余两个可用的worker,第一任务服务器可以在剩余的两个可用的worker中选择其中任一一个worker处理任务。

在步骤s203之后,该方法还包括步骤s204、将所述任务处理完成后,断开与所述worker的连接。

本发明实施例中,worker完成任务,断开与第一任务服务器的连接后,可以根据负载均衡的原则重新注册到其他任务服务器上,充分利用空闲的worker,不会造成worker资源的浪费。

可选的,在步骤s200之前,该方法还包括:接收到所述至少两台任务服务器的任务队列状态,更新所述任务队列状态列表;所述查询所述任务服务器对应的worker列表之前,该方法还包括:接收所述任务服务器对应的worker的使用状态,更新所述worker列表。

具体的,更新所述任务队列状态和所述worker的使用状态所在的数据库;根据更新后的所述数据库更新所述任务队列状态列表或更新所述worker列表,其中,所述任务队列状态列表与所述worker列表由数据库生成,所述任务队列状态列表与所述worker列表保存为同一表格或者不同表格。

下面通过一个具体实施例,对执行本发明方法的任务调度管理的装置进行详细说明,具体如图3所示,具体包括:任务生产者(master)300、任务监视者(watcher)301、任务消费者302,可以称为jobserver集群,所述jobserver集群由jobserver和虚拟服务器(linuxvirtualserver,lvs)组成,任务处理者303,可以称为worker集群,包括多个worker节点。

具体的,watcher用于记录每台jobserver的任务队列状态,将任务状态保存到数据库;master用于接收客户端发出的任务,并通过watcher查询每台jobserver的任务状态,将任务分配给任务量最小的jobserver;jobserver集群中的jobserver将自身的任务队列状态上报给watcher,当接收到任务时,将任务分配给worker集群中的worker节点,worker集群中的worker节点用于处理任务,每个worker节点是通过jobserver集群中的lvs注册到jobserver上的。

本发明实施例中,所述worker集群也可以称为worker服务器。

下面通过一个具体实施例,对本发明提供的一种任务调度管理的方法进行详细的说明,具体如图4所示。

步骤s400、worker通过lvs注册到jobserver上。

步骤s401、jobserver确定自身有可用的worker之后,将自身的任务队列状态上报到watcher。

步骤s402、watcher将接收到的任务队列状态存入数据库。

其中,所述数据库为mysql数据库。

步骤s403、更新由数据库生成的任务队列job_queue表,所述job_queue表包含各个jobserver的任务队列状态以及各个jobserver上注册的可用worker。

步骤s404、master接收到任务。

步骤s405、所述master通过watcher查询任务量最小的、且可用的第一jobserver。

步骤s406、所述master将所述任务分配给所述第一jobserver。

步骤s407、所述第一jobserver将接收到任务分配给注册在所述第一jobserver上的可用的worker。

步骤s408、所述worker处理完上述任务后,断开与所述第一jobserver的连接。

步骤s409、所述worker通过lvs注册到其他jobserver上。

图5是本发明实施例提供的一种任务调度管理的装置示意图。如图5所示,本实施例的任务调度管理的装置包括:接收单元51、查询单元52和分配单元53。其中,接收单元51,用于接收到客户端发送的任务;查询单元52,用于查询至少两台任务服务器中的任务队列状态列表,其中,所述任务队列状态中包括任务服务器的任务量;分配单元53,用于将接收到的所述任务分配给所述至少两台任务服务器的任务队列中任务量最少的第一任务服务器。

本发明实施例中,所述接收单元、查询单元和分配单元可以在一个模块中实现,该模块调用获得任务的接口可以是超文本传输协议(hypertexttransportprotocol,http),也可以是面向各种消息队列,例如activemq、kafka等。

可选的,所述分配单元还用于,将所述任务分配给注册在所述第一任务服务器上的任务处理者worker,其中,所述worker是通过虚拟服务器动态的注册到所述第一任务服务器上的。

可选的,所述查询单元还用于包括:查询所述第一任务服务器对应的worker列表;所述分配单元用于:将所述任务分配给所述worker列表中的可用worker,其中,所述worker列表是注册在所述第一任务服务器上的worker。

在一个实施例中,该装置还包括:处理单元54,将所述任务处理完成后,断开与所述worker的连接。

在一个实施例中,所述接收到客户端发送的任务之前,所述接收单元还用于:接收到所述至少两台任务服务器的任务队列状态,更新所述任务队列状态列表。

在一个实施例中,所述查询所述任务服务器对应的worker列表之前,所述接收单元还用于:接收所述任务服务器对应的worker的使用状态,更新所述worker列表。

在一个实施例中,所述接收单元具体用于:更新所述任务队列状态和所述worker的使用状态所在的数据库;根据更新后的所述数据库更新所述任务队列状态列表或更新所述worker列表,其中,所述任务队列状态列表与所述worker列表由数据库生成,所述任务队列状态列表与所述worker列表保存为同一表格或者不同表格。

图6是本发明实施例的电子设备的示意图。图6所示的电子设备为通用任务调度管理装置,其包括通用的计算机硬件结构,其至少包括处理器61和存储器62。处理器61和存储器62通过总线63连接。存储器62适于存储处理器61可执行的指令或程序。处理器61可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器61通过执行存储器62所存储的指令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其它装置的控制。总线63将上述多个组件连接在一起,同时将上述组件连接到显示控制器64和显示装置以及输入/输出(i/o)装置65。输入/输出(i/o)装置65可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出装置65通过输入/输出(i/o)控制器66与系统相连。

如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明实施例的各个方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。

可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、光纤、便携式光盘只读存储器(cd-rom)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。

计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。

可以使用包括但不限于无线、有线、光纤电缆、rf等或前述的任意适当组合的任意合适的介质来传送实现在计算机可读介质上的程序代码。

用于执行针对本发明实施例各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如java、smalltalk、c++等;以及常规过程编程语言如“c”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(lan)或广域网(wan)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。

上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图图例和/或框图描述了本发明实施例的各个方面。将要理解的是,流程图图例和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。

还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或框图块或块中指定的功能/动作的指令的制品。

计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1