一种任务分配方法及系统与流程

文档序号:12005813阅读:321来源:国知局
一种任务分配方法及系统与流程
本申请涉及数据处理技术,特别是涉及一种任务分配方法及系统。

背景技术:
在分布式服务器集群(如MySQL服务器集群)中,统计结果数据通常会在分布式计算平台(例如Hadoop)上被计算好后,会批量地将所述计算好的数据导入各个MySQL服务器中,然后再进行后续的处理。其中,所述导入过程是采用带有优先级的工作队列实现的。出于容灾考虑,这些MySQL服务器分布在不同的机房,若将所述计算后的数据作为任务,则处理任务的各个worker也分布在不同的机房。其中,所述worker为处理任务的进程或线程。通常采用预先分配的方式进行任务分配,即一个任务在进入队列时就为其分配了一个worker,表示由这个worker负责该任务的调度和处理。但这种分配方法存在两个严重的问题:一是各个worker处理的速度可能是不同的,若队列中要处理的任务顺序是A、B和C,他们分别是worker1、worker2和worker3的任务。由于worker1处理速度比较慢正在处理任务,则A暂时不能被处理,若此时worker2和worker3是空闲的,也同样不能处理任务B和C,这导致整体队列任务的处理时间比较长,处理效率较低,并且浪费资源。二是在一些异常情况下,如果处理任务的某个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是本申请实施例所述一种任务分配方法中空闲worker抢占任务流程图;图3是本申请优选实施例所述一种任务分配方法流程图;图4是本申请实施例所述多任务同时等待分配示意图;图5是本申请实施例所述一种任务分配系统结构图。具体实施方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。在分布式服务器集群(本申请实施例以MySQL服务器为例进行说明,但不限于MySQL服务器集群)中,统计结果数据在分布式计算平台上被计算好,批量地将所述计算好的数据导入各个MySQL服务器中,然后再进行后续的处理。其中,所述计算好的数据可以以文本文件的形式导入,并且所述导入过程是采用带有优先级的工作队列实现的。出于容灾考虑,这些MySQL服务器分布在不同的机房,若将所述计算后的数据作为任务,则处理任务的各个worker也分布在不同的机房。针对分布在不同机房的服务器,现有技术中的任务分配方法为预先分配方法,即一个任务在进入队列时就为其分配了一个worker,表示由这个worker负责该任务的调度和处理。但是这种分配方法任务的处理时间比较长,处理效率较低,并且浪费资源,甚至可能导致任务“饿死”的问题。本申请采用预先分配和worker抢占相结合的方式进行任务的分配处理,可以避免任务了“饿死”情况的出现,并且任务从任务队列中出队后就有空闲worker进行处理,有效的缩短了处理时间,提高了处理效率,同时根据所述距离选取空闲worker可以减少资源的浪费。参照图1,其给出了本申请实施例所述一种任务分配方法流程图。步骤11,任务进入工作队列,并分配所述任务的目标服务器;一个任务在建立时设置了对应的属性,如任务标识、任务优先级等,本申请还在任务的属性中设置了所述任务的目标服务器。所述目标服务器是预先设定的处理所述任务的服务器。但在本申请中所述任务可以不由目标服务器进行处理。因此在任务进入工作队列时,会根据属性中的设定,分配所述任务的目标服务器。具体实施中,可以将服务器的IP地址作为服务器标识,用于唯一标识一个服务器,因此,针对所述任务记录对应的服务器标识。为了易于存储,可以将对应的IP地址转化为一个整数。当任务从工作队列中出队时,若目标服务器上存在空闲worker,则执行步骤12,若目标服务器上不存在空闲worker,执行步骤13。步骤12,由所述空闲worker抢占并处理所述任务;步骤13,在所有服务器中查找与所述任务的目标服务器最近的空闲worker,由所述空闲worker抢占并处理所述任务。每个任务都预先分配了对应的目标服务器,因此,当任务从工作队列中出队时,会检测各个服务器上是否存在空闲worker。若目标服务器上存在空闲worker,则所述空闲worker抢占并处理所述任务;否则,查找在其他服务器的空闲worker,选择与所述任务的目标服务器最近的空闲worker来抢占并处理所述任务。其中,若目标服务器中存在多个worker,则选择其中最后处理完任务的空闲worker抢占并处理当前任务。其中,所述worker为处理任务的进程或处理任务的线程。参照图2,其给出了本申请实施例所述一种任务分配方法中空闲worker抢占任务流程图。其中,空闲worker抢占任务的具体方法包括:步骤131,分别计算空闲worker所在的服务器与所述任务的目标服务器之间的距离;若目标服务器中不存在空闲worker,则此时需要查找其他服务器中的空闲worker来处理任务。因此,分别计算所有空闲worker所在的服务器,与所述任务的目标服务器的距离。若使用IP地址计算的某一整数值表示服务器标识,例如worker11所在服务器的标识为123,worker22所在的服务器标识为144,任务的目标服务器标识为134。则worker11所在的服务器与所述任务的目标服务器之间的距离为|123-134|=11。Worker22所在的服务器与所述任务的目标服务器之间的距离为|144-134|=10。步骤132,将所有空闲worker按照所述距离由小到大的顺序进行排序;上述计算了各个空闲worker所在的服务器与所述任务的目标服务器之间的距离,将所有空闲worker按照所述距离由小到大的顺序进行排序,就可以知道各个空闲worker针对所述任务距离远近的排序了。例如,步骤131所述的例子中,空闲worker按照所述距离由小到大的排列顺序即为:worker22<worker11。步骤133,按照所述距离的排序,由距离最小的空闲worker抢占所述任务并进行处理。现有技术的预先分配中,会为任务指定worker,所述任务只能由指定的worker来执行。而本申请仅指定了目标服务器,并且若目标服务器中的worker都没有空闲,则所述任务可有其他服务器抢占并处理。现有技术中也存在由worker抢占任务的方法,但是该抢占方法中,任务处理的比较快的worker通常能够抢占到任务。但是由于任务的抢占没有具体的限定,可能抢占到任务的worker所在的服务器与任务的距离非常远,因此,通常资源消耗比较大,因此会导致任务的处理成本升高,并且系统的稳定系比较低。综上所述,首先,本申请采用预先分配和worker抢占相结合的方式进行任务的分配处理,在任务进入工作队列时,会分配所述任务目标处理位置,即当任务从工作队列中出队时,若目标处理位置上存在空闲worker,则由该空闲worker抢占并处理所述任务。否则,由空闲worker进行抢占来处理任务,即查找各个机房中处理位置距离所述任务的目标处理位置最近的空闲worker,由该空闲worker抢占并处理所述任务,其中,所述worker为处理任务的进程或处理任务的线程。使得所有任务都会有处理的worker,从而避免任务了“饿死”情况的出现。并且任务从任务队列中出队后就有空闲worker进行处理,有效的缩短了处理时间,提高了处理效率,同时根据所述距离选取空闲worker可以减少资源的浪费。其次,本申请进一步可以通过计算各个机房内空闲worker所在的服务器标识与所述任务的目标服务器标识之间的距离,将所有空闲worker按照所述距离由小到大的顺序进行排列,距离最小的worker抢占到所述任务并进行处理。此时可以最大化的减少任务传输对资源的浪费,提高资源的利用率,进一步提高任务的处理效率。具体地,在分布式MySQL集群中,统计结果数据在Hadoop上被计算好后,批量地将所述计算好的数据导入各个MySQL服务器中,因此实际处理中,同时有多个工作队列执行数据导入的任务,因此可能会存在同时有多个任务等待被分配的情况,此时具体做法如下:参照图3,给出了本申请优选实施例所述一种任务调度方法流程图。步骤21,任务进入工作队列,以所述任务的属性为参数计算一个数值,并采用所述数值标识任务的目标服务器;任务进入工作队列时,会查看所述任务的属性,属性中存储了任务的目标服务器标识,例如,目标服务器的IP地址,则可以采用某种方法将所述IP地址计算为一个整数值,本申请对于将IP地址转换为整数值的方法不做限定。然后使用所述整数值标识所述任务的目标服务器。步骤22,当任务从工作队列中出队,并且若干个任务同时等待被分配时,将所有任务按照优先级由高到低的顺序进行排序;任务的属性中还会标识任务的优先级,因此,当若干个任务同时从工作队列中出队等待被分配时,首先将所有任务按照优先级由高到低的顺序进行排序。例如,任务01、任务02、任务03和任务04同时从工作队列中出队等待被分配,对应的优先级分别是高、低、中和高,将所有任务按照优先级由高到低的顺序进行排序,则对应的优先级顺序为:任务01=任务04>任务03>任务02。步骤23,按照所述优先级的顺序排序分配对应任务的处理顺序;上例中优先级顺序为任务01=任务04>任务03>任务02,则最先处理的任务为任务01和任务04,然后可以处理任务3,最后处理任务02。步骤24,针对优先级相同的若干个任务,分别计算空闲worker所在的服务器与每个任务的目标服务器之间的距离;按照优先级分配任务的处理顺序后,需要针对优先级相同的若干个任务,分配处理所述任务的空闲worker。此时针对每个任务,分别计算空闲worker所在的服务器与每个任务的目标服务器之间的距离。例如,上述优先级均为高的任务01和任务04,分别计算worker11和worker22所在的服务器与每个任务的目标服务器之间的距离,则任务01与worker11的距离为23,任务01与worker22的距离为0,任务02与worker11的距离为2,任务02与worker22的距离为13。此时说明worker22是任务01的目标服务器。具体实施中,可以不单独的检测任务的目标服务器,而直接计算所述任务的目标服务器与所有空闲worker所在的服务器之间的距离,若某一空闲worker所在的服务器为任务的目标服务器,则距离为0,即距离最近。步骤25,针对每个任务,将所有空闲worker按照所述距离由小到大的顺序进行排序。例如,针对任务01,空闲worker按照所述距离由小到大的排列顺序为worker22>worker11。针对任务02,空闲worker按照所述距离由小到大的排列顺序为worker11>worker22。步骤26,按照所述距离的排序,由距离最小的空闲worker抢占所述任务并进行处理。按照所述距离的排序,由距离最小的空闲worker抢占所述任务并进行处理。则任务01由worker22抢占并进行处理,任务02由worker11抢占并进行处理。综上所述,本申请还可以用于多任务同时处理的情况,当多个任务同时从工作队列中出队之后,可以将所有任务按照优先级由高到低的排列顺序分配对应的处理顺序,对于优先级相同的任务,针对每个任务,分别计算各个worker的执行位置与所述任务预期的执行位置之间的距离,其中距离最小的worker抢占到所述任务并进行处理。使得多任务同时处理是能够更好的分配各个任务,针对预期的执行位置相同的几个任务不必进行等待,使得任务分配更加合理,并且加快了处理速度。参照图4,其给出了本申请实施例所述多任务同时等待分配示意图。图4中将各个任务和worker看作是平面坐标系中的点,任务t1-t7用四边形表示,其中实心四边形t1、t3、t6和t7代表优先级高,空心四边形t2、t4和t5代表优先级低。圆点表示worker1和worker2。任务t1-t7为同时出队并等待被分配的任务,首先判断个任务的优先级,则t1、t3、t6和t7为优先级高,t2、t4和t5为优先级低。因此首先处理t1、t3、t6和t7,此时任务t1-t7的目标服务器均不空闲,并且worker1和worker2均为空闲,计算worker1和worker2与任务t1、t3、t6和t7之间的距离,则worker1首先抢占并处理任务t3,worker2首先抢占并处理任务t6。若任务t1-t7的目标服务器都一直处于忙碌状态,并且worker1和worker2处理任务的时间相同,则在任务t3处理完后,worker会抢占并处理任务t1,任务t6处理完后,worker2会抢占并处理任务t7。以此类推,worker1会抢占并处理t4,worker2会抢占并处理t5,再然后worker1会抢占到t2。上述过程仅简要介绍任务的抢占方法,具体处理中,不同的情况可能会存在不同的处理过程,此处不应理解为是对本申请的限制。其中,若任务t1-t7中任一任务的目标服务器中存在空闲worker,则由其目标服务器中的空闲worker处理。参照图5,其给出了本申请实施例所述一种任务分配系统结构图。相应的,本申请还提供了一种任务分配系统,包括分配服务器模块11,优先级排序模块12,分配处理顺序模块13,第一抢占模块14和第二抢占模块15,其中,分配服务器模块11,用于任务进入工作队列,并分配所述任务的目标服务器;第一抢占模块14,用于当任务从工作队列中出队时,若目标服务器上存在空闲worker,则由所述空闲worker抢占并处理所述任务;第二抢占模块15,用于若目标服务器上不存在空闲worker,则在所有服务器中查找与所述任务的目标服务器距离最近的空闲worker,由所述空闲worker抢占并处理所述任务,其中,所述worker为处理任务的进程或处理任务的线程。所述第二抢占模块15,包括:计算距离子模块151,用于分别计算空闲worker所在的服务器与所述任务的目标服务器之间的距离;距离排序子模块152,用于将所有空闲worker按照所述距离由小到大的顺序进行排序。抢占子模块153,用于按照所述距离的排序,由距离最小的空闲worker抢占所述任务并进行处理。优选的,所述的系统还包括:优先级排序模块12,用于将所有任务按照优先级由高到低的顺序进行排序;分配处理顺序模块13,用于按照所述优先级的顺序排序分配对应任务的处理顺序。优选的,所述分配服务器模块,还用于以所述任务的属性为参数计算一个数值,并采用所述数值标识任务的目标处理位置。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。以上对本申请所提供的一种任务分配方法及系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1