分布式任务调度方法和系统
技术领域
本发明涉及计算机处理领域,特别是涉及一种分布式任务调度方法和系统。
背景技术
分布式任务调度,是指将一个应用或者业务划分出的多个任务交由多个服务器进行处理。分布式任务调度可解决单个服务器资源不足等问题,达到大规模数据计算的目的。传统的分布式框架有很多,例如,Quartz、Zookeeper等技术都可以实现分布式任务调度。其中,Quartz的集群方式是利用数据库的锁,同一时间只允许有一台服务器能拿到锁执行任务,没有利用集群的优势并行执行,处理的速度比较慢。Zookeeper是分布式应用程序协调服务,其对数据进行分片,分配给多个应用服务器去执行处理,实现了并行执行,从而提升了处理速度。但是由于Zookeeper往往需要管理很多应用服务器,每个任务开始及结束的记录也都需要写入Zookeeper,造成Zookeeper的负担比较重,而且如果要加入新的应用服务器,也需要在Zookeeper上进行操作,进一步加大了其负担,且不能实现应用服务器的动态扩充。
发明内容
基于此,有必要针对上述问题,提出一种能够减少Zookeeper的负担且可以动态进行应用服务器扩充的分布式任务调度的方法和系统。
一种分布式任务调度系统,所述系统包括:应用服务器,所述应用服务器有多个,用于与中间服务器建立TCP连接,将IP地址和Job信息注册到所述中间服务器;中间服务器,所述中间服务器有多个,用于管理应用服务器,获取所述应用服务器注册的IP地址和Job信息,将具有相同Job信息的应用服务器划分为一个Job群组,在该Job群组中的多个应用服务器中选举出一个leader应用服务器,并将对应的任务配置信息和Job群组内的各个应用服务器的IP地址下发到该leader应用服务器;所述leader应用服务器用于根据所述任务配置信息中的分片数将任务进行拆分,并根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配;所述应用服务器还用于执行被分配的子任务;分布式协调服务器,用于部署Zookeeper,与所述中间服务器建立连接,由所述Zookeeper统一对所述中间服务器进行协调。
在其中一个实施例中,所述中间服务器还用于根据所述Job信息查找实际管理该Job的目标中间服务器,将所述目标中间服务器的地址返回给所述应用服务器;所述应用服务器还用于根据所述目标中间服务器的地址与所述目标中间服务器建立TCP连接。
在其中一个实施例中,所述中间服务器还用于监控Job群组中的应用服务器的上线或下线,当Job群组中有应用服务器上线或下线时,指示Job群组中的leader应用服务器将对应的任务进行重新分配,并接收所述leader应用服务器返回的新的分配结果。
在其中一个实施例中,所述分布式协调服务器还用于通过Zookeeper在多个中间服务器中选举出一个leader中间服务器;所述leader中间服务器还用于实时监控集群中其他中间服务器节点,若发现有中间服务器掉线,则为所述掉线的中间服务器管理的Job群组分配给一个在线的中间服务器来接管,并在所述Job群组中设置migrate节点,所述migrate节点用于标注Job群组的迁移状态,当迁移完成后,删除该migrate节点;所述中间服务器还用于实时监控Job群组下的migrate节点,若发现所述migrate节点的IP地址和自身的相同,则接管所述migrate节点所在的Job群组。
在其中一个实施例中,所述leader中间服务器还用于若监控到有中间服务器掉线,则判断所述掉线的中间服务器是否正在接管Job群组,若是,则为该Job群组重新分配接管的中间服务器。
在其中一个实施例中,所述应用服务器还用于根据所述Job信息判断是否到达任务的执行时间,若是,则从管理该应用服务器的中间服务器中获取对应的分片信息,根据所述分片信息开始执行对应的子任务,并将任务开始执行的信息记录到中间服务器。
在其中一个实施例中,所述系统还包括:数据库,用于存储Job信息,接收中间服务器发送的任务开始及结束的记录并进行存储。
一种分布式任务调度方法,所述方法包括:应用服务器向中间服务器发起TCP连接请求,所述中间服务器根据所述TCP连接请求与所述应用服务器建立TCP连接;所述应用服务器向所述中间服务器注册该应用服务器的IP地址和Job信息;所述中间服务器获取所述应用服务器注册的IP地址和Job信息,将具有相同Job信息的应用服务器划分为同一个Job群组,在该Job群组中的多个应用服务器中选举出一个leader应用服务器,将所述Job信息对应的任务配置信息和Job群组内的各个应用服务器的IP地址下发到所述leader应用服务器;所述leader应用服务器根据所述任务配置信息中的分片数将任务进行拆分,并根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配。
在其中一个实施例中,在所述中间服务器获取所述应用服务器注册的IP地址和Job信息的步骤之后还包括:所述中间服务器根据所述Job信息查找实际管理该Job的目标中间服务器,将所述目标中间服务器的地址返回给应用服务器;所述应用服务器根据所述目标中间服务器的地址和所述目标中间服务器建立TCP连接。
在其中一个实施例中,所述方法还包括:所述中间服务器监控Job群组中的应用服务器的上线或下线,当Job群组中有应用服务器上线或下线时,指示Job群组中的leader应用服务器将对应的任务进行重新分配;所述leader应用服务器按照所述指示根据Job群组中当前在线的应用服务器数量将所述任务进行重新分配,并将分配结果返回给所述中间服务器。
上述分布式任务调度方法和系统,通过引入多个中间服务器来管理应用服务器,分布式协调服务器中部署的Zookeeper只需要对中间服务器进行协调,由于应用服务器由中间服务器来管理,任务的开始以及结束的记录都只需要写入中间服务器,而不需要写入Zookeeper,减少了Zookeeper的负担,且一个中间服务器可以管理多个应用服务器,Zookeeper只需要对少量的中间服务器进行协调管理即可,大大减少了Zookeeper的负担,进一度的,由于由中间服务器来管理应用服务器,如果需要扩充应用服务器,只需要在中间服务器中进行注册即可,不需要在Zookeeper进行操作,从而实现了能够动态扩充应用服务器的目的。
附图说明
图1为一个实施例中分布式任务调度系统的架构图;
图2为一个实施例中Zookeeper的目录结构图;
图3为另一个实施例中分布式任务调度系统的架构图;
图4为一个实施例中分布式任务调度方法流程图;
图5为另一个实施例中分布式任务调度方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,在一个实施例中,提出了一种分布式任务调度系统,该系统包括:应用服务器102,中间服务器104和分布式协调服务器106;其中,
应用服务器102,应用服务器有多个,用于与中间服务器建立TCP连接,将IP地址和Job信息注册到中间服务器。
在本实施例中,应用服务器102有多个,应用服务器是具体执行任务的服务器,由于是和客户端直接交互的,也称为“客户端应用服务器”。应用服务器102与中间服务器104建立TCP连接后,将该应用服务器102的IP地址和Job信息注册到中间服务器106。其中,Job信息包括任务配置信息、任务标识、任务执行时间等,任务标识用来唯一标识一个任务,可以是任务的编号,如图1中所示,其中一个应用服务器102中包括Job1,Job2,Job3。其中,Job1,Job2,Job3分别代表不同的任务。在本实施例中,为了能够快速执行任务,一般是将一个任务拆分为多个子任务,然后分配给多个应用服务器106来并行执行的,每个应用服务器106只需要执行被分配的子任务即可。
中间服务器104,中间服务器有多个,用于管理应用服务器,获取应用服务器注册的IP地址和Job信息,将具有相同Job信息的应用服务器划分为一个Job群组,在该Job群组中的多个应用服务器中选举出一个leader应用服务器,并将对应的任务配置信息和Job群组内的各个应用服务器的IP地址下发到该leader应用服务器;该leader应用服务器根据任务配置信息中的分片数将任务进行拆分,并根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配。
在本实施例中,中间服务器104也有多个,但是比应用服务器102的数量少很多,中间服务器用于管理应用服务器,首先,中间服务器104获取应用服务器102注册的IP地址和Job信息,然后将具有相同Job信息的应用服务器划分为一个Job群组,比如,如果应用服务器1和应用服务器2以及应用服务器3都具有相同的Job1,那么该Job1群组中就包括应用服务器1、2和3。然后,在Job群组中的多个应用服务器中选举出一个leader应用服务器,一般是将最早接入该中间服务器的应用服务器作为leader应用服务器,将该Job信息对应的任务配置信息和群组内的多个应用服务器的IP地址都下发到该leader应用服务器,由该leader应用服务器进行任务的拆分及分配,其中,任务配置信息包括任务的分片数以及对应的分片算法。需要说明的是,虽然leader应用服务器中的Job信息中本身包括任务配置信息,但是Job的任务配置信息是可以通过后台来动态进行修改的,而中间服务器能够从后台获取到最新的Job任务配置信息,所以在选举出leader应用服务器后,中间服务器会将最新的Job任务配置信息下发到leader应用服务器,以便leader应用服务器可以根据该最新的任务配置信息进行分片。
具体的,leader应用服务器根据任务配置信息中的分片数将任务进行拆分,然后根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配。比如,任务配置信息中任务的分片数为6个,那么leader应用服务器就按照对应的分片算法将任务拆分为6个子任务,然后分配给Job群组内的应用服务器,包括leader应用服务器本身。其中,应用服务器IP地址用来唯一标识一个应用服务器。具体的,比如,6个子任务分别为0,1,2,3,4,5;当前Job群组中包括leader应用服务器在内有3个应用服务器,分别为Server1,Server2,Server3,其中,假设Server1为leader应用服务器。子任务的分配可以采用轮循的方法、也可以采用顺序的分配方法,还可以是其他分配方法,这里并不对分配的方法作限定。不管是哪种分配方法,leader应用服务器一般是尽量做到平均分配,将6个子任务分配给3台应用服务器,即每个应用服务器分配2个子任务,比如,以顺序的分配方法为例,将0和1分配给Server1;2和3分配给Server2;4和5分配给Server3。由于系统中是采用IP地址来区分不同的应用服务器的,所以任务的分配结果是以群组名、子任务编号与IP地址进行对应存储的。比如,将Job1群组中的子任务0和1与Server1的IP地址进行存储,将Job1群组中的子任务2和3与Server2的IP地址进行存储,将Job1群组中的子任务4和5与Server3的IP地址进行存储。
应用服务器102还用于执行被分配的子任务。
在本实施例中,leader应用服务器按照任务配置信息中的分片数进行拆分,然后将拆分后的子任务分配给Job群组中的应用服务器,即将哪个分片分给哪个应用服务器来执行,最终是由应用服务器102来执行被分配的子任务。分布式协调服务器106,用于部署Zookeeper,与中间服务器建立连接,由Zookeeper统一对中间服务器进行协调。
在本实施例中,Zookeeper是一个分布式应用程序协调服务,部署在分布式协调服务器106中,通过与中间服务器建立连接来对中间服务器进行协调。中间服务器有多个,Zookeeper在该多个中间服务器中选择出一个leader中间服务器,由该leader中间服务器来监控其他中间服务器,当发现其他某个中间服务器掉线或故障时,则将该中间服务器负责管理的群组重新分配给其他中间服务器来接管。与此同时,其他中间服务器同时监控该leader中间服务器,一旦该leader中间服务器故障或掉线,则触发集群重新选举leader中间服务器。这样,通过这种监控规则,可以有效的保证在某个中间服务器故障或掉线的情况下,应用服务器可以正常的进行任务的执行。
在本实施例中,通过引入多个中间服务器来管理应用服务器,分布式协调服务器中部署的Zookeeper只需要对中间服务器进行协调,由于应用服务器由中间服务器来管理,任务的开始以及结束的记录都只需要写入中间服务器,而不需要写入Zookeeper,减少了Zookeeper的负担,且一个中间服务器可以管理多个应用服务器,也就是说,Zookeeper只需要对少量的中间服务器进行协调管理即可,大大减少了Zookeeper的负担,进一度的,由于由中间服务器来管理应用服务器,如果需要扩充应用服务器,只需要在中间服务器中进行注册即可,不需要在Zookeeper进行操作,不但能够减少Zookeeper的负担,也能够实现动态扩充应用服务器的目的。
在一个实施例中,中间服务器104还用于根据Job信息查找实际管理该Job信息的目标中间服务器,将目标中间服务器的地址返回给应用服务器;应用服务器还用于根据目标中间服务器的地址与目标中间服务器建立TCP连接。
在本实施例中,不同的中间服务器管理不同的Job信息。中间服务器接收到应用服务器注册的Job信息后,首先,在自身的列表中查找该Job信息是否存在,即判断该Job信息是否是由该中间服务器来管理的,若没有查找到,则需要查找实际管理该Job信息的中间服务器,即目标中间服务器,获取该目标中间服务器的IP地址,然后将该目标中间服务器的IP地址返回给应用服务器,应用服务器接收到返回的目标中间服务器的IP地址后,根据该IP地址与目标中间服务器建立TCP连接,然后申请加入对应的Job群组。此外,由于每个应用服务器中有多个Job,如图1中所示的,其中一个应用服务器中包括Job1,Job2,Job3,而Job1,Job2,Job3可能由不同的中间服务器来管理,这样就会导致一个应用服务器需要同时维持多个TCP通道。为了避免应用服务器同时维持多个TCP通道,将同一类Job优先交由同一个中间服务器来管理,如图1所示,同一个应用服务器的Job由同一个中间服务器管理。
在一个实施例中,中间服务器104还用于监控Job群组中的应用服务器的上线或下线,当Job群组中有应用服务器上线或下线时,指示Job群组中的leader应用服务器将对应的任务进行重新分配,接收leader应用服务器返回的新的分配结果。
在本实施例中,中间服务器104还用于监控其维护的Job群组中的应用服务器的上线或下线,当有新的应用服务器加入该Job群组时,中间服务器104指示Job群组中的leader应用服务器将对应的任务进行重新分配,即将子任务也同时分配给该新加入的应用服务器进行处理。当Job群组中有应用服务器由于故障或网络等问题掉线时,中间服务器104也需要指示leader应用服务器将对应的任务进行重新分配。比如,最初Job群组中有3台应用服务器,任务分为10个片,分配结果如下:{Server1:[0,1,2],Server2:[3,4,5],Server 3:[6,7,8,9]},如果一台应用服务器崩溃,则重新分配如下:{Server1:[0,1,2,3,4],Server2:[5,6,7,8,9]}。如果新增一台应用服务器,则重新分配如下:{Server1:[0,1],Server2:[2,3],Server3:[4,5,6],Server4:[7,8,9]}。leader应用服务器将最新分配的情况更新到中间服务器。
在一个实施例中,分布式协调服务器106还用于通过Zookeeper在多个中间服务器中选举出一个leader中间服务器;所述leader中间服务器用于实时监控集群中其他中间服务器节点,若发现有中间服务器掉线,则为该掉线的中间服务器管理的群组重新分配给一个中间服务器来接管,并在群组中设置migrate(迁移)节点,所述migrate(迁移)节点用于标注Job群组的迁移状态,当迁移完成后,删除该migrate(迁移)节点;所述中间服务器还用于实时监控群组下的migrate节点,若发现migrate节点的IP地址和自身的相同,则接管该migrate节点所在的群组。
在本实施例中,部署有Zookeeper的分布式协调服务器106通过Zookeeper在多个中间服务器中选举出一个leader中间服务器,如图2所示,为一个实施例中Zookeeper的目录结构示意图,图2种左边为管理中间服务器的中间服务器根节点以及下面的中间服务器节点(包括leader中间服务器节点)。右边为Job群组的根节点以及对应的Job群组节点,还有Job群组节点下的子节点,子节点包括owner(主)节点,migrate(迁移)节点和modified(修改)节点。在本实施例中,将该leader中间服务器作为分布式集群的leader节点,该leader节点用于实时监控其他中间服务器节点(如图2中的中间服务器1节点,中间服务器2节点),若发现有中间服务器掉线,则为掉线的中间服务器管理的Job群组重新分配一个中间服务器来接管,并在该Job群组中设置migrate(迁移)节点,该migrate节点用于标注Job群组的迁移状态,当迁移完成后,删除该migrate节点。其他中间服务器实时监控Job群组下的migrate节点,若发现migrate节点的IP地址和自身的相同,则接管该migrate节点所在的群组,其中,migrate节点的IP地址就是重新为该群组分配的中间服务器的IP地址。
此外,如图2所示,在Job群组下有一个owner节点,该owner节点用于标识该Job群组有哪台中间服务器管理,leader中间服务器监听此节点,当管理该Job群组的中间服务器掉线后,重新分配一个中间服务器接管并在将要被接管的Job群组下设置migrate节点,其中,该migrate节点用于标注Job群组的迁移状态。进一步的,为了能够在不重启中间服务器的情况下,动态的修改Job群组的任务配置信息,当Job群组的任务配置信息被修改后,在该Job群组中设置modified(修改)节点,由管理该Job群组的中间服务器实时的监控modified节点,当发现配置信息变更时,通知该群组中的leader应用服务器,然后删除此节点。
在一个实施例中,leader中间服务器还用于若监控到有中间服务器掉线,则判断掉线的中间服务器是否正在接管群组,若是,则为该群组重新分配接管的中间服务器。
在本实施例中,leader中间服务器若监控到某个中间服务器掉线,除了要在该中间服务器当前管理的Job群组下设置migrate节点,还要查找掉线的该中间服务器是否正在接管其他群组,若是,则为其他群组重新分配接管的中间服务器。具体的,参考图2,在leader中间服务器监控到某个中间服务器掉线后,遍历群组下的migrate节点,若migrate节点所在的群组对应的接管中间服务器的IP地址与该掉线的中间服务器IP地址相同,则重新为该migrate节点所在的群组分配接管的中间服务器。
在一个实施例中,应用服务器102还用于根据Job信息判断是否到达任务的执行时间,若是,则从管理该应用服务器的中间服务器中获取对应的分片信息,根据所述分片信息开始执行对应的子任务,并将任务开始执行的信息记录到中间服务器。
在本实施例中,每个Job群组的leader应用服务器将任务进行分片并分配给对应的中间服务器后,然后将分片结果,即具体分为几片,每一片由那个应用服务器来执行等情况发送到管理该群组的中间服务器。当应用服务器根据自身中的Job信息判断该任务到达执行时间后,从管理该应用服务器的中间服务器中获取对应的分片信息,其中,Job信息包括执行该任务的时间设置;分片信息是指该应用服务器需要执行的分片编号,比如,执行分片0和1。那么该应用服务器就会根据该分片信息执行对应的子任务,并将任务开始执行的信息记录到中间服务器。
如图3所示,在一个实施例中,上述分布式任务调度系统还包括:数据库108,用于存储Job信息,接收中间服务器发送的任务开始及结束的记录并进行存储。
在本实施例中,分布式任务调度系统中还包括数据库108,该数据库用于存储Job信息,即存储每个任务对应的任务配置信息。还用于记录每个任务开始及结束的状态,后台可以通过管控平台来查看每个任务的状态,也可以通过该管控平台手动的对Job的任务配置信息进行修改。
如图4所示,在一个实施例中,提出了一种分布式任务调度方法,该方法包括:
步骤402,应用服务器向中间服务器发起TCP连接请求,中间服务器根据所述TCP连接请求与所述应用服务器建立TCP连接。
在本实施例中,首先,应用服务器向中间服务器发送建立TCP连接的请求,中间服务器接收到该TCP连接请求后,与该应用服务器建立TCP连接。
步骤404,应用服务器向中间服务器注册该应用服务器的IP地址和Job信息。
在本实施例中,应用服务器与中间服务器建立TCP连接后,应用服务器将自身的IP地址和Job信息注册到中间服务器,其中,Job信息包括任务配置信息、任务标识、任务执行时间等。应用服务器的IP地址用于唯一标识该应用服务器。
步骤406,中间服务器获取所述应用服务器注册的IP地址和Job信息,将具有相同Job信息的应用服务器划分为同一个Job群组,在该Job群组中的多个应用服务器中选举出一个leader应用服务器,将所述Job信息对应的任务配置信息和Job群组内的各个应用服务器的IP地址下发到所述leader应用服务器。
在本实施例中,在本实施例中,中间服务器也有多个,但是比应用服务器的数量少很多,中间服务器用于管理应用服务器,首先,中间服务器获取应用服务器注册的IP地址和Job信息,然后将具有相同Job信息的应用服务器划分为一个Job群组,比如,如果应用服务器1和应用服务器2以及应用服务器3都具有相同的Job1,那么该Job1群组中就包括应用服务器1、2和3。然后,在Job群组中的多个应用服务器中选举出一个leader应用服务器,一般是将最早接入该中间服务器的应用服务器作为leader应用服务器,将该Job信息对应的任务配置信息和Job群组内的多个应用服务器的IP地址都下发到该leader应用服务器。
步骤408,leader应用服务器根据所述任务配置信息中的分片数将任务进行拆分,并根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配。
在本实施例中,由leader应用服务器进行任务的拆分及分配,其中,任务配置信息包括任务的分片数以及对应的分片算法。具体的,leader应用服务器根据任务配置信息中的分片数将任务进行拆分,然后根据Job群组内的各个应用服务器的IP地址将拆分后的子任务进行分配。比如,任务配置信息中任务的分片数为6个,那么leader应用服务器就按照对应的分片算法将任务拆分为6个子任务,然后分配给Job群组内的应用服务器,包括leader应用服务器本身。其中,应用服务器IP地址用来唯一标识一个应用服务器。子任务的分配可以采用轮循的方法,也可以采用顺序分配的方法,当然也可以采用其他的分配方法,比如,随机分配方法。以轮循分配方法为例,假设Job群组中有3台应用服务器,该Job任务分为6个分片,分别为0,1,2,3,4,5;将6个分片按照轮循的方法进行分配,将分片0分给第一台应用服务器,分片1分配给第二台应用服务器,分片2分配给第三台应用服务器;然后再将3分给第一台应用服务器,依次循环类推,最终,将分片0和3分配给了第一台应用服务器,分片1和4分配给了第二台应用服务器,分片2和5分配给了第三台应用服务器。由于系统中是采用IP地址来区分不同的应用服务器的,所以任务的分配结果是以群组名、子任务编号与IP地址进行对应存储的。比如,将Job1群组中的子任务0和3与Server1的IP地址进行存储,将Job1群组中的子任务1和4与Server2的IP地址进行存储,将Job1群组中的子任务2和5与Server3的IP地址进行存储。
在一个实施例中,在中间服务器获取所述应用服务器注册的IP地址和Job信息的步骤之后还包括:中间服务器根据所述Job信息查找实际管理该Job的目标中间服务器,将所述目标中间服务器的地址返回给应用服务器;所述应用服务器根据所述目标中间服务器的地址和所述目标中间服务器建立TCP连接。
在本实施例中,不同的中间服务器管理不同的Job信息。中间服务器接收到应用服务器注册的Job信息后,首先,在自身的列表中查找该Job信息是否存在,即判断该Job信息是否是由该中间服务器来管理的,若没有查找到,则需要查找实际管理该Job信息的中间服务器,即目标中间服务器,获取该目标中间服务器的IP地址,然后将该目标中间服务器的IP地址返回给应用服务器,应用服务器接收到返回的目标中间服务器的IP地址后,根据该IP地址与目标中间服务器建立TCP连接,然后申请加入对应的Job群组。
如图5所示,在一个实施例中,上述分布式任务调度的方法还包括:
步骤410,中间服务器监控Job群组中的应用服务器的上线或下线,当群组中有应用服务器上线或下线时,指示Job群组中的leader应用服务器将对应的任务进行重新分配。
在本实施例中,中间服务器还用于监控其维护的Job群组中的应用服务器的上线或下线,当有新的应用服务器加入该Job群组时,中间服务器指示Job群组中的leader应用服务器将对应的任务进行重新分配,即将子任务也同时分配给该新加入的应用服务器进行处理。当Job群组中有应用服务器由于故障或网络等问题掉线时,中间服务器也需要指示leader应用服务器将对应的任务进行重新分配。
步骤412,leader应用服务器按照所述指示根据Job群组中当前在线的应用服务器数量将所述任务进行重新分配,并将分配结果返回给所述中间服务器。
在本实施例中,leader应用服务器按照中间服务器的指示,根据Job群组中当前在线的应用服务器数量将任务进行重新分配,并将分配结果更新到中间服务器。具体的,比如,最初Job群组中有3台应用服务器,任务分为10个片,分配结果如下:{Server1:[0,1,2],Server2:[3,4,5],Server 3:[6,7,8,9]},如果一台应用服务器崩溃,则重新分配如下:{Server1:[0,1,2,3,4],Server 2:[5,6,7,8,9]}。如果新增一台应用服务器,则重新分配如下:{Server1:[0,1],Server2:[2,3],Server3:[4,5,6],Server4:[7,8,9]}。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。