一种自适应任务迁移方法及装置与流程

文档序号:17900977发布日期:2019-06-13 16:31阅读:145来源:国知局
一种自适应任务迁移方法及装置与流程

本申请涉及任务调度技术领域,具体而言,涉及一种自适应任务迁移方法及装置。



背景技术:

在实际业务开发过程中,很多时候需要使用一些定时任务来解决问题。当定时任务数量很多的时候,需要对任务进行调度管理。在任务调度的过程中,调度器可能因为宕机或网络原因而不能正常工作,或者因为业务的需求量的变化而动态增加或减少机器资源。在这些场景中,调度器往往需要进行启停操作。对于被调度器调度的任务来说,在调度器启停的过程中,如何进行任务迁移,一直是任务调度的核心问题。

目前,任务迁移过程是基于任务分配模式,其中,最简单的任务迁移方式是先将需要下线的调度器中的任务停止执行,然后任务分发中心将这些任务加入待迁移列表,最后再分配到其他调度器。还有一种任务迁移方式是先将待迁移的任务预先分配到其他调度器,等待原先调度器停止执行该任务时,被分配到该任务的调度器立即执行该任务。



技术实现要素:

有鉴于此,本申请实施例的目的在于提供一种自适应任务迁移方法及装置,在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

第一方面,本申请实施例提供了一种自适应任务迁移方法,包括:

接收事件中间件发布的任务释放事件,所述任务释放事件中携带有其他调度器所释放任务的任务标识;

根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,以使所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

结合第一方面,本申请实施例提供了第一方面的第一种可能的实施方式,其中,所述任务释放事件是所述事件中间件在接收到所述其他调度器发送的任务释放事件后生成的。

结合第一方面,本申请实施例提供了第一方面的第二种可能的实施方式,其中,根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,包括:

获取本地正在执行的任务数量;

判断本地正在执行的任务数量是否小于预设的数量阈值;

若本地正在执行的任务数量小于预设的数量阈值,则根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求。

结合第一方面的第二种可能的实施方式,本申请实施例提供了第一方面的第三种可能的实施方式,其中,所述预设的数量阈值是根据以下参数确定的:

本地调度器所在局域网当前所运行的任务总数量、本地调度器所在局域网中的调度器总数量,以及本地调度器的当前容错级别。

结合第一方面,本申请实施例提供了第一方面的第四种可能的实施方式,其中,所述根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务,包括:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务;

若所述抢占结果消息为不成功,则确定不执行所述其他调度器所释放的任务。

结合第一方面,本申请实施例提供了第一方面的第五种可能的实施方式,其中,所述根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务,包括:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务,并向注册中心发送标注请求,以使所述注册中心在任务列表的所述其他调度器所释放的任务上,标注本地调度器的标识信息;所述本地调度器所在局域网中的注册中心用于储存每个调度器所执行的任务。

第二方面,本申请实施例提供了一种自适应任务迁移方法,作用于任务迁移系统,所述任务迁移系统包括:事件中间件、多个调度器和至少一个锁模块;

事件中间件分别与每个调度器连接;每个调度器均与对应的至少一个锁模块连接;

所述方法包括:

事件中间件向目标调度器发送任务释放事件;

目标调度器根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求;

锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

目标调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

结合第二方面,本申请实施例提供了第二方面的第一种可能的实施方式,其中,所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息,包括:

锁模块根据各个所述抢占请求的时间先后顺序,向最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息。

第三方面,本申请实施例提供了一种自适应任务迁移装置,包括:

接收模块,用于接收事件中间件发布的任务释放事件,所述任务释放事件中携带有其他调度器所释放任务的任务标识;

第一抢占请求发送模块,用于根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,以使所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

第一确定模块,用于根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

结合第三方面,本申请实施例提供了第三方面的第一种可能的实施方式,其中,所述任务释放事件是所述事件中间件在接收到所述其他调度器发送的任务释放事件后生成的。

结合第三方面,本申请实施例提供了第三方面的第二种可能的实施方式,其中,所述第一抢占请求发送模块,具体采用下述方式根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求:

获取本地正在执行的任务数量;

判断本地正在执行的任务数量是否小于预设的数量阈值;

若本地正在执行的任务数量小于预设的数量阈值,则根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求。

结合第三方面的第二种可能的实施方式,本申请实施例提供了第三方面的第三种可能的实施方式,其中,所述预设的数量阈值是根据以下参数确定的:

本地调度器所在局域网当前所运行的任务总数量、本地调度器所在局域网中的调度器总数量,以及本地调度器的当前容错级别。

结合第三方面,本申请实施例提供了第三方面的第四种可能的实施方式,其中,所述第一确定模块,具体采用下述方式根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务;

若所述抢占结果消息为不成功,则确定不执行所述其他调度器所释放的任务。

结合第三方面,本申请实施例提供了第三方面的第五种可能的实施方式,其中,所述第一确定模块,具体采用下述方式根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务,并向注册中心发送标注请求,以使所述注册中心在任务列表的所述其他调度器所释放的任务上,标注本地调度器的标识信息;所述本地调度器所在局域网中的注册中心用于储存每个调度器所执行的任务。

第四方面,本申请实施例还提供了一种自适应任务迁移装置,作用于任务迁移系统,所述任务迁移系统包括:事件中间件、多个调度器和至少一个锁模块;

事件中间件分别与每个调度器连接;每个调度器均与对应的至少一个锁模块连接;

所述装置包括:

任务释放事件发送模块,用于事件中间件向目标调度器发送任务释放事件;

第二抢占请求发送模块,用于目标调度器根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求;

抢占结果消息发送模块,用于锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

第二确定模块,用于目标调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

结合第四方面,本申请实施例提供了第四方面的第一种可能的实施方式,其中,所述抢占结果消息发送模块中,锁模块具体采用下述方式根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息:

锁模块根据各个所述抢占请求的时间先后顺序,向最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息。

第五方面,本申请实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面的任一种可能的实施方式中的步骤。

第六方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面的任一种可能的实施方式中的步骤。

第七方面,本申请实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第二方面,或第二方面的任一种可能的实施方式中的步骤。

第八方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第二方面,或第二方面的任一种可能的实施方式中的步骤。

本申请实施例提供的自适应任务迁移方法及装置,在进行任务迁移的时候,当调度器接收到事件中间件发布的任务释放事件时,所述任务释放事件中携带有其他调度器所释放任务的任务标识,能够根据所述其他调度器所释放任务的任务标识,自动向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,以使所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。本申请所提供的方法,在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

进一步地,本申请实施例提供的自适应任务迁移方法,调度器在抢占任务之前,会根据自身的负载情况和预设阈值,确定是否发起抢占,从而可以使得各个调度器实现负载均衡。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本申请实施例所提供的一种任务迁移系统的结构示意图;

图2示出了本申请实施例所提供的一种自适应任务迁移方法的流程图;

图3示出了本申请实施例所提供的一种自适应任务迁移方法中,判断是否发送抢占请求的流程图;

图4示出了本申请实施例所提供的另一种自适应任务迁移方法的流程图;

图5示出了本申请实施例所提供的另一种任务迁移系统的结构示意图;

图6示出了本申请实施例所提供的一种自适应任务迁移装置的结构示意图;

图7示出了本申请实施例所提供的另一种自适应任务迁移装置的结构示意图;

图8示出了本申请实施例所提供的一种计算机设备的结构示意图;

图9示出了本申请实施例所提供的另一种计算机设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

首先,对本申请可适用的应用场景进行介绍。在实际业务开发过程中,很多时候需要使用一些定时任务来解决问题。当定时任务数量很多的时候,需要对任务进行调度管理。任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。在任务调度的过程中,调度器可能因为宕机或网络原因导致不能正常工作,或者根据业务的需求量而动态减少调度器数量。在这些场景中,不能继续正常工作的调度器需要将其正在执行的任务释放出来,被释放的任务需要由其他能够正常工作的调度器来执行。在这个过程中就涉及到任务迁移,即将任务从一个调度器移动到另一个调度器,从而使得任务可以继续被执行。

目前,任务迁移过程是基于任务分配模式,其中,最简单的任务迁移方式是先将需要下线的调度器中的任务停止执行,然后任务分发中心将这些任务加入待迁移列表,最后再分配到其他调度器中。这种方式往往需要一段时间的静默期,即将任务停止执行再分配的过程中,待迁移的任务不能被正常执行。

另一种任务迁移方式是先将待下线的调度器中待迁移的任务预先分配到其他调度器,当待下线的调度器停止执行该任务时,被预先分配到该任务的调度器立即执行该任务。这种方式不会出现静默期,但随之而来的问题有:由于每个任务的执行时机是不同的,调度器之间需要互相协调才能完成任务迁移;如果在迁移过程中,被分配到该任务的目的调度器不能正常工作,则目的调度器上被分配的任务不能被正常执行,还需要进行重新分配,而再分配的过程极其复杂且容易出错。

针对上述问题,本申请提供了一种自适应任务迁移方法及装置,在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

为便于对本实施例进行理解,首先对本申请实施例所提供的一种自适应任务迁移方法所作用的一种典型任务迁移系统进行介绍,参见图1所示,该任务迁移系统包括:事件中间件11、多个调度器12和至少一个锁模块13;

事件中间件11分别与每个调度器12连接;每个调度器12均与对应的至少一个锁模块13连接。

该系统还包括:注册中心14;事件中间件11与注册中心14连接;每个调度器12均与注册中心14连接。

事件中间件,主要是具有发布消息接收、消息功能的组件。可以由基于分布式应用程序协调服务(zookeeper)来实现,也可以由消息队列(messagequeue)来实现。

注册中心,是存储数据的一个中心节点,用于储存每个调度器所执行的任务和对应的信息。注册中心与事件中间件是两个独立的单元,注册中心也可以由基于分布式应用程序协调服务(zookeeper)来实现。

锁模块,与任务一一对应,具有判断调度器抢占与其对应的任务是否成功的功能。例如,锁模块可以为与任务一一对应的分布式锁。每个任务对应的分布式锁是唯一的,只能被一个调度器抢占成功。

事件中间件、注册中心、锁模块均属于服务器的一部分,与服务器连接的各个调度器处在同一局域网中。

目前,在现有的任务迁移过程中,是基于任务分配模式,在基于任务分配模式的任务迁移系统中,包括任务分发中心和多个调度器。任务分发中心负责将任务分发给各个调度器。通过上述现有技术的分析,可知,基于任务分配模式的任务迁移方法容易导致在迁移过程中出现静默期或分配出错的问题,实时性较低。

从图1中可看出,在本申请中的任务迁移过程是基于抢占模式,任务是由调度器自己主动抢占获取的,注册中心只负责存储需要执行的任务的信息。本申请实施例可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

参见图2所示,本申请实施例所提供的一种自适应任务迁移方法,包括以下步骤:

s201:调度器接收事件中间件发布的任务释放事件。

其中,任务释放事件中携带有其他调度器所释放任务的任务标识。

在一种可能的情况下,任务释放事件是事件中间件在接收到其他调度器发送的任务释放事件后生成的。

此处,其他调度器在不能继续正常工作时,会进入待下线状态,将正在执行的任务进行释放,并向事件中间件发生所释放的任务对应的任务释放事件后,自动停机下线。其他调度器向事件中间件发送任务释放事件和停机下线的具体过程将在下文中叙述。

注册中心用于储存当前需要或正在被执行的任务以及每个正在被执行的任务对应的调度器的标识信息,例如调度器的序号。待下线的调度器将正在执行的任务进行释放后,注册中心中与所释放的任务所对应的调度器标识信息会消除,表示该任务被释放待抢占。

s202:调度器根据其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求,以使锁模块根据抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息。

为了在任务调度过程中各个调度器能够负载均衡,即各个调度器所执行的任务量不会过多或过少,本地调度器在发送抢占请求前,参见图3所示,本地调度器可以通过下述方式判断是否向与其他调度器所释放的任务对应的锁模块发送抢占请求:

s301:获取本地正在执行的任务数量;

s302:判断本地正在执行的任务数量是否小于预设的数量阈值;

s303:若本地正在执行的任务数量小于预设的数量阈值,则根据其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求。

具体地,预设的数量阈值可以根据以下参数确定:

本地调度器所在局域网当前所运行的任务总数量、本地调度器所在局域网中的调度器总数量,以及本地调度器的当前容错级别。

根据上述参数,以及预设的计算公式计算得到预设的数量阈值。预设的计算公式可以为公式(1):

t=1+(k/max(s-n,1))公式(1);

其中,t为预设的数量阈值;k为本地调度器所在局域网当前所运行的任务总数量;s为本地调度器所在局域网中的调度器总数量;n为本地调度器的当前容错级别,用于表征当n台调度器不能正常工作时,整个局域网中的调度器集群还能正常对外提供服务。

在设计预设的计算公式时,应该保证,调度器总数量s与预设的数量阈值t的乘积应该不小于当前所运行的任务总数量k。由于在计算机的除法中,商的结果是向下取整的,例如当k=5,s=2,n=0时,max(s-n,1)=2,则k/max(s-n,1)=2,表示每个调度器最多可以执行2个任务,此时,所有调度器共可执行的任务数量为4,小于当前所运行的任务总数量5,不满足实际情况,因此,需要在k/max(s-n,1)前加1。max(s-n,1)可以保证分母不为0。

需要注意的是,上述公式(1)仅是示例性的,还可以根据具体情况,设置不同的计算公式。

可选地,上述三个参数储存在注册中心中,其中,为了使得注册中心中存储有当前局域网中调度器总数量,在实现的时候,在一个局域网中的各个调度器在启动时,可以先向注册中心注册自己的信息,此时,在注册中心中就可以获得所有调度器的总数量。或者,调度器的信息可以是由管理人员通过管理端的接口存储到注册中心中的。需要被执行的任务的信息也可以是由管理人员通过管理端的接口存储到注册中心。

在一种可能的实施方式中,预设的数量阈值可以通过本地调度器根据上述参数计算得到。上述三个参数中的至少一个可能是动态变化的,具体实现的时候,本地调度器可以通过事件中间件订阅上述三个参数的动态变化事件,当三个参数中的至少一个发生变化时,事件中间件会向各个调度器发送此变化事件,然后本地调度器在接收到此变化事件后,从注册中心获取变化的参数,进而根据获取的三个参数计算预设的数量阈值。在另外的可能的实施方式中,也可以由其他具有计算能力的处理单元计算得到预设的数量阈值,然后传输给本地调度器。

调度器的当前容错级别可以是管理人员根据本地调度器的自身性能人为设置的,然后通过管理端的接口存储到注册中心。调度器的自身性能可以通过下列参数中的至少一个进行衡量:

调度器cpu核数、调度器内存大小、调度器网络带宽。

在根据调度器的自身性能,设置当前容错级别时,自身性能越好,当前容错级别可以设置的越高。例如,4核8g内存的调度器比2核4g内存的调度器的性能要好,如果2核4g内存的调度器的容错级别设置为1,那么4核8g内存的调度器的容错级别可以设置为2,或者更大。如果将1核1g内存的调度器的容错级别设置为1,那么4核8g内存的机器可以设置为4到8之间。

通过上述方式判断出本地正在执行的任务数量小于预设的数量阈值时,说明本地调度器还可以抢占其他的任务,则可以根据其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求。当判断出本地正在执行的任务数量不小于预设的数量阈值时,说明本地调度器不可以再抢占其他的任务,则不发送抢占请求。这样可以保证处在同一个局域网中各个调度器负载均衡。

当本地调度器根据其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求时,与其他调度器所释放的任务对应的锁模块,可以为与其他调度器所释放的任务对应的分布式锁。

分布式锁是控制分布式系统之间同步访问共享资源的一种方式,与每个任务分别对应的分布式锁是唯一的,只能被一个调度器抢占成功。

在一种可能的实施方式中,当锁模块接收到抢占请求时,锁模块根据各个抢占请求的时间先后顺序,向最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息。即哪个调度器发起抢占请求最快,就会抢占成功。抢占成功时,相当于锁模块对被抢占成功的任务进行加锁。

当锁模块为分布式锁时,分布式锁上封装的应用程序编程接口(applicationprogramminginterface,api)会向最先发送抢占请求的调度器返回一个抢占成功的抢占结果消息,例如1,表示该调度器抢占成功。如果抢占结果消息为其他,例如0,则表示没有抢占成功。其中,分布式锁,可以为基于分布式应用程序协调服务(zookeeper)的分布式锁。

调度器发送抢占请求的快慢可能会受到自身性能或网络状况的影响,自身性能较好的调度器可能发起抢占请求的速度要比自身性能较差的调度器快,当性能较好的调度器中正在执行的任务数量达到预设的数量阈值时,就不能再进行抢占,此时,其他调度器就可以抢占到其他任务。最终所有调度器会实现动态负载均衡。当局域网中的任务数量较大时,这种均衡的趋势会越来越明显,因为调度器获取任务是通过抢占模式,在众多的调度器中,某个调度器每次都能抢占任务成功的概率是非常低的。

本地调度器通过上述方式接收到锁模块根据抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息后,执行步骤s203。

s203:调度器根据抢占结果消息,确定是否执行其他调度器所释放的任务。

若抢占结果消息为成功,则确定执行其他调度器所释放的任务;

若抢占结果消息为不成功,则确定不执行其他调度器所释放的任务。

在一种可能的实施方式中,若抢占结果消息为成功,则确定执行其他调度器所释放的任务,并向注册中心发送标注请求,以使注册中心在任务列表的其他调度器所释放的任务上,标注本地调度器的标识信息,以此表示该任务已经被本地调度器抢占成功。在任务执行时,可以从注册中心中获取相关任务进行执行时所需要的信息。

需要注意的是,当被释放的任务同时有多个时,本地调度器可以根据当前还可以抢占的任务数量m,即预设的数量阈值与本地正在执行的任务数量的差值,同时分别向m个任务分别对应的m个锁模块发送抢占请求;也可以每次只向一个锁模块发送抢占请求。当抢占成功时,还可以根据抢占成功的任务数量,自动更新本地正在执行的任务数量,即在原先的数量上加上抢占成功的任务数量。但本地调度器最终执行的任务数量不能超过本地调度器的预设的数量阈值。

本申请实施例通过上述内容详细阐述了本地调度器抢占任务的过程,即当调度器接收到事件中间件发布的任务释放事件时,能够根据其他调度器所释放任务的任务标识,自动向与其他调度器所释放的任务对应的锁模块发送抢占请求,以使锁模块根据抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;调度器根据抢占结果消息,确定是否执行其他调度器所释放的任务。本地调度器提供的方法,可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

下面将详细阐述本地调度器在不能继续正常工作时,释放任务自动下线的过程:

本地调度器释放任务可能会有两种情况:主动释放和被动释放。主动释放指的是:管理人员进行调度器管理时,可能会根据当前需要处理的任务数量适当减少调度器个数,管理人员会将需要下线的调度器名单通过管理端的接口传输到注册中心,注册中心接受到下线名单时,事件中间件会向各个调度器发布这个消息,本地调度器在接收到事件中间件发送的消息时,可以从注册中心中获取下线名单,并检测下线名单中是否包括本地调度器。当下线名单中包括本地调度器时,本地调度器会进入待下线状态,不会发生抢占操作,且开始主动释放任务,相当于之前对任务加的锁被解锁,将所有任务释放完之后,自动停机下线。被动释放指的是:本地调度器在发生宕机时,被动释放任务,将所有任务释放完之后,自动停机下线。

本地调度器在释放任务的同时,会向事件中间件发送与所释放的任务对应的任务释放事件,以使事件中间件向其他处于正常工作状态的调度器发布该任务释放事件。

需要注意的是,当本地调度器在接收到事件中间件发送的下线名单的消息后,释放任务的过程中,如果又接收到了事件中间件发送的新的下线名单的消息,当检测到新的下线名单中不包括本地调度器时,可以停止释放任务,尝试进入上线状态,如果上线成功,说明本地调度器可以继续正常工作,并可以启动抢占操作。

在本申请实施例中,注册中心、事件中间件、锁模块是相互独立的处理单元,可以有不同的实现方式。都可以基于分布式应用程序协调服务(zookeeper)来实现,也可以由其他的实现方式。

基于同一发明构思,本申请实施例中还提供了另一种自适应任务迁移方法,作用于任务迁移系统,所述任务迁移系统包括:事件中间件、多个调度器和至少一个锁模块;

事件中间件分别与每个调度器连接;每个调度器均与对应的至少一个锁模块连接。

参见图4所示,本申请实施例中提供的另一种自适应任务迁移方法包括:

s401:事件中间件向目标调度器发送任务释放事件。

其中,任务释放事件是事件中间件在接收到其他调度器发送的任务释放事件后生成的。

s402:目标调度器根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求。

步骤s402在具体实现的时候,目标调度器可以获取本地正在执行的任务数量;判断本地正在执行的任务数量是否小于预设的数量阈值;若本地正在执行的任务数量小于预设的数量阈值,则根据其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求。

其中,预设的数量阈值是根据以下参数确定的:

本地调度器所在局域网当前所运行的任务总数量、本地调度器所在局域网中的调度器总数量,以及本地调度器的当前容错级别。

s403:锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息。

步骤s403在具体实现的时候,锁模块可以根据各个抢占请求的时间先后顺序,向最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息。

s404:目标调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

在一种可能的实施方式中,步骤s404在具体实现的时候,若抢占结果消息为成功,则目标调度器确定执行其他调度器所释放的任务;若抢占结果消息为不成功,则目标调度器确定不执行其他调度器所释放的任务。

在一种可能的实施方式中,步骤s404在具体实现的时候,若抢占结果消息为成功,则目标调度器确定执行其他调度器所释放的任务,并向注册中心发送标注请求,以使注册中心在任务列表的其他调度器所释放的任务上,标注本地调度器的标识信息;本地调度器所在局域网中的注册中心用于储存每个调度器所执行的任务。

由于本申请实施例中提供的另一种自适应任务迁移方法解决问题的原理与本申请实施例上述第一种自适应任务迁移方法相似,具体的实施可以参见上文中方法的实施,重复之处不再赘述。

上述内容对本申请提供的自适应任务迁移方法进行了详细解释,下面提供一个具体实施例,来说明本申请最优选的使用流程:

具体实施例

参见图5所示的任务迁移系统,本申请提供的自适应任务迁移方法最优选的使用流程为:

管理人员进行调度器管理时,将需要下线的调度器名单通过管理端的接口传输到注册中心;

注册中心接受到下线名单时,事件中间件会向各个调度器发布这个下线名单消息;

各个调度器在接收到事件中间件发送的消息时,从注册中心中获取下线名单,并检测下线名单中是否包括本调度器;

当下线名单中包括本调度器时,本调度器会进入待下线状态,不会发生抢占操作,且开始主动释放任务;

调度器在发生宕机时,进入待下线状态,不会发生抢占操作,且开始被动释放任务;

待下线的调度器在释放任务的同时,会向事件中间件发送与所释放的任务对应的任务释放事件,待下线的调度器将所有任务释放完之后,自动停机下线;

事件中间件接收到待下线的调度器发送的任务释放事件后,向其他正常工作的目标调度器发布任务释放事件;

目标调度器接收事件中间件发布的任务释放事件后,获取本地正在执行的任务数量;判断本地正在执行的任务数量是否小于预设的数量阈值;若本地正在执行的任务数量小于预设的数量阈值,则根据任务释放事件所对应的其他调度器所释放任务的任务标识,向与其他调度器所释放的任务对应的锁模块发送抢占请求;

锁模块根据各个抢占请求的时间先后顺序,向最先发送抢占请求的目标调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息;

目标调度器根据抢占结果消息,确定是否执行其他调度器所释放的任务。若抢占结果消息为成功,则确定执行其他调度器所释放的任务;若抢占结果消息为不成功,则确定不执行其他调度器所释放的任务;

当目标调度器接收到的抢占结果消息为成功时,向注册中心发送标注请求;

注册中心接收到目标调度器发送的标注请求后,在任务列表的其他调度器所释放的任务上,标注目标调度器的标识信息;

目标调度器在执行抢占成功的任务时,向注册中心获取执行该任务所需的信息后,开始执行。

本申请提供的具体实施例,在调度器发生宕机或在下线名单时,可以自动释放正在执行的任务,并向事件中间件发送任务释放事件,事件中间件把接收得到的任务释放事件发布给其他正常工作的调度器,使得其他正常工作的调度器在当前可以抢占任务的状态下启动抢占操作,使得释放的任务能够在调度器之间实现平滑迁移,具有实时性。同时,各个调度器会根据自身的负载情况是否超过阈值来决定是否发起抢占,保证各个调度器的负载均衡。

基于同一发明构思,本申请实施例中还提供了与自适应任务迁移方法对应的自适应任务迁移装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述自适应任务迁移方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参见图6所示,本申请实施例提供的一种自适应任务迁移装置,包括:

接收模块61,用于接收事件中间件发布的任务释放事件,所述任务释放事件中携带有其他调度器所释放任务的任务标识;

第一抢占请求发送模块62,用于根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,以使所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

第一确定模块63,用于根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

可选地,所述任务释放事件是所述事件中间件在接收到所述其他调度器发送的任务释放事件后生成的。

可选地,所述第一抢占请求发送模块62,具体采用下述方式根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求:

获取本地正在执行的任务数量;

判断本地正在执行的任务数量是否小于预设的数量阈值;

若本地正在执行的任务数量小于预设的数量阈值,则根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求。

可选地,所述预设的数量阈值是根据以下参数确定的:

本地调度器所在局域网当前所运行的任务总数量、本地调度器所在局域网中的调度器总数量,以及本地调度器的当前容错级别。

可选地,所述第一确定模块63,具体采用下述方式根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务;

若所述抢占结果消息为不成功,则确定不执行所述其他调度器所释放的任务。

可选地,所述第一确定模块63,具体采用下述方式根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务:

若所述抢占结果消息为成功,则确定执行所述其他调度器所释放的任务,并向所述注册中心发送标注请求,以使所述注册中心在任务列表的所述其他调度器所释放的任务上,标注本地调度器的标识信息;所述本地调度器所在局域网中的注册中心用于储存每个调度器所执行的任务。

基于同一发明构思,本申请实施例中还提供了与另一种自适应任务迁移方法对应的自适应任务迁移装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述另一种自适应任务迁移方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参见图7所示,本申请实施例提供的另一种自适应任务迁移装置,作用于任务迁移系统,所述任务迁移系统包括:事件中间件、多个调度器和至少一个锁模块;

事件中间件分别与每个调度器连接;每个调度器均与对应的至少一个锁模块连接;

本申请实施例提供的另一种自适应任务迁移装置包括:

任务释放事件发送模块71,用于事件中间件向目标调度器发送任务释放事件;

第二抢占请求发送模块72,用于目标调度器根据所述其他调度器所释放任务的任务标识,向与所述其他调度器所释放的任务对应的锁模块发送抢占请求;

抢占结果消息发送模块73,用于锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;

第二确定模块74,用于目标调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。

可选地,所述抢占结果消息发送模块73中,锁模块具体采用下述方式根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息:

锁模块根据各个所述抢占请求的时间先后顺序,向最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务成功的抢占结果消息;并向不是最先发送抢占请求的调度器返回表征抢占其他调度器所释放的任务不成功的抢占结果消息。

本申请实施例提供的自适应任务迁移装置,在进行任务迁移的时候,当调度器接收到事件中间件发布的任务释放事件时,所述任务释放事件中携带有其他调度器所释放任务的任务标识,能够根据所述其他调度器所释放任务的任务标识,自动向与所述其他调度器所释放的任务对应的锁模块发送抢占请求,以使所述锁模块根据所述抢占请求返回表征抢占其他调度器所释放的任务是否成功的抢占结果消息;调度器根据所述抢占结果消息,确定是否执行所述其他调度器所释放的任务。本申请所提供的方法,在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一种自适应任务迁移方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述第一种自适应任务迁移方法,从而可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

本申请实施例还提供了另一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第二种自适应任务迁移方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述第二种自适应任务迁移方法,从而可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

对应于本申请实施例提供的自适应任务迁移方法,本申请实施例还提供了一种计算机设备,如图8所示,该设备包括存储器1000、处理器2000及存储在该存储器1000上并可在该处理器2000上运行的计算机程序,其中,上述处理器2000执行上述计算机程序时实现上述自适应任务迁移方法的步骤。

具体地,上述存储器1000和处理器2000能够为通用的存储器和处理器,这里不做具体限定,当处理器2000运行存储器1000存储的计算机程序时,能够执行上述自适应任务迁移方法,从而可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

对应于本申请实施例提供的另一种自适应任务迁移方法,本申请实施例还提供了另一种计算机设备,如图9所示,该设备包括存储器3000、处理器4000及存储在该存储器3000上并可在该处理器4000上运行的计算机程序,其中,上述处理器4000执行上述计算机程序时实现上述自适应任务迁移方法的步骤。

具体地,上述存储器3000和处理器4000能够为通用的存储器和处理器,这里不做具体限定,当处理器4000运行存储器3000存储的计算机程序时,能够执行上述自适应任务迁移方法,从而可以在某个调度器将任务释放时,通过任务抢占模式,而非任务分配模式来使其他调度器确定其所需要执行的任务,可以使任务在被释放的同时自动被抢占,从而提高了任务执行的效率。

本申请实施例所提供的自适应任务迁移方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求书所记载的保护范围为准。

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