用于分布式系统的调度方法、装置及电子设备与流程

文档序号:11917920阅读:139来源:国知局
用于分布式系统的调度方法、装置及电子设备与流程

本申请涉及计算机技术领域,具体涉及两种用于分布式系统的调度方法;相应于上述方法,本申请同时涉及两种用于分布式系统的调度装置以及两种电子设备。



背景技术:

在互联网技术不断发展的今天,越来越多的数据处理依赖较高的计算能力,为了解决单一处理节点无法处理多种多样的工作,以及无法满足越来越高的计算能力的要求,目前常利用分布式系统处理上述问题。

在分布式系统中,为了让各个系统间协同工作,提出了分布式锁的概念,分布式锁是控制分布式系统之间访问共享资源的一种方式,抢到分布式锁的机器中的线程,可以继续执行任务,其它机器等待该锁释放。

由此可见,由于分布式锁存在抢锁-释放锁的过程,而且同一时间只能有一个机器抢到锁,抢到锁的机器才能运行,所以机器在处理任务时的效率较低,而且机器在使用分布式锁的过程中,如果抢到锁的机器突然宕机,且该锁还未被释放,则会能造成死锁。另外,在抢占时,机器如果一次抢占不成功,则还需要循环抢占,所以任务分配收敛较慢,分配时间长。



技术实现要素:

本申请提供两种用于分布式系统的调度方法,以解决现有技术中的上述问题。本申请同时涉及两种用于分布式系统的调度装置以及两种电子设备。

本申请提供了一种用于分布式系统的调度方法,所述用于分布式系统的调度方法包括:

分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;

通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;

将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;

所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

可选的,所述资源提供单位为在分布式系统中的机器,所述资源消耗单位为处理待分配的任务项的线程组。

可选的,所述资源提供单位为处理待分配的任务项的线程组,所述资源消耗单位为待分配的任务项。

可选的,若所述资源消耗单位平均承担数量N的取整方式为:去除所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值的小数位;

此时,所述按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,是从资源消耗单位中提取数量为N或者(N+1)的资源消耗单位,包括:

将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

将资源消耗单位数量减去取整资源消耗单位数量获取剩余资源消耗单位数量X;

对于资源提供单位顺序号M的数值小于等于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N+1的资源消耗单位;

为资源提供单位顺序号M的数值大于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

可选的,若所述资源消耗单位承担数量N的取整方式为:所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值,若存在小数位,则取大于该获得值的最小整数;

此时,所述按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N 或者(N-1)或者(N+1)的资源消耗单位,是从资源消耗单位中提取数量为N或者(N-1)的资源消耗单位,包括:

将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

将取整资源消耗单位数量减去资源消耗单位数量获取多余资源消耗单位数量Y;

对于资源提供单位顺序号M的数值小于等于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为(N-1)的资源消耗单位;

为资源提供单位顺序号M的数值大于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

相应的,本申请还提供了一种用于分布式系统的调度装置,所述用于分布式系统的调度装置包括:

资源提供单位获取单元,用于分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;

编号单元,用于通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;

承担数量计算单元,用于将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;

资源消耗单位分配单元,用于所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

可选的,若所述承担数量计算单元,具体用于去除所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值的小数位,则所述资源消耗单位分配单元,包括:取整计算子单元、剩余数计算子单元、第一资源消耗单位分配子单元以及第二资源消耗单位分配子单元;

所述取整计算子单元,用于从资源消耗单位中提取数量为N或者(N+1)的资源消耗单位,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

所述剩余数计算子单元,用于将资源消耗单位数量减去取整资源消耗单位数量获取剩余资源消耗单位数量X;

所述第一资源消耗单位分配子单元,用于对于资源提供单位顺序号M的数值小于等于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N+1的资源消耗单位;

所述第二资源消耗单位分配子单元,用于为资源提供单位顺序号M的数值大于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

可选的,若所述承担数量计算单元,具体用于若存在小数位,则取大于该获得值的最小整数,则所述资源消耗单位分配单元,包括:取整计算子单元、多余数计算子单元、第一资源消耗单位分配子单元以及第二资源消耗单位分配子单元;

所述取整计算子单元,用于从资源消耗单位中提取数量为N或者(N-1)的资源消耗单位,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

所述多余数计算子单元,用于将取整资源消耗单位数量减去资源消耗单位数量获取多余资源消耗单位数量Y;

所述第一资源消耗单位分配子单元,用于对于资源提供单位顺序号M的数值小于等于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为(N-1)的资源消耗单位;

所述第二资源消耗单位分配子单元,用于为资源提供单位顺序号M的数值大于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

此外,本申请还提供了一种电子设备,所述电子设备包括:

显示器;

处理器;

存储器,用于存储分布式系统的调度程序,所述程序在被所述处理器读取执行时,执行如下操作:分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

此外,本申请还提供了另一种用于分布式系统的调度方法,所述用于分布式系统的调度方法包括:

读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求;

按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量;

将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

可选的,所述控制信息还包括:在zookeeper系统中注册的线程组,以及待处理的任务项;

在所述为服务器配置相应的线程组的步骤之后,包括:

按照所述在zookeeper系统中注册的线程组数量,以及所述待处理的任务项,计算各个线程组需要分配的任务项数量;

将所述在zookeeper系统中注册的线程组数量作为资源提供单位,将所述需 要处理的任务项作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为各个线程组配置相应的任务项,包括对已经分配的任务项重新分配、为进程组分配新的任务项以及消除需要停止的任务项。

可选的,所述zookeeper系统中存储的控制信息被存储在服务器本地,并以服务器本地存储的控制信息作为该服务器执行分布式任务调度的依据;若zookeeper系统出现异常,则直接以服务器本地存储的控制信息执行分布式任务调度。

可选的,在所述读取zookeeper系统中存储的控制信息之前,包括:

各个服务器具有重新加载字段Reload;

各个服务器具有间隔固定时间就读取所述重新加载字段Reload的值的守护线程;

若所述守护线程读取到的所述重新加载字段Reload的值为true,则进入所述读取zookeeper系统中存储的控制信息的步骤;并将所述重新加载字段Reload的值设置为false。

可选的,对所述zookeeper系统持续监听;若出现以下任意事项则设置所述重新加载字段Reload为true:zookeeper系统重启、zookeeper系统配置变化、zookeeper系统存储的控制信息变化、服务器初始化。

可选的,所述分布式系统的各个线程组分别设置有对应该线程组的加载判断字段Needload;

所述各个线程组分别具有间隔固定时间就读取所述加载判断字段Needload的值的线程组守护进程;

若所述线程组守护进程读取到的所述重新加载字段Needload的值为true,则进入所述按照所述在zookeeper系统中注册的线程组数量,以及所述需要处理的任务项,计算各个线程组需要分配的任务项数量的步骤;并将所述加载判断字段Needload的值设置为false。

可选的,在所述为各个线程组配置相应的任务项的步骤之后,包括:

读取zookeeper的控制信息版本号;

获取服务器的控制信息版本号;

判断服务器的版本号是否与zookeeper的版本号相同;

若否,则读取存储在服务器本地的重新加载字段Reload,并将所述重新加载字段的取值修改为true。

可选的,各个服务器设置有服务器运行标志字段isRunning;该服务器运行标志字段在服务器正常运行的情况下为true;当所述服务器需要退出系统时,则设置服务器运行标志字段isRunning设置为false,并停止服务器初始化线程、停止系统守护线程、停止服务器的所有线程组、注销服务器与zookeeper的连接。

相应的,本申请还提供了另一种用于分布式系统的调度装置,所述用于分布式系统的调度装置包括:

控制信息读取单元,用于读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求;

重新计算单元,用于按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量;

线程组分配单元,用于将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

可选的,所述控制信息读取单元,读取的所述控制信息还包括:在zookeeper系统中注册的线程组,以及待处理的任务项;

所述用于分布式系统的调度装置,还包括:

任务项计算单元,用于在所述为服务器配置相应的线程组之后,按照所述在zookeeper系统中注册的线程组数量,以及所述待处理的任务项,计算各个线程组需要分配的任务项数量;

任务项分配单元,用于将所述在zookeeper系统中注册的线程组数量作为资源提供单位,将所述需要处理的任务项作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为各个线程组配置相应的任务项,包括对已经分配的任务项重新分配、为进程组分配新的任务项以及消除需要停止的任务项。

可选的,所述用于分布式系统的调度装置,还包括:

控制信息存储单元,用于将所述zookeeper系统中存储的控制信息存储在服务器本地,并以服务器本地存储的控制信息作为该服务器执行分布式任务调度的依据;若zookeeper系统出现异常,则直接以服务器本地存储的控制信息执行分布式任务调度。

此外,本申请还提供了一种电子设备,包括:

显示器;

处理器;

存储器,用于存储分布式系统的调度程序,所述程序在被所述处理器读取执行时,执行如下操作:读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求;按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量;将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

与现有技术相比,本申请具有以下优点:

本申请提供的一种用于分布式系统的调度方法、装置以及一种电子设备。通过分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。所述技术方案解决了分布式系统中通过分布式锁分配任务产生的处理任务时效率较低、会能造成死锁以及循环抢占导致任务分配收敛较慢分配时 间长的问题。

本申请还提供一种具体用于zookeeper系统环境的分布式系统调度方法,这种方法在zookeeper系统中具体实现了上述调度方式。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1示出了根据本申请的第一实施例提供的用于分布式任务的调度方法的流程图;

图2示出了根据本申请的第一实施例提供的从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位的流程图;

图3示出了根据本申请的第一实施例提供的另一种从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位的流程图;

图4示出了根据本申请的第二实施例提供的用于分布式任务的调度装置的示意图;

图5示出了根据本申请的第三实施例提供的电子设备的示意图;

图6示出了根据本申请的第四实施例提供的用于分布式系统的调度方法的流程图;

图7示出了根据本申请的第四实施例提供的用于分布式系统的调度方法中为各个线程组配置相应的任务项的流程图;

图8示出了根据本申请的第五实施例提供的另一种用于分布式任务的调度装置的示意图;

图9示出了根据本申请的第六实施例提供的电子设备的示意图。

具体实施方式

为了能够更清楚地理解本申请的上述目的、特征和优点,下面结合附图和具体实施方式对本申请进行进一步的详细描述。需要说明的是,在不冲突的情况 下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是,本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此,本申请不受下面公开的具体实施的限制。

在详细描述本实施例的具体步骤之前,先对本技术方案涉及的分布式调度作简要说明。

分布式调度是指:当需要调度的任务量非常大时,若只用一台机器处理任务,则任务的处理速度会比较缓慢,因此往往选用分布式系统用多台机器来处理任务,在处理时需要将大量的任务划分为多个任务块,通过协调如何更快的执行这些任务块,使分布式系统中的机器负担的任务块更加均衡、迅速、容灾性强的调度方案,叫做分布式调度,实现分布式调度需要使用分布式调度组件。

在分布式系统中,目前常利用zookeeper对系统中的多台服务器中的所有进程配置信息进行集中管理。zookeeper顾名思义动物园管理员,在计算机技术领域中zookeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。现有的基于zookeeper的信息配置方案是:每个服务器中每个进程都要建立与zookeeper之间的强依赖,每个进程通过调用zookeeper的接口监控自身进程的配置信息,当某一个进程的配置信息需要修改时,操作人员只需要修改zookeeper上相应的配置信息,一旦发现zookeeper配置信息发生变动,对应的服务器进程及时更新自身进程的配置信息。

本申请的第一实施例提供了一种用于分布式系统的调度方法。该调度方法对于分布式系统的资源调配具有普适性,不限于采用zookeeper系统的分布式系统。所述用于分布式系统的调度方法实施例如下:

请参考图1,其示出了根据本申请的第一实施例提供的用于分布式系统的调度方法的流程图。以下结合图1对第一实施例进行详细说明。

步骤S101,分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M。

首先需要说明,分布式系统中有各种类型的资源提供单位,在本实施例中, 以分布式系统中的机器(计算机系统中一般可以称为主机或者服务器,考虑到其它分布式系统存在的可能性,这里使用机器一词概括)作为所述分布式系统的资源提供单位的例子。

根据本步骤,在该分布式系统中的每个资源提供单位,即每个机器通过与分布式系统的管理中心进行连接后,获取在该分布式系统中已注册的机器的数量,以及该机器本身在所有机器中的顺序号M。所述机器是在该分布式系统中运行的物理机器,所述机器的顺序号是按照每个机器在该分布式系统中注册时的顺序为区分每个机器而产生的编号。

此处的物理机器,在计算机系统中可以表现为Java虚拟机(缩写为JVM)Java虚拟机)的缩写,JVM是一种用于计算设备的规范,使用JVM可以实现与平台的无关性,一般的语言如果要在不同的平台上运行,至少需要编译成不同的目标代码;使用JVM后,在不同平台上运行时不需要重新编译,只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

例如:在分布式系统中运行的某一具体的机器通过与分布式系统的管理中心进行连接后,获取到在该分布式系统中已注册了10台机器,且该机器本身在分布式系统中是第三个注册的,则获取到该机器在所有机器中的顺序号为3。

步骤S103,通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号。

在本实施例中,所述资源消耗单位是在分布式系统中的机器内,用于处理待分配的任务项的线程组,在本步骤中,在该分布式系统中的每个机器通过与分布式系统的管理中心进行连接后,从所述管理中心中获取在本次调度时用于处理待分配的任务项的线程组的数量,所述线程组被顺序编号。

例如:在分布式系统中运行的某一具体的机器通过与分布式系统的管理中心进行连接后,该机器从所述管理中心中获取到在本次调度时有30个用于处理待分配的任务项的线程组,所述线程组具有从1-30的编号,且每个线程组按照顺序对应一个具体的编号。

步骤S105,将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值。

在本实施例中,本步骤接收步骤S101和步骤S103中已获取的该分布式系统中的已注册的机器的数量和本次调度时用于处理待分配的任务项的线程组的数量,并将所述线程组的数量除以所述机器的数量,获得每个机器中应当平均承担的线程组的数量N,所述每个机器中应当平均承担的线程组的数量N就是在本次调度时,在每个机器中分配的用于处理待分配的任务项的线程组的数量N,N为取整后的数值。

例如:在分布式系统中运行的某一具体的机器在步骤S101中获取的该分布式系统中的已注册的机器的数量为10台,在步骤S103中获取到在本次调度时有30个用于处理待分配的任务项的线程组,则将所述线程组的数量30除以所述机器的数量10,获得每个机器中应当平均承担的线程组的数量3,即:在本次调度时在该机器中分配3个线程组用于处理待分配的任务项。

需要说明的是,在将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量时,由于所述资源消耗单位数量可能无法整除所述资源提供单位数量,所以每个资源提供单位应当承担的资源消耗单位平均承担数量N,N是取整后的数值。在步骤S105中对每个资源提供单位应当承担的资源消耗单位平均承担数量N的取整方式包括以下两种方式:

第一种方式是:去除所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值的小数位;

第二种方式是:所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值,若存在小数位,则取大于该获得值的最小整数。

当然,也不排除使用四舍五入或者其他方式进行取证,不论采取何种取整方式,最终的取整效果必然与上述两种方式中的一种相同。

例如:在第一种方式下,在分布式系统中运行的某一具体的机器在步骤S101中获取的该分布式系统中的已注册的机器的数量为10台,在步骤S103中获取到在本次调度时有33个用于处理待分配的任务项的线程组,则将所述线程组的数量33除以所述机器的数量10,获得每个机器中应当平均承担的线程组的数量3;在第二种方式下,在分布式系统中运行的某一具体的机器在步骤S101中获取的该分布式系统中的已注册的机器的数量为10台,在步骤S103中获取到在本次调度时有33个用于处理待分配的任务项的线程组,则将所述线程组的数量33除以所述机器的数量10,获得每个机器中应当平均承担的线程组的数量4。

步骤S107,所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

在本实施例中,根据已获取的该机器本身在所有机器中的顺序号M,从所述用于处理待分配的任务项的线程组中按照该线程组的编号的顺序,提取出数量为N或者(N-1)或者(N+1)的线程组分配给该机器。

例如:在分布式系统中运行的某一具体的机器在所有机器中的顺序号为3,根据平均分配原则,等待顺序号为1和2的机器从用于处理待分配的任务项的线程组中提取线程组完毕后,从所述用于处理待分配的任务项的线程组中提取3个线程组,且提取的线程组的编号为7-9。

在步骤S105将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量时,由于所述资源消耗单位数量可能无法整除所述资源提供单位数量,所以每个资源提供单位应当承担的资源消耗单位平均承担数量N,N是取整后的数值,所以本实施例的技术方案提供了一种优选实施方式,在优选方式下,若所述资源消耗单位平均承担数量N的取整方式为第一种取整方式,即去除所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值的小数位,则所述从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,是从资源消耗单位中提取数量为N或者(N+1)的资源消耗单位,具体包括步骤S107-1至S107-4,下面结合附图2作进一步说明。

请参考图2,其示出了根据本申请的实施例提供的从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位的流程图。

步骤S107-1,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量。

在本实施例中,所述将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量是,将在每个机器中分配的用于处理待分配的任务项的线程组的数量N乘以在分布式系统中已注册的机器的数量,获取取整后的在机器中分配的用于处理待分配的任务项的线程组的取整线程组数量。

例如:在每个机器中应当平均承担的线程组的数量为3,在该分布式系统中的已注册的机器的数量为10台,则将每个机器中应当平均承担的线程组的数量3乘以在该分布式系统中已注册的机器的数量10,获取取整后的在机器中分配 的用于处理待分配的任务项的线程组的取整线程组数量30。

步骤S107-2,将资源消耗单位数量减去取整资源消耗单位数量获取剩余资源消耗单位数量X。

在本实施例中,所述将资源消耗单位数量减去取整资源消耗单位数量获取剩余资源消耗单位数量X是,将从所述管理中心中获取在本次调度时用于处理待分配的任务项的线程组的数量减去所述取整线程组数量,获取剩余线程组数量X。

例如:从所述管理中心中获取到在本次调度时有33个用于处理待分配的任务项的线程组,将所述用于处理待分配的任务项的线程组的数量33减去取整线程组数量30,获取剩余线程组数量3。

步骤S107-3,对于资源提供单位顺序号M的数值小于等于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N+1的资源消耗单位。

在本实施例中,所述对于资源提供单位顺序号M的数值小于等于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N+1的资源消耗单位是,对顺序号的数值小于等于剩余线程组数量X的数值的在该分布式系统中已注册的机器,按照该机器本身在所有机器中的顺序号M的顺序,从所述用于处理待分配的任务项的线程组中按照该线程组的编号的顺序,提取出数量为(N+1)的线程组分配给该机器。

例如:已获取剩余线程组数量为3,每个机器中应当平均承担的线程组的数量为3,则顺序号小于等于剩余线程组数量的在该分布式系统中已注册的机器包括:顺序号为1的机器、顺序号为2的机器和顺序号为3的机器,则从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为1的机器且提取的线程组的编号为1-4;从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为2的机器且提取的线程组的编号为5-8;从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为3的机器且提取的线程组的编号为9-12。

步骤S107-4,为资源提供单位顺序号M的数值大于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位 中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

在本实施例中,所述为资源提供单位顺序号M的数值大于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位是,对顺序号的数值大于剩余线程组数量X的数值的在该分布式系统中已注册的机器,按照该机器本身在所有机器中的顺序号M的顺序,从所述用于处理待分配的任务项的线程组中按照该线程组的编号的顺序,提取出数量为N的线程组分配给该机器。

例如:已获取剩余线程组数量为3,每个机器中应当平均承担的线程组的数量为3,则顺序号大于剩余线程组数量的在该分布式系统中已注册的机器包括:顺序号为4-10的机器,若在分布式系统中运行的某一具体的机器的顺序号为4,则从所述用于处理待分配的任务项的线程组中提取3个线程组且提取的线程组的编号为13-15,顺序号为5-10的机器则按照顺序号从线程组的编号为16的线程组开始按照线程组的编号的顺序依次提取出3个线程组分配给机器,直至将线程组分配完毕。

以上对本实施例中提供的一种取整方式进行了说明,在本技术方案中还提供了另一种取整方式的优选实施方式,在优选方式下,若所述资源消耗单位承担数量N的取整方式为第二种方式,即所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值,若存在小数位,则取大于该获得值的最小整数,则所述从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,是从资源消耗单位中提取数量为N或者(N-1)的资源消耗单位,具体包括步骤S107-5至S107-8,下面结合附图3作进一步说明。

请参考图3,其示出了根据本申请的实施例提供的另一种从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位的流程图。

步骤S107-5,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量。

在本实施例中,所述将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量是,将在每个机器中分配的用于处理待分配的任务项的线程组的数量N乘以在分布式系统中已注册的机器的数量,获取取整后的在机器中分配的用于处理待分配的任务项的线程组的取整线程组数量。

例如:在每个机器中应当平均承担的线程组的数量为4,在该分布式系统中的已注册的机器的数量为10台,则将每个机器中应当平均承担的线程组的数量4乘以在该分布式系统中已注册的机器的数量10,获取取整后的在机器中分配的用于处理待分配的任务项的线程组的取整线程组数量40。

步骤S107-6,将取整资源消耗单位数量减去资源消耗单位数量获取多余资源消耗单位数量Y。

在本实施例中,所述将取整资源消耗单位数量减去资源消耗单位数量获取多余资源消耗单位数量Y是,将所述取整线程组数量减去从所述管理中心中获取在本次调度时用于处理待分配的任务项的线程组的数量,获取多余线程组数量Y。

例如:从所述管理中心中获取到在本次调度时有33个用于处理待分配的任务项的线程组,将所述取整线程组数量40减去所述用于处理待分配的任务项的线程组的数量33,获取多余线程组数量7。

步骤S107-7,对于资源提供单位顺序号M的数值小于等于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为(N-1)的资源消耗单位。

在本实施例中,所述对于资源提供单位顺序号M的数值小于等于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为(N-1)的资源消耗单位是,对顺序号的数值小于多余线程组数量Y的数值的在该分布式系统中已注册的机器,按照该机器本身在所有机器中的顺序号M的顺序,从所述用于处理待分配的任务项的线程组中按照该线程组的编号的顺序,提取出数量为(N-1)的线程组分配给该机器。

例如:已获取多余线程组数量为7,每个机器中应当平均承担的线程组的数量为4,则顺序号小于等于多余线程组数量的在该分布式系统中已注册的机器包括:顺序号为1-7的机器,则从线程组的编号为1的线程组开始按照线程组的编号的顺序依次提取出3个线程组分配给机器,直至在顺序号为7的机器中按照线程组的编号的顺序分配完3个线程组。

步骤S107-8,为资源提供单位顺序号M的数值大于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位 中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

在本实施例中,所述为资源提供单位顺序号M的数值大于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位是,对顺序号的数值大于多余线程组数量Y的数值的在该分布式系统中已注册的机器,按照该机器本身在所有机器中的顺序号M的顺序,从所述用于处理待分配的任务项的线程组中按照该线程组的编号的顺序,提取出数量为N的线程组分配给该机器。

例如:已获取多余线程组数量为7,每个机器中应当平均承担的线程组的数量为4,则顺序号大于多余线程组数量的在该分布式系统中已注册的机器包括:顺序号为8的机器、顺序号为9的机器和顺序号为10的机器,则从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为8的机器且提取的线程组的编号为22-25;从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为9的机器且提取的线程组的编号为26-29;从所述用于处理待分配的任务项的线程组中提取4个线程组分配给顺序号为10的机器且提取的线程组的编号为30-33。

以上对所述资源提供单位为在分布式系统中的机器,所述资源消耗单位为处理待分配的任务项的线程组时,所述用于分布式系统的调度方法进行了详细说明,需要说明的是,本技术方案中所述资源提供单位还可以为处理待分配的任务项的线程组,所述资源消耗单位还可以为待分配的任务项。

具体说,在所述资源提供单位为处理待分配的任务项的线程组,所述资源消耗单位为待分配的任务项时,所述用于分布式系统的调度方法,包括:

通过分布式系统的管理中心获取该分布式系统中的用于处理待分配的任务项的线程组的数量,以及该线程组本身在所有线程组中的顺序号M;

通过分布式系统的管理中心获取待分配的任务项的数量,所述待分配的任务项被顺序编号;

将所述待分配的任务项的数量除以所述分布式系统中的用于处理待分配的任务项的线程组的数量,获得每个线程组应当承担的待分配的任务项平均承担数量N,N为取整后的数值;

所述用于处理待分配的任务项的线程组根据自己在所有线程组中的顺序号 M以及平均分配的原则,按照待分配的任务项编号的顺序,从待分配的任务项中提取数量为N或者(N-1)或者(N+1)的待分配的任务项,作为分配给自己的任务项。

由于主要区别只是在于所述资源提供单位和所述资源消耗单位的具体内容不同,而后续的计算和分配等处理过程是基本相同的,由于在前面实施例中已经对此进行了比较详细的描述,此处不再赘述。

在上述的实施例中,提供了一种用于分布式系统的调度方法,与上述用于分布式系统的调度方法相对应的,本申请第二实施例提供了一种用于分布式系统的调度装置。由于装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述用于分布式系统的调度装置实施例如下:

请参考图4,其示出了本申请第二实施例提供的用于分布式系统的调度装置的示意图。

所述用于分布式系统的调度装置,包括:资源提供单位获取单元401、编号单元403、承担数量计算单元405以及资源消耗单位分配单元407;

所述资源提供单位获取单元401,用于分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;

所述编号单元403,用于通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;

所述承担数量计算单元405,用于将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;

所述资源消耗单位分配单元407,用于所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

可选的,若所述承担数量计算单元405,具体用于去除所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量所获得值的小数位,则所述资源消耗单位分配单元407,包括:取整计算子单元、剩余数计算子单元、第一资源 消耗单位分配子单元以及第二资源消耗单位分配子单元;

所述取整计算子单元,用于从资源消耗单位中提取数量为N或者(N+1)的资源消耗单位,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

所述剩余数计算子单元,用于将资源消耗单位数量减去取整资源消耗单位数量获取剩余资源消耗单位数量X;

所述第一资源消耗单位分配子单元,用于对于资源提供单位顺序号M的数值小于等于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N+1的资源消耗单位;

所述第二资源消耗单位分配子单元,用于为资源提供单位顺序号M的数值大于剩余资源消耗单位数量X的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源消耗单位。

可选的,若所述承担数量计算单元405,具体用于若存在小数位,则取大于该获得值的最小整数,则所述资源消耗单位分配单元407,包括:取整计算子单元、多余数计算子单元、第一资源消耗单位分配子单元以及第二资源消耗单位分配子单元;

所述取整计算子单元,用于从资源消耗单位中提取数量为N或者(N-1)的资源消耗单位,将资源消耗单位承担数量N乘以资源提供单位数量获取取整资源消耗单位数量;

所述多余数计算子单元,用于将取整资源消耗单位数量减去资源消耗单位数量获取多余资源消耗单位数量Y;

所述第一资源消耗单位分配子单元,用于对于资源提供单位顺序号M的数值小于等于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为(N-1)的资源消耗单位;

所述第二资源消耗单位分配子单元,用于为资源提供单位顺序号M的数值大于多余资源消耗单位数量Y的数值的资源提供单位,按照资源提供单位顺序号M的顺序,从资源消耗单位中按照资源消耗单位编号的顺序提取数量为N的资源 消耗单位。

在上述的实施例中,提供了一种用于分布式系统的调度方法以及一种用于分布式系统的调度装置,以下本申请第三实施例提供了一种电子设备;所述电子设备实施例如下:

请参考图5,其示出了根据本申请的实施例提供的电子设备的示意图。

所述电子设备,包括:显示器501;处理器503;存储器505;

所述存储器505,用于存储分布式系统的调度程序,所述程序在被所述处理器读取执行时,执行如下操作:分布式系统的资源提供单位通过分布式系统的管理中心获取该分布式系统中的资源提供单位数量,以及该资源提供单位本身在所有资源提供单位中的资源提供单位顺序号M;通过分布式系统的管理中心获取资源消耗单位数量,所述资源消耗单位被顺序编号;将所述资源消耗单位数量除以所述分布式系统中的资源提供单位数量,获得每个资源提供单位应当承担的资源消耗单位平均承担数量N,N为取整后的数值;所述资源提供单位根据自己在所有资源提供单位中的顺序号M以及平均分配的原则,按照资源消耗单位编号的顺序,从资源消耗单位中提取数量为N或者(N-1)或者(N+1)的资源消耗单位,作为分配给自己的资源消耗单位。

在上述的第一到第三实施例中,提供了一种用于分布式系统的调度方法、一种用于分布式系统的调度装置以及一种电子设备,此外,本申请还提供了另一种具体用于采用zookeeper的分布式系统的调度方法。该用于分布式系统的调度方法由调度组件完成,调度组件根据在zookeeper系统中存储的控制信息计算各个服务器需要分配的线程组数量和计算各个线程组需要分配的任务项数量,并为各个服务器分配线程组,为各个线程组分配任务项。

需要说明的是,在本实施例中,调度组件采用开源的分布式并发异步调度组件TBSchedule 4,TBSchedule 4能够使批量任务或者不断产生和变化的任务,被动态的分配到多个机器的不同的线程组中并行执行,所有的任务能够被不重复,不遗漏的快速处理。所述调度组件的运行层次,分为如下的3层:由多个物理服务器(JVM)组成的factory层,在该层中每个运行的服务器被称为factory;在每个服务器中运行的线程组组成的server层,在该层中每个运行的线程组被称为server,线程组在factory上的分配策略,被称为strategy,strategy可以被动态的增加或停止,在本实施例中称所述strategy为具体策略; 以及在每个线程组中处理的任务项组成的taskI tem层,在该层中每个任务项被称为taskItem。上述用于采用zookeeper的分布式系统的调度方法在以下第四实施例中予以说明。

请参考图6,其示出了根据本申请的第四实施例提供的用于分布式系统的调度方法的流程图。

所述用于分布式系统的调度方法,包括:

步骤S601,读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求。

在本实施例中,所述读取zookeeper系统中存储的控制信息,可以采用如下方式实现:调度组件与zookeeper建立连接后,调度组件读取zookeeper系统中存储在目录节点下的控制信息。所述控制信息包括:在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略包含的内容包括该具体策略所表达的具体执行方式,例如重复执行、间隔一段时间执行、按照优先级执行等不同的具体执行方式,以及各个具体执行方式对线程组数量的要求。

需要说明的是,在zookeeper系统中是以目录节点的形式存储信息,相同类型的信息存储在同一目录节点下。可以理解的,所述在zookeeper系统中注册的服务器的信息,是存储在zookeeper中的/factory目录节点下的机器列表factorylist中,在读取zookeeper系统中注册的服务器的信息时,调度组件访问存储在zookeeper中的/factory目录节点下的机器列表factorylist获取已注册的服务器;所述分布式系统中需要执行的具体策略,存储在zookeeper中的/strategy目录节点中,在读取分布式系统中需要执行的具体策略时,调度组件访问存储在zookeeper中的/strategy目录节点获取分布式系统中需要执行的具体策略。

例如:在zookeeper中的/factory目录节点下的机器列表factorylist中有服务器A、服务器B和服务器C,在factorylist中服务器按照各个服务器在该分布式系统中注册时的顺序为各个服务器生成表征注册顺序的顺序号;在zookeeper中的/strategy目录节点中的分布式系统中需要执行的具体策略有4 条,每条具体策略对线程组数量各有要求。

在本实施例中,在步骤S601读取zookeeper系统中存储的控制信息中,所述调度组件读取到的控制信息还包括:在zookeeper系统中注册的线程组,以及待处理的任务项。可以理解的,所述在zookeeper系统中注册的线程组,是存储在zookeeper中的/server目录节点中,在读取zookeeper系统中注册的线程组时,调度组件访问存储在zookeeper中的/server目录节点下的线程组列表获取在zookeeper系统中注册的线程组;所述待处理的任务项,是存储在zookeeper中的/taskItem目录节点中,在读取所述待处理的任务项时,调度组件访问存储在zookeeper中的/taskItem目录节点下的待处理的任务项,获取所述待处理的任务项的数量和编号。

由于在每次执行分布式调度时,在分布式系统中执行处理任务的服务器的数量不固定或者每次调度时任务项的数量不固定,在每次执行分布式调度时,需要执行的具体策略的数量会发生变化,所以本实施例的技术方案提供了一种优选实施方式,在优选方式下,在zookeeper中的/strategy目录节点中存储的各个具体策略包括:策略状态。所述策略状态包括开启状态以及关闭状态。所述开启状态是指:在本次调度中会执行该策略;与之相对的,所述关闭状态是指:剔除该策略,在本次调度中不执行该策略。

需要说明的是,策略的状态可以通过外部控制台进行修改或者在重新计算服务器需要分配的线程组为服务器配置相应的线程组时,修改对应该服务器的具体策略的状态。若策略的状态为关闭状态时,剔除该策略是指:在本次调度时不执行该策略,不基于该策略为服务器分配线程组,而不是从zookeeper上删除该策略,也就是说状态为关闭状态的策略,可以通过重新计算服务器需要分配的线程组为服务器配置相应的线程组或者外部控制台修改策略的状态。

为了使新的服务器在该分布式系统中注册后,能在该分布式系统中处理任务或者调度组件与zookeeper的连接关系发生变化时,调度组件能够根据变化对各个服务器中的线程组进行重新分配并加载线程组,本实施例的技术方案提供了一种优选实施方式,在优选方式下,在zookeeper系统中注册的各个服务器具有重新加载字段Reload,且各个服务器具有间隔固定时间就读取所述重新加载字段Reload的值的守护线程。

在本实施例中,所述守护线程每5秒进行一次扫描,读取该服务器中布尔类 型的Reload字段的取值,若扫描到的Reload字段的取值为true,就触发重新加载线程组,进入所述读取zookeeper系统中存储的控制信息的步骤,并将所述重新加载字段Reload的值设置为false;若扫描到的Reload字段的取值为false,则不进行任何操作,待5秒之后进行下一次扫描。

在本实施例中,在执行步骤S601读取zookeeper系统中存储的控制信息的步骤之前,调度组件还需与zookeeper之间建立连接,所述调度组件与zookeeper之间建立连接,可以采用如下方式实现:启动初始化线程组,与zookeeper之间建立连接,当zookeeper连接上时,进入所述读取zookeeper系统中存储的控制信息的步骤并触发调度组件的初始化。

在本实施例中,在所述启动初始化线程组,与zookeeper之间建立连接的步骤之后,在所述调度组件中启动对zookeeper系统的持续监听;实现持续监听的方式,例如可以是根据需要监听的事项建立相应的监听器,例如:连接状态监听器、子节点变化监听器以及配置变化监听器。以下说明采用这种方式如何实现持续监听。

所述连接状态监听器用于监听调度组件与zookeeper之间的连接状态,当调度组件与zookeeper之间的连接状态发生变化时,例如:断开或者重新连接时,将在各个服务器中的所述重新加载字段Reload的值设置为true;所述子节点变化监听器用于监听zookeeper中的/factory目录节点下的机器列表factorylist,服务器在分布式系统中注册时会在/factory目录节点下的机器列表factorylist中创建该服务器的目录节点,同样的道理,服务器与zookeeper之间断开连接时会删除在/factory目录节点下的机器列表factorylist中创建的该服务器的目录节点,所述子节点变化监听器在监听到目录节点发生变化时,将在各个服务器中的所述重新加载字段Reload的值设置为true;所述配置变化监听器用于监听zookeeper中的/strategy目录节点中分布式系统中需要执行的具体策略,所述配置变化监听器在监听到具体策略或者具体策略所需要的线程发生变化时,将在各个服务器中的所述重新加载字段Reload的值设置为true。

所述监听器是指一种事件监视程序,当一个事件产生的时候,事件源将发出通知消息并提供一个事件对象作为参数,该消息被事件监视程序接收,并进行相关处理,事件源是基于curator和zookeeper的watcher机制实现的。

在具体实施时,当监听到zookeeper系统(事件源)上发生变化时,会发出 一个事件(event),这个事件会被上述连接状态监听器、子节点变化监听器或配置变化监听器中的一种监听器程序收到,并且进行相应处理。这个监听器程序时刻不停的运行,一旦zookeeper系统发出事件,就会及时接收到,以保证服务器逻辑与zookeeper系统一致。

步骤S603,按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量。

在本实施例中,所述按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量,可以采用如下方式实现:根据所述具体策略所表达的具体执行方式,以及各个具体执行方式对线程组数量的要求,计算在各个服务器中需要分配的线程组数量。

例如:一条描述服务器A的具体策略中对该服务器A中要求的线程组数量为3。

需要说明的是,按照第一实施例提供的方法进行配置也可以视为一种策略,称为基础策略。

步骤S605,将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

具体的,在使用第一实施例所述的用于分布式系统的调度方法时,所述按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量,包括:

调度组件获取在zookeeper系统中注册的服务器数量以及在zookeeper系统中注册的服务器的顺序号;

通过所述需要执行的具体策略获取在本次调度时需要分配的线程组数目;所述线程组被顺序编号;

将所述需要分配的线程组数目除以所述在zookeeper系统中注册的服务器数量,获得各个服务器应当被分配的线程组数目N,N为取整后的数值;

所述在zookeeper系统中注册的服务器根据在zookeeper系统中注册的服务器的顺序号M以及平均分配的原则,按照所述线程组被编号的顺序,从所述线程组中提取数量为N或者(N-1)或者(N+1)的所述线程组,作为分配给在zookeeper 系统中注册的各个服务器的线程组。

为了使在该分布式系统中任务项或线程组发生变化时,调度组件能够根据变化对各个任务项进行重新分配并重新加载任务项,本实施例的技术方案提供了一种优选实施方式,在优选方式下,所述分布式系统的各个线程组分别设置有对应该线程组的加载判断字段Needload,且所述各个线程组分别具有间隔固定时间就读取所述加载判断字段Needload的值的线程组守护进程。

在本实施例中,所述守护进程每5秒进行一次扫描,读取该服务器中布尔类型的Needload字段的取值,若扫描到的Needload字段的取值为true,则进入所述按照所述在zookeeper系统中注册的线程组数量,以及所述需要处理的任务项,计算各个线程组需要分配的任务项数量的步骤;并将所述加载判断字段Needload的值设置为false;若扫描到的Needload字段的取值为false,则不进行任何操作,待5秒之后进行下一次扫描。

需要说明的是,在线程组之间分配任务项时,与线程组在服务器上进行分配的策略类似,区别在于,这里的守护进程是针对每个线程组中的Needload进行扫描的,在此不作赘述。

在本实施例中,在所述为服务器配置相应的线程组的步骤之后,具体包括步骤S606至S607,下面结合附图7作进一步说明。

请参考图7,其示出了根据本申请的实施例提供的为各个线程组配置相应的任务项的流程图。

步骤S606,按照所述在zookeeper系统中注册的线程组数量,以及所述待处理的任务项,计算各个线程组需要分配的任务项数量;

步骤S607,将所述在zookeeper系统中注册的线程组数量作为资源提供单位,将所述需要处理的任务项作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为各个线程组配置相应的任务项,包括对已经分配的任务项重新分配、为进程组分配新的任务项以及消除需要停止的任务项。

具体的,在使用第一实施例所述的用于分布式系统的调度方法时,所述按照所述在zookeeper系统中注册的线程组数量,以及所述待处理的任务项,计算各个线程组需要分配的任务项数量,包括:

调度组件获取在zookeeper系统中注册的线程组数量以及在zookeeper系统 中注册的线程组的顺序号;

所述待处理的任务项的数目;所述待处理的任务项被顺序编号;

将所述待处理的任务项的数目除以所述在zookeeper系统中注册的线程组数量,获得各个线程组应当被分配的任务项数目N,N为取整后的数值;

所述在zookeeper系统中注册的线程组根据在zookeeper系统中注册的线程组的顺序号M以及平均分配的原则,按照所述待处理的任务项被编号的顺序,从所述待处理的任务项中提取数量为N或者(N-1)或者(N+1)的所述任务项,作为分配给在zookeeper系统中注册的各个线程组的任务项。

为了保证在zookeeper系统中注册的各个服务器与zookeeper之间断开连接后能够正常的继续执行调度任务,在本技术方案中提供了一种优选实施方式,在优选方式下,所述zookeeper系统中存储的控制信息被存储在服务器本地,并以服务器本地存储的控制信息作为该服务器执行分布式任务调度的依据;若zookeeper系统出现异常,则直接以服务器本地存储的控制信息执行分布式任务调度。

可以理解的,如果遇到与zookeeper断连,或者zookeeper宕机等异常情况,通过缓存在服务器本地的控制信息继续执行当前的调度任务,可以不停止调度组件从而继续执行,直到与zookeeper进行连接之后,再重新执行步骤S601读取zookeeper系统中存储的控制信息的步骤。

在本实施例中,由于在分布式系统中某一已注册的服务器与zookeeper断开连接时,有可能有新的服务器注册到该分布式系统中,所以在本技术方案中提供了一种优选实施方式,在优选方式下,在所述为各个线程组配置相应的任务项的步骤之后,具体包括:

读取zookeeper的控制信息版本号;

获取服务器的控制信息版本号;

判断服务器的版本号是否与zookeeper的版本号相同;

若否,则读取存储在服务器本地的重新加载字段Reload,并将所述重新加载字段的取值修改为true。

在本实施例中,当服务器向分布式系统中进行注册时会在zookeeper的/factory目录节点下的机器列表factorylist中创建该服务器的目录节点,同样的道理,服务器与zookeeper之间断开连接时会删除在/factory目录节点下 的机器列表factorylist中创建的该服务器的目录节点,在每次/factory目录节点发生变化时会更新zookeeper的控制信息的版本号,zookeeper更新控制信息版本号的版本号之后会向与zookeeper保持连接的服务器发送更新后的控制信息版本号,使与zookeeper保持连接的各个服务器同步该控制信息的版本号,使zookeeper与各个服务器的版本保持一致。例如:使zookeeper的控制信息的版本号的数值+1。

为了使各个服务器能够在调度完成之后退出该分布式系统,在本技术方案中提供了一种优选实施方式,在优选方式下,各个服务器设置有服务器运行标志字段isRunning;该服务器运行标志字段在服务器正常运行的情况下为true;当所述服务器需要退出系统时,则设置服务器运行标志字段isRunning设置为false,并停止服务器初始化线程、停止系统守护线程、停止服务器的所有线程组、注销服务器与zookeeper的连接。

在上述的实施例中,提供了另一种用于分布式系统的调度方法,与上述用于分布式系统的调度方法相对应的,本申请第五实施提供了一种用于分布式系统的调度装置。由于装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述用于分布式系统的调度装置实施例如下:

请参考图8,其示出了根据本申请第五实施例提供的用于分布式系统的调度装置的示意图。

所述用于分布式系统的调度装置,包括:控制信息读取单元801、重新计算单元803以及线程组分配单元805;

所述控制信息读取单元801,用于读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求;

所述重新计算单元803,用于按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量;

所述线程组分配单元805,用于将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要 求1-5任意一项所述的用于分布式系统的调度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

可选的,所述控制信息读取单元801,读取的所述控制信息还包括:在zookeeper系统中注册的线程组,以及待处理的任务项;

所述用于分布式系统的调度装置,还包括:

任务项计算单元,用于在所述为服务器配置相应的线程组之后,按照所述在zookeeper系统中注册的线程组数量,以及所述待处理的任务项,计算各个线程组需要分配的任务项数量;

任务项分配单元,用于将所述在zookeeper系统中注册的线程组数量作为资源提供单位,将所述需要处理的任务项作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调度方法,为各个线程组配置相应的任务项,包括对已经分配的任务项重新分配、为进程组分配新的任务项以及消除需要停止的任务项。

可选的,所述用于分布式系统的调度装置,包括:控制信息存储单元;

所述控制信息存储单元,用于将所述zookeeper系统中存储的控制信息存储在服务器本地,并以服务器本地存储的控制信息作为该服务器执行分布式任务调度的依据;若zookeeper系统出现异常,则直接以服务器本地存储的控制信息执行分布式任务调度。

可选的,所述用于分布式系统的调度装置,包括:控制信息读取触发单元;

所述控制信息读取触发单元,用于在所述读取zookeeper系统中存储的控制信息之前,若具有间隔固定时间就读取所述重新加载字段Reload的值的守护线程读取到的所述重新加载字段Reload的值为true,则触发所述控制信息读取单元;并将所述重新加载字段Reload的值设置为false。

可选的,所述用于分布式系统的调度装置,包括:监听单元;

所述监听单元,用于对所述zookeeper系统持续监听;若出现以下任意事项则设置所述重新加载字段Reload为true:zookeeper系统重启、zookeeper系统配置变化、zookeeper系统存储的控制信息变化、服务器初始化。

可选的,所述用于分布式系统的调度装置,包括:任务项计算触发单元;

所述任务项计算触发单元,用于若所述线程组守护进程读取到的所述重新加载字段Needload的值为true,则进入触发所述任务项计算单元;并将所述加载 判断字段Needload的值设置为false。

可选的,所述用于分布式系统的调度装置,包括:版本号读取单元、版本号获取单元、版本号判断单元以及重新加载字段修改单元;

所述版本号读取单元,用于在所述为各个线程组配置相应的任务项之后,读取zookeeper的控制信息版本号;

所述版本号获取单元,用于获取服务器的控制信息版本号;

所述版本号判断单元,用于判断服务器的版本号是否与zookeeper的版本号相同;

所述重新加载字段修改单元,用于接收所述版本号判断单元的判断结果,若否,则读取存储在服务器本地的重新加载字段Reload,并将所述重新加载字段的取值修改为true。

可选的,所述用于分布式系统的调度装置,包括:服务器停止单元;

所述服务器停止单元,用于当服务器需要退出系统时,则设置服务器运行标志字段isRunning设置为false,并停止服务器初始化线程、停止系统守护线程、停止服务器的所有线程组、注销服务器与zookeeper的连接。

在上述的实施例中,提供了一种用于分布式系统的调度方法、一种用于分布式系统的调度装置、一种电子设备、另一种用于分布式系统的调度方法以及另一种用于分布式系统的调度装置,此外,本申请还提供了另一种电子设备;所述电子设备实施例如下:

请参考图9,其示出了根据本申请第六实施例提供的另一种电子设备的流程图。

所述电子设备,包括:显示器901;处理器903;存储器905;

所述存储器905,用于存储分布式系统的调度程序,所述程序在被所述处理器读取执行时,执行如下操作:读取zookeeper系统中存储的控制信息;所述控制信息包括在zookeeper系统中注册的服务器,以及分布式系统中需要执行的具体策略,所述具体策略描述不同的具体执行方式以及各个具体执行方式对线程组数量的要求;按照所述在zookeeper系统中注册的服务器数量,以及所述需要执行的具体策略,重新计算各个服务器需要分配的线程组数量;将所述在zookeeper系统中注册的服务器作为资源提供单位,将所述需要分配的线程组作为资源消耗单位,并使用权利要求1-5任意一项所述的用于分布式系统的调 度方法,为服务器配置相应的线程组,包括分配新的线程组,以及停止已经启动的线程组。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

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