任务分布式调度方法及系统的制作方法
【专利摘要】本发明公开了一种任务分布式调度方法,包括:接收客户群发送的事件请求,并分别确定该事件请求中每一个任务所需要的资源,且根据任务所需要的资源及任务节点的资源占用率进行任务调度。本发明还提供一种任务分布式调度装置,使得能够实现基于任务所需要的资源进行负载均衡的目的,避免基于任务数量进行负载均衡带来的问题。
【专利说明】
任务分布式调度方法及系统
技术领域
[0001]本发明涉及互联网通信技术领域,尤其涉及一种任务分布式调度方法及系统。
【背景技术】
[0002]在互联网技术不断发展的今天,越来越多的数据处理依赖较高的计算能力,为了解决单一处理节点无法处理多种多样的工作,以及无法满足越来越高的计算能力的要求,技术人员提出一种分布式处理方案。
[0003]以Gearman为例,Gearman是一种用来把工作委派给其他机器、分布式的调用更适合某项工作的机器,并发的做某项工作在多个调用间做负载均衡、或用来在调用其他语言的函数的系统,在Geraman中,通过调度器将事件请求队列中的事件按照一定规则分配给各个工作节点,由各个工作节点进行处理后反馈。
[0004]但是在实际使用中,本发明的发明人发现,目前都是以任务为单位进行分布式调度,然而不同任务所需要的资源是不同的,因此,就会造成虽然一个节点上任务数量少,看起来负载小,但是实际上其所需要的资源多,实际负载大,无法有效实现各节点的负载均衡。
[0005]上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
【发明内容】
[0006]本发明的主要目的在于提供一种任务分布式调度方法,旨在解决现有技术中分布式调度可能无法有效负载均衡的技术问题。
[0007]为实现上述目的,本发明提供的任务分布式调度方法,包括:
[0008]接收客户群发送的事件请求,所述事件请求中包含任务;
[0009]分别确定每一个任务所需要的资源;
[0010]根据任务所需要的资源及任务节点的资源占用率进行任务调度。
[0011 ]优选地,所述方法还包括:
[0012]根据预置心跳包检测确定所有处于在线状态的任务节点;
[0013]获取所有处于在线状态的任务节点的资源占用率。
[0014]优选地,所述根据任务所需要的资源及任务节点的资源占用率进行任务调度,包括:
[0015]将任务按照所需要的资源从大到小的顺序进行排序,及将所述任务节点的资源占用率按照从小到大的顺序进行排序;
[0016]依次将排序后的任务分别分配给排序后的任务节点。
[0017]优选地,所述依次将排序后的任务分别分配给排序后的任务节点包括:
[0018]从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点;
[0019]将第i个任务分配第N个任务节点,其中,i和N的初始值均为I;
[0020]判断分配所述第i个任务之后,所述第N个任务节点的资源占用率是否大于或等于预设第二数值;
[0021]若是,则令i= i+l且N = N+1,返回执行所述将第i个任务分配给第N个任务节点的步骤;
[0022]若否,则令i= i+l,返回执行所述将第i个任务分配给第N个任务节点的步骤。
[0023]优选地,所述方法还包括:
[0024]在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果;
[0025]将所述事件处理结果反馈给所述客户群中对应的客户端。
[0026]为实现上述目的,本发明还提供一种任务分布式调度装置,包括:
[0027]接收模块,用于接收客户群发送的事件请求,所述事件请求中包含任务;
[0028]资源确定模块,用于分别确定每一个任务所需要的资源;
[0029]调度模块,用于根据任务所需要的资源及任务节点的资源占用率进行任务调度。
[0030]优选地,所述装置还包括:
[0031]检测模块,用于根据预置心跳包检测确定所有处于在线状态的任务节点;
[0032]获取模块,用于获取所有处于在线状态的任务节点的资源占用率。
[0033]优选地,所述调度模块包括:
[0034]排列模块,用于将任务按照所需要的资源从大到小的顺序进行排序,及将所述任务节点的资源占用率按照从小到大的顺序进行排序;
[0035]分配模块,用于依次将排序后的任务分别分配给排序后的任务节点。
[0036]优选地,所述分配模块包括:
[0037]选取模块,用于从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点;
[0038]任务分配模块,用于将第i个任务分配第N个任务节点,其中,i和N的初始值均为I;
[0039]判断模块,用于判断分配所述第i个任务之后,所述第N个任务节点的资源占用率是否大于或等于预设第二数值;
[0040]第一处理模块,用于若是,则令i= i+l且N=N+1,返回执行所述任务分配模块;
[0041]第二处理模块,用于若否,则令i= i+l,返回执行所述任务分配模块。
[0042]优选地,所述装置还包括:
[0043]封装模块,用于在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果;
[0044]反馈模块,用于将所述事件处理结果反馈给所述客户群中对应的客户端。
[0045]本发明提供一种任务分布式调度方法,该方法包括:接收客户群发送的事件请求,并分别确定该事件请求中每一个任务所需要的资源,且根据任务所需要的资源及任务节点的资源占用率进行任务调度,使得能够实现基于任务所需要的资源进行负载均衡的目的,避免基于任务数量进行负载均衡带来的问题。
【附图说明】
[0046]图1为本发明第一实施例中任务分布式调度方法的流程示意图;
[0047]图2为本发明第二实施例中任务分布式调度方法的流程示意图;
[0048]图3为图2所示第二实施例中步骤206的细化步骤的流程示意图;
[0049]图4为本发明第三实施例中任务分布式调度装置的功能模块示意图;
[0050]图5为本发明第四实施例中任务分布式调度装置的功能模块示意图;
[0051]图6为图5所示第四实施例中分配模块504的细化功能模块示意图。
[0052]本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
【具体实施方式】
[0053]应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0054]现有技术中实现节点的负载均衡时,是以任务为单位进行负载均衡的,就会造成虽然一个节点上任务数量少,看起来负载小,但是实际上其所需要的资源多,实际负载大,无法有效实现各节点的负载均衡的问题。
[0055]为此,本发明提出一种任务分布式调度方法,通过基于任务所需要的资源及任务节点的资源占用率进行任务调度,使得能够基于资源实现负载均衡,负载均衡效果更好。
[0056]请参阅图1,为本发明第一实施例中任务分布式调度方法的流程示意图,该方法包括:
[0057]步骤101、接收客户群发送的事件请求,事件请求中包含任务;
[0058]在本发明实施例中,客户群中包含多个客户端,其中任意一个客户端都可向任务分布式调度装置(以下简称调度装置)发送事件请求。
[0059]其中,事件请求中包含任务,且每一个事件请求中可以包含一个任务,也可以包含多个任务。
[0060]其中,客户端与调度装置之间可以通过链路进行数据传输,其中,该链路可以通过http或TCP进行。
[0061]步骤102、分别确定每一个任务所需要的资源;
[0062]步骤103、根据任务所需要的资源及任务节点的资源占用率进行任务调度。
[0063]在本发明实施例中,调度装置在接收到的事件请求之后,将分别确定该请求中的每一个任务所需要的资源,并根据任务所需要的资源及任务节点的资源占用率进行任务调度,使得资源占用率越小的任务节点能够分配到更多的任务或者分配到所需要的资源多的任务。
[0064]在本发明实施例中,调度装置接收客户群发送的事件请求,并分别确定该事件请求中每一个任务所需要的资源,且根据任务所需要的资源及任务节点的资源占用率进行任务调度,使得能够实现基于任务所需要的资源进行负载均衡的目的,避免基于任务数量进行负载均衡带来的问题。
[0065]请参阅图2,为本发明第二实施例中任务分布式调度方法的流程示意图,该调度方法包括:
[ΟΟ??]步骤201、接收客户群发送的事件请求,事件请求中包含任务;
[0067]步骤202、分别确定每一个任务所需要的资源;
[0068]在本发明实施例,客户群中的多个客户端均可向调度装置发送事件请求,该事件请求中包含任务,且该事件请求中包含一个任务或者多个任务。
[0069]其中,调度装置将依据每一个任务的类型确定每一个任务所需要的资源。
[0070]在本发明实施例中,每一个任务都有其对应的类型,且每一种类型的任务实际所需要的资源差距在可忽略的范围内,因此,调度装置内预先标记每一个任务类型所需要的资源,使得调度装置能够基于任务的类型确定该任务所需要的资源。
[0071 ]步骤203、根据预置心跳包检测确定所有处于在线状态的任务节点;
[0072]步骤204、获取所有处于在线状态的任务节点的资源占用率;
[0073]在本发明实施例中,调度装置在确定每一个任务所需要的资源之后,将向任务节点发送心跳包,以实现对任务节点的心跳包检测,其中,任务节点在接收到心跳包之后,将向调度装置发送反馈响应,若调度装置接收到某一个任务节点的反馈响应,则表明该任务节点当前处于在线状态,使得调度装置能够根据预置心跳包检测确定所有处于在线状态的任务节点。
[0074]在本发明实施例中,调度装置在确定所有处于在线状态的任务节点之后,还将获取所有处于在线状态的任务节点的资源占用率。
[0075]步骤205、将任务按照所需要的资源从大到小的顺序进行排序,及将任务节点的资源占用率按照从小到大的顺序进行排序;
[0076]步骤206、依次将排序后的任务分别分配给排序后的任务节点;
[0077]在本发明实施例中,调度装置在确定每一个任务所需要的资源及所有处于在线状态的任务节点之后,将任务按照所需要的资源从大到小的顺序进行排序,且将所有处于在线状态的任务节点的资源占用率按照从小到大的顺序进行排序,并依次将排序后的任务分别分配给排序后的任务节点,以实现任务调度。
[0078]步骤207、在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果;
[0079]步骤208、将事件处理结果反馈给客户群中对应的客户端。
[0080]在本发明实施例中,任务节点在完成对分配的任务的处理之后,将向调度装置反馈该任务的处理结果,且调度装置在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果,并经该事件处理结果反馈给该客户群中对应的客户端。
[0081]在本发明实施例中,调度装置在接收到客户群发送的事件请求之后,将分别确定事件请求中每一个任务所需要的资源,根据预置心跳包检测确定所有处于在线状态的任务节点,获取所有处于在线状态的任务节点的资源占用率,且将任务按照所需要的资源从大到小的顺序进行排序,及将任务节点的资源占用率按照从小到大的顺序进行排序,依次将排序后的任务分别分配给排序后的任务节点,使得能够有效实现基于任务所需要的资源实现任务分配,有效实现负载均衡。
[0082]请参阅图3,为本发明图2所示第二实施例中步骤206的细化步骤的流程示意图,包括:
[0083]步骤301、从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点;
[0084]步骤302、将第i个任务分配第N个任务节点,其中,i和N的初始值均为I;
[0085]步骤303、判断分配第i个任务之后,第N个任务节点的资源占用率是否大于或等于预设第二数值,若是,则执行步骤304,若否,则执行步骤305;
[0086]步骤304、令i = i+l且N=N+1,返回执行步骤302;
[0087]步骤305、令i = i+l,返回执行步骤302。
[0088]在本发明实施例中,在将任务按照所需要的资源从大到小的顺序排列,且将处于在线状态的任务节点按照资源占用率从小到大的顺序排列之后,将从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点,即当一个任务节点的资源占用率大于或等于第一数值时,不再向该任务节点分配任务,以避免对该任务节点造成太大负担。
[0089]其中,对于排序后的任务,将第i个任务分配给第N个任务节点,其中,i和N的初始值均为I,其中,第I个任务是所需要资源最大的任务,第N个任务节点是资源占用率最小的任务节点。
[0090]在向第N个任务节点分配第i个任务之后,判断分配该第i个任务之后,第N个任务节点的资源占用率是否大于或等于预设第二数值;
[0091]且若第N个任务节点的资源占用率大于或等于预设第二数值时,则不再向该第N个任务节点分配任务,即令i = i+l且N=N+1,返回执行步骤302中的将第i个任务分配给第N个任务节点;或者,若第N个任务节点的资源占用率小于预设第二数值时,则表示还可以继续向该第N个任务节点分配任务,即令i = i + l,返回执行步骤302中的将第i个任务分配给第N个任务节点,使得能够基于任务节点的资源占用率确定任务节点分配的任务的个数,且将任务节点的资源占用率控制在一定的范围内,能够有效的实现任务节点的负载均衡。
[0092]请参阅图4,图4为本发明第三实施例中任务分布式调度装置的功能模块的示意图,该调度装置包括:接收模块401、资源确定模块402及调度模块403。
[0093]接收模块401,用于接收客户群发送的事件请求,事件请求中包含任务;
[0094]在本发明实施例中,客户群中包含多个客户端,其中任意一个客户端都可向任务分布式调度装置(以下简称调度装置)发送事件请求。
[0095]其中,事件请求中包含任务,且每一个事件请求中可以包含一个任务,也可以包含多个任务。
[0096]其中,客户端与调度装置之间可以通过链路进行数据传输,其中,该链路可以通过http或TCP进行。
[0097]在本发明实施例中,调度装置中的接收模块401接收客户群发送的事件请求。
[0098]资源确定模块402,用于分别确定每一个任务所需要的资源;
[0099]调度模块403,用于根据任务所需要的资源及任务节点的资源占用率进行任务调度。
[0100]在本发明实施例中,在接收到的事件请求之后,资源确定模块402将分别确定该请求中的每一个任务所需要的资源,并由调度模块403根据任务所需要的资源及任务节点的资源占用率进行任务调度,使得资源占用率越小的任务节点能够分配到更多的任务或者分配到所需要的资源多的任务。
[0101]在本发明实施例中,调度装置接收客户群发送的事件请求,并分别确定该事件请求中每一个任务所需要的资源,且根据任务所需要的资源及任务节点的资源占用率进行任务调度,使得能够实现基于任务所需要的资源进行负载均衡的目的,避免基于任务数量进行负载均衡带来的问题。
[0102]请参阅图5,图5是本发明第四实施例中任务分布式调度装置的功能模块的示意图,该调度装置包括:如图4所示第三实施例中的接收模块401、资源确定模块402及调度模块403,且与图4所示实施例中描述的内容相似,此处不做赘述。
[0103]在本发明实施例中,调度装置还包括:
[0104]检测模块501,用于根据预置心跳包检测确定所有处于在线状态的任务节点;
[0105]获取模块502,用于获取所有处于在线状态的任务节点的资源占用率。
[0106]在本发明实施例中,调度模块403包括:
[0107]排列模块503,用于将任务按照所需要的资源从大到小的顺序进行排序,及将任务节点的资源占用率按照从小到大的顺序进行排序;
[0108]分配模块504,用于依次将排序后的任务分别分配给排序后的任务节点。
[0109]在本发明实施例中,调度装置还包括:
[0110]封装模块505,用于在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果;
[0111]反馈模块506,用于将事件处理结果反馈给客户群中对应的客户端。
[0112]在本发明实施例,客户群中的多个客户端均可向调度装置发送事件请求,该事件请求中包含任务,且该事件请求中包含一个任务或者多个任务。
[0113]其中,调度装置将依据每一个任务的类型确定每一个任务所需要的资源。
[0114]在本发明实施例中,每一个任务都有其对应的类型,且每一种类型的任务实际所需要的资源差距在可忽略的范围内,因此,调度装置内预先标记每一个任务类型所需要的资源,使得调度装置能够基于任务的类型确定该任务所需要的资源。
[0115]在本发明实施例中,调度装置在确定每一个任务所需要的资源之后,将向任务节点发送心跳包,以实现对任务节点的心跳包检测,其中,任务节点在接收到心跳包之后,将向调度装置发送反馈响应,若调度装置接收到某一个任务节点的反馈响应,则表明该任务节点当前处于在线状态,使得调度装置能够根据预置心跳包检测确定所有处于在线状态的任务节点。
[0116]在本发明实施例中,调度装置在确定所有处于在线状态的任务节点之后,还将获取所有处于在线状态的任务节点的资源占用率。
[0117]在本发明实施例中,调度装置在确定每一个任务所需要的资源及所有处于在线状态的任务节点之后,将任务按照所需要的资源从大到小的顺序进行排序,且将所有处于在线状态的任务节点的资源占用率按照从小到大的顺序进行排序,并依次将排序后的任务分别分配给排序后的任务节点,以实现任务调度。
[0118]在本发明实施例中,任务节点在完成对分配的任务的处理之后,将向调度装置反馈该任务的处理结果,且调度装置在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果,并经该事件处理结果反馈给该客户群中对应的客户端。
[0119]在本发明实施例中,调度装置在接收到客户群发送的事件请求之后,将分别确定事件请求中每一个任务所需要的资源,根据预置心跳包检测确定所有处于在线状态的任务节点,获取所有处于在线状态的任务节点的资源占用率,且将任务按照所需要的资源从大到小的顺序进行排序,及将任务节点的资源占用率按照从小到大的顺序进行排序,依次将排序后的任务分别分配给排序后的任务节点,使得能够有效实现基于任务所需要的资源实现任务分配,有效实现负载均衡。
[0120]请参阅图6,为本发明图5所示第四实施例中分配模块504的细化功能模块的示意图,包括:
[0121]选取模块601,用于从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点;
[0122]任务分配模块602,用于将第i个任务分配第N个任务节点,其中,i和N的初始值均为I;
[0123]判断模块603,用于判断分配第i个任务之后,第N个任务节点的资源占用率是否大于或等于预设第二数值;
[0124]第一处理模块604,用于若是,则令i = i+l且N=N+1,返回执行任务分配模块602;
[0125]第二处理模块605,用于若否,则令i= i+Ι,返回执行任务分配模块602。
[0126]在本发明实施例中,在将任务按照所需要的资源从大到小的顺序排列,且将处于在线状态的任务节点按照资源占用率从小到大的顺序排列之后,选取模块601将从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点,即当一个任务节点的资源占用率大于或等于第一数值时,不再向该任务节点分配任务,以避免对该任务节点造成太大负担。
[0127]其中,对于排序后的任务,任务分配模块602将第i个任务分配给第N个任务节点,其中,i和N的初始值均为I,其中,第I个任务是所需要资源最大的任务,第N个任务节点是资源占用率最小的任务节点。
[0128]在向第N个任务节点分配第i个任务之后,判断模块603判断分配该第i个任务之后,第N个任务节点的资源占用率是否大于或等于预设第二数值;
[0129]且若第N个任务节点的资源占用率大于或等于预设第二数值时,则不再向该第N个任务节点分配任务,即第一处理模块604令i = i+Ι且N = N+1,返回执行任务分配模块602;或者,若第N个任务节点的资源占用率小于预设第二数值时,则表示还可以继续向该第N个任务节点分配任务,即第二处理模块605令i = i+Ι,返回执行任务分配模块602,使得能够基于任务节点的资源占用率确定任务节点分配的任务的个数,且将任务节点的资源占用率控制在一定的范围内,能够有效的实现任务节点的负载均衡。
[0130]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如R0M/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,月艮务器,空调器,或者网络设备等)执行本发明各个实施例的方法。
[0131]以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
【主权项】
1.一种任务分布式调度方法,其特征在于,包括: 接收客户群发送的事件请求,所述事件请求中包含任务; 分别确定每一个任务所需要的资源; 根据任务所需要的资源及任务节点的资源占用率进行任务调度。2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 根据预置心跳包检测确定所有处于在线状态的任务节点; 获取所有处于在线状态的任务节点的资源占用率。3.根据权利要求2所述的方法,其特征在于,所述根据任务所需要的资源及任务节点的资源占用率进行任务调度,包括: 将任务按照所需要的资源从大到小的顺序进行排序,及将所述任务节点的资源占用率按照从小到大的顺序进行排序; 依次将排序后的任务分别分配给排序后的任务节点。4.根据权利要求3所述的方法,其特征在于,所述依次将排序后的任务分别分配给排序后的任务节点包括: 从排序后的任务节点中选取资源占用率小于预设第一数值的任务节点; 将第i个任务分配第N个任务节点,其中,i和N的初始值均为I; 判断分配所述第i个任务之后,所述第N个任务节点的资源占用率是否大于或等于预设第二数值; 若是,则令i = i+Ι且N=N+1,返回执行所述将第i个任务分配给第N个任务节点的步骤; 若否,则令i = i+Ι,返回执行所述将第i个任务分配给第N个任务节点的步骤。5.根据权利要求1至4任意一项所述的方法,其特征在于,所述方法还包括: 在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果; 将所述事件处理结果反馈给所述客户群中对应的客户端。6.一种任务分布式调度装置,其特征在于,包括: 接收模块,用于接收客户群发送的事件请求,所述事件请求中包含任务; 资源确定模块,用于分别确定每一个任务所需要的资源; 调度模块,用于根据任务所需要的资源及任务节点的资源占用率进行任务调度。7.根据权利要求6所述的装置,其特征在于,所述装置还包括: 检测模块,用于根据预置心跳包检测确定所有处于在线状态的任务节点; 获取模块,用于获取所有处于在线状态的任务节点的资源占用率。8.根据权利要求7所述的装置,其特征在于,所述调度模块包括: 排列模块,用于将任务按照所需要的资源从大到小的顺序进行排序,及将所述任务节点的资源占用率按照从小到大的顺序进行排序; 分配模块,用于依次将排序后的任务分别分配给排序后的任务节点。9.根据权利要求8所述的装置,其特征在于,所述分配模块包括: 选取模块,用于从排序后的任务节点中选取资源占用率小于预设第一数值的任务节占.V , 任务分配模块,用于将第i个任务分配第N个任务节点,其中,i和N的初始值均为I; 判断模块,用于判断分配所述第i个任务之后,所述第N个任务节点的资源占用率是否大于或等于预设第二数值; 第一处理模块,用于若是,则令i = i+Ι且N=N+1,返回执行所述任务分配模块; 第二处理模块,用于若否,则令i = i+Ι,返回执行所述任务分配模块。10.根据权利要求6至9任意一项所述的装置,其特征在于,所述装置还包括: 封装模块,用于在接收到属于同一个事件请求的所有任务的处理结果之后,封装成事件处理结果; 反馈模块,用于将所述事件处理结果反馈给所述客户群中对应的客户端。
【文档编号】G06F9/48GK105975334SQ201610262368
【公开日】2016年9月28日
【申请日】2016年4月25日
【发明人】张锐
【申请人】深圳市永兴元科技有限公司