一种任务管理方法及装置
技术领域
本申请涉及通信领域,尤其涉及一种任务管理方法及装置。
背景技术
集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、网站(Web)应用和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。
在一个集群中,每台节点机均可以包括相同的Web应用,需要管理任务在集群中每台节点机上的启动和停止。特别是在某些任务并不需要在该集群的所有节点机上运行时,这种管理尤为重要。例如,定时任务是Web应用中常见的一种任务,定时任务是指需要在设定的时间点执行的任务,如彩票的开奖通知,需要在开奖后的某个时间(可以视为设定的时间点)通知用户中奖的彩票号码。在管理定时任务时,需要在设定的时间,管理定时任务在集群中每台节点机上的启动和停止。
现有的任务管理方法主要包括以下两种:
第一种、通过手动方式启动和停止集群中部分或全部节点机上的任务。
第二种、建立一个控制中心,在该控制中心注册需要管理的任务,由控制中心来启动和停止集群中部分或全部节点机上的任务。
针对第一种方法,存在管理的效率低的问题。每次一个集群重新部署后,都需要操作者到具体的节点机上对任务的启动和停止进行相应的操作。而且一旦运行任务的一个节点机宕机,就需要操作者及时启动其他节点机上的任务,来满足该任务的需求。这种方法对于操作者的依赖性较大,导致浪费大量的人力资源,且节点机上任务的管理效率受到极大的限制。
针对第二种方法,虽然相对于第一种方法,在一定程度上提高了对节点机上任务的管理效率,但由于依赖于控制中心的控制,在控制中心不可用时,该控制中心管理下的任务均无法实现管理,容易造成单点故障。
发明内容
本申请实施例提供一种任务管理方法及装置,用于解决现有的任务管理效率低,且容易形成单点故障的问题。
一种任务管理方法,所述方法包括:
节点机查询机器列表,并根据所述机器列表确定是否存在自身所在组包括的节点机处于正常运行状态,若存在,则向建立该组的节点机请求加入该组,否则,建立该组;
所述组中每台正常运行的节点机查询任务列表,所述任务列表包括任务配置信息,并根据所述任务列表运行自身配置的任务;
所述机器列表为所述组中包括的每个节点机的标识列表。
一种任务管理装置,所述装置包括:
启动模块,用于查询机器列表,并根据所述机器列表确定是否存在节点机自身所在组包括的节点机处于正常运行状态,若存在,则向建立该组的节点机请求加入该组,否则,建立该组,所述机器列表为所述组中包括的每个节点机的标识列表;
执行模块,用于查询任务列表,所述任务列表包括任务配置信息,并根据所述任务列表运行节点机自身配置的任务。
根据本申请实施例提供的方案,通过小组的形式,根据任务列表对任务进行管理。小组中的节点机根据机器列表,确定自身所在组中包括的节点机,在确定存在处于正常运行状态的该组中的节点机时,确定该组已建立,向建立该组的节点机请求加入该组,否则,建立该组,并根据根据任务列表中的任务配置信息,运行自身配置的任务,从而实现任务的自动管理,无需人工参与,也无需控制中心的控制,从而避免任务管理效率低的问题,并可以避免单点故障的产生。
附图说明
图1为本申请实施例一提供的任务管理方法的步骤流程图;
图2为本申请实施例二提供的任务管理方法的步骤流程图;
图3为本申请实施例六提供的任务管理方法的步骤流程图;
图4为本申请实施例七提供的任务管理装置的结构示意图。
具体实施方式
针对现有的集群环境下,任务管理效率低,且容易形成单点故障的问题,本申请实施例对节点机进行分组,提供一种组内任务运行状态自维护的方案,解决现有技术存在的问题。
下面结合说明书附图和各实施例对本申请方案进行说明。
实施例一、
本申请实施例一提供一种任务管理方法,该方法的步骤流程如图1所示,包括:
步骤001、加入小组。
节点机查询机器列表,并根据所述机器列表确定是否存在自身所在组包括的节点机处于正常运行状态,若存在,则向建立该组的节点机请求加入该组,否则,建立该组。
所述机器列表为所述组中包括的每个节点机的标识列表。
具体的,节点机查询机器列表可以为:节点机可以在启动时,查询自身预先保存的机器列表,或者,节点机在启动时,向监控中心上报启动提示,该提示中携带节点机标识,接收监控中心下发的机器列表,并查询该机器列表。
步骤002、运行任务。
所述组中每台正常运行的节点机查询任务列表,所述任务列表包括任务配置信息,并根据所述任务列表运行自身配置的任务。
具体的,节点机查询任务列表可以为:所述组中每台正常运行的节点机分别查询自身预先保存的任务列表,或者,所述组中每台正常运行的节点机分别向监控中心上报运行提示,该提示中携带节点机标识,接收监控中心下发的任务列表,并查询该任务列表。
具体的,节点机可以在达到以下条件时,运行任务:
建立所述组的节点机,在设定时长内没有接收到加入请求,且该组中正常运行的节点机数量达到设定值。
所述任务列表中的任务配置信息可以具体为:针对每个任务,在所述组中,该任务对应的节点机数量、该任务对应的节点机标识及该任务对应的每个节点机标识对应的节点机的优先级。
节点机运行自身配置的任务可以具体为:针对任务列表中每个对应的节点机标识包含自身对应的节点机标识的任务,按照该任务对应的节点机的优先级由高到低的顺序,选择该任务对应的节点机数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,运行该任务,否则,不运行该任务。
进一步的,节点机运行自身配置的任务可以具体为:针对任务列表中每个对应的节点机标识包含自身对应的节点机标识的任务,确定正在运行该任务的节点机数量是否小于任务列表中该任务对应的节点机数量:
若正在运行该任务的节点机数量小于该任务对应的节点机数量,根据该任务对应的节点机数量与正在运行该任务的节点机数量之间的差值,除了正在运行该任务的节点机之外,按照该任务对应的节点机的优先级由高到低的顺序选择所述差值数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,运行该任务;
若正在运行该任务的节点机数量大于该任务对应的节点机数量,根据正在运行该任务的节点机数量与该任务对应的节点机数量之间的差值,按照针对该任务,正在运行该任务的节点机的优先级由低到高的顺序选择所述差值数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,停止运行该任务;
若正在运行该任务的节点机数量等于该任务对应的节点机数量,结束本次操作。
节点机在运行自身配置的任务之后,可以在任务列表中,将运行完毕的任务标记为已运行。则节点机运行自身配置的任务具体包括:运行任务列表中尚未标记为已运行的任务。
步骤003、重新运行任务。
节点机可以在接收到更新消息、机器列表发生更新或任务列表发生更新的至少一个条件发生时,重新运行任务。
具体的,更新消息可以根据以下情况产生:所述组中的节点机两两之间发送因特网包探索ping指令,在确定对端节点机无法ping通时,向所述组中的节点机发送更新消息,该更新消息用于通知其他节点机,本组不再包括所述对端节点机;和/或,建立该组的节点机在接收到某台节点机的加入请求时,向组中的节点机发送更新消息,该更新消息用于通知组中的节点机,所述发送加入请求的节点机加入本组。
机器列表发生更新可以是指:机器列表中的节点机数量、节点机标识中的至少一项发生变化。
任务列表发生更新可以是指:任务列表中的任务数量、针对任意一个任务,该任务对应的节点机数量、节点机标识和节点机的优先级中的至少一项发生变化。
下面以机器列表和任务列表预先保存在节点机为例,通过实施例二对本发明实施例一的方案进行说明。
实施例二、
本申请实施例二提供一种任务管理方法,该方法的步骤流程如图2所示,包括:
步骤101、节点机启动。
节点机在启动时,根据机器列表,确定是否存在自身所在组包括的节点机处于正常运行状态,若存在,则向建立该组的节点机请求加入该组,否则,建立该组。所述机器列表为所述组中包括的节点机列表。
具体的,节点机在启动时,可以根据机器列表,向自身所在组包括的其他节点机发送请求,若接收到自身所在组包括的其他节点机中的至少一台节点机返回的响应消息,则可以确定存在正常运行的自身所在组包括的其他节点机,确定自身所在的组已建立,可以向建立该组的节点机请求加入该组,否则,若未接收到自身所在组包括的其他节点机中的任意一台节点机返回的响应消息,确定自身所在的组尚未建立,可以建立该组。
例如,节点机A启动,其保存的机器列表中标识节点机A所在的组(假设为组1)包括节点机A、节点机B、节点机C和节点机D,则节点机A分别向节点机B、节点机C和节点机D发送请求,若节点机B、节点机C和节点机D均未返回响应消息(可以是设定时长内未返回响应消息),则节点机A确定自身所在的组尚未建立,可以建立该组(此时节点机A即为建立组1的节点机),否则,若节点机A接收到节点机B、节点机C和节点机D中的至少一个节点机返回的响应消息,确定自身所在的组已建立,可以向建立该组的节点机请求加入该组(组1)。
在本步骤中,若有属于同一组的多个节点机同时启动,可能导致多个节点机分别建立该组,此时,可以将所述多个节点机分别建立的组合并,并将建立该组的多个节点机中的任意一个作为建立该组的节点机。当然,也可以按照一定的策略选择一个节点机作为建立该组的节点机。例如,选择负荷最小的节点机作为建立该组的节点机。
步骤102、节点机运行任务。
所述组中每台正常运行的节点机根据任务列表,运行自身配置的任务。具体的,节点机可以在自身所在的组达到稳定状态且建立所述组的节点机,在设定时长内没有接收到加入(join)请求时,运行自身配置的任务。节点机自身所在的组达到稳定状态可以通过:该组中正常运行的节点机数量达到设定值来确定。
其中,该设定值可以通过实际情况设置。在一个组中包括的节点机数量越多时,可以将所述设定值设定得越高。如,该组中包括的节点机数量为20台,则可以设定该组中正常运行的节点机数量达到10时,满足该组中正常运行的节点机数量达到设定值的要求。又如,该组中包括的节点机数量为10台,则可以设定该组中正常运行的节点机数量达到5时,满足该组中正常运行的节点机数量达到设定值的要求。
具体的,判断该组中正常运行的节点机,可以是通过节点机两两之间发送请求及响应消息来确定的,假设一个组(假设为组2)中包括节点机A’、节点机B’、节点机C’和节点机D’,节点机A’可以分别向节点机B’、节点机C’和节点机D’发送请求,节点机B’可以分别向节点机A’、节点机C’和节点机D’发送请求,节点机C’可以分别向节点机A’、节点机B’和节点机D’发送请求,节点机D’可以分别向节点机A’、节点机B’和节点机C’发送请求,若节点机A’、节点机B’和节点机C’均未收到节点机D’的响应消息,则可以确定节点机D’无法正常工作,而节点机A’、节点机B’和节点机C’之间的交互正常,可以确定A’、节点机B’和节点机C’正常工作。
所述任务列表为针对每个任务,在所述组中,该任务对应的节点机数量、该任务对应的节点机标识及该任务对应的每个节点机标识对应的节点机的优先级。例如,任务列表中包括两个任务,分别为任务1和任务2,针对任务1,运行该任务需要的节点机数量为3,组3中可以运行该任务的节点机为节点机A”、节点机B”、节点机C”和节点机D”,且组3中可以运行任务1的节点机的优先级顺序由高到低依次为节点机A”、节点机B”、节点机C”和节点机D”;针对任务2,运行该任务需要的节点机数量为2,组3中可以运行该任务的节点机为节点机B”和节点机C”,且组3中可以运行任务2的节点机的优先级顺序由高到低依次为节点机B”、节点机C”。
具体的,节点机根据任务列表,运行自身配置的任务包括:针对任务列表中每个对应的节点机标识包含自身对应的节点机标识的任务,按照该任务对应的节点机的优先级由高到低的顺序,选择该任务对应的节点机数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,运行该任务,否则,不运行该任务。
例如,节点机A”(属于组3)可以根据任务列表,确定自身可以运行的任务为任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机A”确定自身属于选择出的节点机,运行任务1。又如,节点机D”(属于组3)可以根据任务列表,确定自身可以运行的任务为任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机D”确定自身不属于选择出的节点机,不运行任务1。
需要说明的是,在步骤101执行之前,可预先将一个集群中的节点机分组(当然,一个组可以包括一个集群中的所有节点机),并可以将每个节点机所在组包含的节点机的信息,通过机器列表的形式预先保存在该节点机中,并且,可以将针对每个任务,运行该任务需要的节点机数量,一个组中可以运行该任务的节点机及该组中可以运行该任务的节点机的优先级通过任务列表的形式预先保存在该组的每台节点机中。
步骤103、节点机重新运行任务。
节点机重新运行自身配置的任务,可以为以下三种情况中的至少一种触发:
第一种、机器列表发生变化。
第二种、任务列表发生变化。
第三种、接收到更新消息。
其中,所述更新消息可以是在下面两种情况下接收到的:
1、所述组中的节点机两两之间发送因特网包探索ping指令,在确定对端节点机无法ping通时,向所述组中的节点机发送更新消息,该更新消息用于通知其他节点机,本组不再包括所述对端节点机。具体的,可以通过建立该组的节点机向所述组中的节点机发送更新消息。而若无法ping通的节点机为建立该组的节点机,则可以将任意一台正常工作的节点机作为建立该组的节点机。具体的,在重新确定建立该组的节点机时,可以由正常工作的节点机相互进行协商确定。
进一步的,可以通过以下方法确定是否需要向所述组中的节点机发送更新消息:除建立该集群的节点机之外,该集群中的节点机两两之间发送ping指令,在确定对端节点机无法ping通时,向建立该集群的节点机发送delete消息,该delete消息用于通知建立该集群的节点机在本集群中去除所述对端节点机,建立该集群的节点机在确定某台节点机对应的delete消息数量超过阈值时,向集群中的节点机发送更新消息,该更新消息用于通知其他节点机,本集群不再包括所述对应的delete消息数量超过阈值的节点机。
2、建立该组的节点机在接收到某台节点机的join请求时,向组中的节点机发送更新消息,该更新消息用于通知组中的节点机,所述发送join请求的节点机加入本组。
在本步骤中,由于需要调整节点机运行的任务,可能导致正在运行某个任务的节点机数量小于任务列表中运行该任务需要的节点机数量,也可能导致正在运行某个任务的节点机数量大于任务列表中运行该任务需要的节点机数量,当然,正在运行某个任务的节点机数量也可能等于任务列表中运行该任务需要的节点机数量。此时,进一步的,节点机根据任务列表,运行自身配置的任务可以包括:
针对任务列表中每个对应的节点机标识包含自身对应的节点机标识的任务,确定正在运行该任务的节点机数量是否小于任务列表中该任务对应的节点机数量:
若正在运行该任务的节点机数量小于该任务对应的节点机数量,根据该任务对应的节点机数量与正在运行该任务的节点机数量之间的差值,除了正在运行该任务的节点机之外,按照该任务对应的节点机的优先级由高到低的顺序选择所述差值数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,运行该任务;
若正在运行该任务的节点机数量大于该任务对应的节点机数量,根据正在运行该任务的节点机数量与该任务对应的节点机数量之间的差值,按照针对该任务,正在运行该任务的节点机的优先级由低到高的顺序选择所述差值数量的节点机标识,在确定自身对应的标识属于选择出的节点机标识时,停止运行该任务;
若正在运行该任务的节点机数量等于该任务对应的节点机数量,结束本次操作。
具体的,确定正在运行某任务的节点机数量,可以是通过节点机之间互相发送消息(如监控消息),该消息中携带节点机自身正在执行的任务来实现的。
例如,节点机A”(属于组3)可以根据任务列表,确定自身可以运行的任务为任务1。若针对任务1,节点机A”分别接收节点机B”、节点机C”和节点机D”发送的消息,确定节点机B”正在执行任务1和任务2,节点机C”正在执行任务1,节点机D”没有运行任务,若节点机A”自身没有运行任务,从而确定正在运行任务1的节点机数量(该数量为2)小于任务列表中运行任务1需要的节点机数量(该数量为3),运行该任务需要的节点机数量与正在运行该任务的节点机数量之间的差值为1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,除了节点机B”和节点机C”之外,选择1台节点机(为节点机A”),节点机A”确定自身属于选择出的节点机,则运行任务1。
若针对任务1,节点机A”分别接收节点机B”、节点机C”和节点机D”发送的消息,确定节点机B”正在执行任务1和任务2,节点机C”正在执行任务1,节点机D”正在执行任务1,若节点机A”自身没有运行任务,从而确定正在运行任务1的节点机数量(该数量为3)等于任务列表中运行任务1需要的节点机数量(该数量为3),则节点机A”可以不运行任务1,结束本次操作,并继续接收节点机B”、节点机C”和节点机D”发送的消息。
又如,节点机D”(属于组3)可以根据任务列表,确定自身可以运行的任务为任务1。若针对任务1,节点机D”分别接收节点机B”、节点机C”和节点机A”发送的消息,确定节点机B”正在执行任务1和任务2,节点机C”正在执行任务1,节点机A”正在执行任务1,如节点机D”自身正在执行任务1,从而确定正在运行任务1的节点机数量(该数量为4)大于任务列表中运行任务1需要的节点机数量(该数量为3),正在运行该任务的节点机数量与运行该任务需要的节点机数量之间的差值为1,按照正在运行该任务的节点机的优先级由低到高的顺序选择选择1台节点机(为节点机D”),节点机D”确定自身属于选择出的节点机,停止运行任务1。
下面分别通过实施例三~实施例五对步骤103进行详细说明。
假设组3对应的机器列表中,组3中包括的节点机为节点机A”、节点机B”、节点机C”和节点机D”(节点机A”、节点机B”、节点机C”和节点机D”中均可以预先保存该机器列表)。组3对应的任务列表中,任务列表中包括两个任务,分别为任务1和任务2,针对任务1,运行该任务需要的节点机数量为3,组3中可以运行该任务的节点机为节点机A”、节点机B”、节点机C”和节点机D”,且组3中可以运行任务1的节点机的优先级顺序由高到低依次为节点机A”、节点机B”、节点机C”和节点机D”;针对任务2,运行该任务需要的节点机数量为2,组3中可以运行该任务的节点机为节点机B”和节点机C”,且组3中可以运行任务2的节点机的优先级顺序由高到低依次为节点机B”、节点机C”(节点机A”、节点机B”、节点机C”和节点机D”中均可以预先保存该任务列表)。
实施例三、
下面以机器列表发生变化为例,通过实施例三对节点机重新运行自身配置的任务进行说明。
假设组3对应的变更后的机器列表为:组3中包括的节点机为节点机B”、节点机C”和节点机D”。则节点机B”、节点机C”和节点机D”需要重新运行自身配置的任务。
节点机B”根据任务列表,确定自身可以运行的任务为任务1和任务2,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机B”、节点机C”和节点机D”,节点机B”确定自身属于选择出的节点机,运行任务1。针对任务2,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择2台节点机,分别为节点机B”和节点机C”,节点机B”确定自身属于选择出的节点机,运行任务2。
节点机C”根据任务列表,确定自身可以运行的任务为任务1和任务2,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机B”、节点机C”和节点机D”,节点机C”确定自身属于选择出的节点机,运行任务1。针对任务2,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择2台节点机,分别为节点机B”和节点机C”,节点机C”确定自身属于选择出的节点机,运行任务2。
节点机D”根据任务列表,确定自身可以运行的任务为任务1,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机B”、节点机C”和节点机D”,节点机D”确定自身属于选择出的节点机,运行任务1。
进一步的,节点机B”、节点机C”和节点机D”可以两两相互发送消息,通知对方自身正在执行的任务,从而节点机可以根据任务列表以及正在运行某任务的节点机数量与运行该任务需要的节点机数量之间的关系,运行自身配置的任务。
实施例四、
下面以任务列表发生变化为例,通过实施例四对节点机重新运行自身配置的任务进行说明。
假设组3对应的变更后的任务列表为:任务列表中包括三个任务,分别为任务1、任务2和任务3,针对任务1,运行该任务需要的节点机数量为3,组3中可以运行该任务的节点机为节点机A”、节点机B”、节点机C”和节点机D”,且组3中可以运行任务1的节点机的优先级顺序由高到低依次为节点机A”、节点机B”、节点机C”和节点机D”;针对任务2,运行该任务需要的节点机数量为2,组3中可以运行该任务的节点机为节点机B”和节点机C”,且组3中可以运行任务2的节点机的优先级顺序由高到低依次为节点机B”、节点机C”;针对任务3,运行该任务需要的节点机数量为1,组3中可以运行该任务的节点机为节点机A”和节点机C”,且组3中可以运行任务2的节点机的优先级顺序由高到低依次为节点机A”、节点机C”。则节点机A”、节点机B”、节点机C”和节点机D”需要重新运行自身配置的任务。
节点机A”根据任务列表,确定自身可以运行的任务为任务1和任务3,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机A”确定自身属于选择出的节点机,运行任务1。针对任务3,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择1台节点机,为节点机A”,节点机A”确定自身属于选择出的节点机,运行任务3。
节点机B”根据任务列表,确定自身可以运行的任务为任务1和任务2,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机B”确定自身属于选择出的节点机,运行任务1。针对任务2,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择2台节点机,分别为节点机B”和节点机C”,节点机B”确定自身属于选择出的节点机,运行任务2。
节点机C”根据任务列表,确定自身可以运行的任务为任务1、任务2和任务3,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机C”确定自身属于选择出的节点机,运行任务1。针对任务2,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择2台节点机,分别为节点机B”和节点机C”,节点机C”确定自身属于选择出的节点机,运行任务2。针对任务3,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择1台节点机,为节点机A”,节点机C”确定自身不属于选择出的节点机,不运行任务3。
节点机D”根据任务列表,确定自身可以运行的任务为任务1,针对任务1,按照该组中可以运行该任务的节点机的优先级由高到低的顺序,选择3台节点机,分别为节点机A”、节点机B”和节点机C”,节点机D”确定自身不属于选择出的节点机,不运行任务1。
进一步的,节点机A”、节点机B”、节点机C”和节点机D”可以两两相互发送消息,通知对方自身正在执行的任务,从而节点机可以根据任务列表以及正在运行某任务的节点机数量与运行该任务需要的节点机数量之间的关系,运行自身配置的任务。
实施例五、
下面以接收到更新消息为例,通过实施例五对节点机重新运行自身配置的任务进行说明。
以所述更新消息用于删除组3中的一台节点机为例:
节点机A”、节点机B”、节点机C”和节点机D”可以两两相互发送ping指令,若节点机A”发现节点机C”无法ping通,可以向节点机B”和节点机D”发送更新请求,通知节点机B”和节点机D”组3中不再包括节点机C”。
具体的,节点机A”可以向建立该组的节点机(如节点机B”)发送更新请求,并通过节点机B”(建立该组的节点机)通知节点机D”(和节点机A”)组3中不再包括节点机C”。
若节点机A”发现节点机B”(建立该组的节点机)无法ping通,则节点机A”、节点机C”和节点机D”可以协商确定三者之中的任意一台作为建立该组的节点机。
特别的,节点机A”、节点机C”和节点机D”可以两两相互发送ping指令,若节点机A”发现节点机C”无法ping通,节点机D”也发现节点机C”无法ping通,则节点机A”和节点机D”可以向节点机B”(建立该组的节点机)发送delete消息,通知节点机B”在组3中去除节点机C”,节点机B”在确定节点机C”对应的delete消息数量超过阈值(如设定为1)时,分别向节点机A”和节点机D”发送更新消息,通知节点机A”和节点机D”,组3中不再包括节点机C”。
此时,相当于机器列表发生了变化(删除了至少一个节点机),节点机重新运行自身配置的任务的过程与实施例二相同,在此不再赘述。
以所述更新消息用于在组3中增加一台节点机为例:
建立该组(组3)的节点机(如节点机B”)在接收到某台节点机(如节点机E”)的join请求时,向组中的节点机(节点机A”、节点机C”和节点机D”)发送更新消息,该更新消息用于通知组中的节点机,所述发送join请求的节点机(节点机E”)加入本组(组3)。
此时,相当于机器列表发生了变化(增加了至少一个节点机),节点机重新运行自身配置的任务的过程与实施例二相同,在此不再赘述。
下面通过一个具体的实例对本申请实施例一~实施例五的方案进行详细说明。
实施例六、
本申请实施例六提供一种任务管理方法,该方法的步骤流程如图3所示,包括:
步骤201、进行节点机配置。
在本步骤中,可以在节点机中预先存储该节点机所在组对应的机器列表,以及该节点机所在组对应的任务列表。一个组可以为一个集群。
如表1所示,在机器列表中,可以利用机器标识(ID)(例如,为每台节点机分配一个序号)表示每台节点机,并记录每台节点机的因特网(IP)地址。
表1
如表2所示,在任务列表中,可以分别针对每个任务(如任务1和任务2),记录运行该任务需要的节点机数量,所述组中可以运行该任务的节点机及所述组中可以运行该任务的节点机的优先级,在表2中,队列的先后顺序即可以表示可以运行该任务的节点机的优先级由高到低的顺序,队列中的序号即表示可以运行该任务的节点机。
表2
在任务列表的设计中,可以结合每个节点机的负荷情况,防止将耗费资源较多的任务集中在一台或多台节点机上运行。
具体的,可以通过设置的监控中心来统一管理配置,由监控中心向每台节点机本地推送一个对应的机器列表副本和一个对应的任务列表副本,该节点机可以将接收到的副本保存在配置文件中。由于一般情况下这个配置(对应的机器列表和对应的任务列表)很少改动,所以不会造成对监控中心的依赖。
每台节点机上可以包括一个监听端口,使得节点机可以根据监听到的事件的类型来响应具体的操作,具体的事件的类型包括:join请求、delete消息、更新消息、监控消息(用于节点机获取其他节点机正在执行的任务)、view消息(用于监控中心获取节点机正在执行的任务),还可以包括Message消息(用于后续扩展事件的类型)。
步骤202、节点机启动。
集群环境启动时,每台节点机都会读取本地的配置文件,建立组或加入组,并可以使用自身的监听端口监听各种消息。
具体的,节点机启动时,首先从配置文件中读取机器列表,然后确定自身所在的组是否已建立,如果未建立,该节点机就会建立该组,并且作为建立该组的节点机(mater),管理该组中节点机的状态。如果已建立,就会向该组的mater发送join请求,请求加入该组。
当一个组中的多台节点机同时启动时,可能多台节点机都建立该组,此时需要合并组内的成员,并随机挑选一个节点机作为mater。当然,此时,也可以按照设定的策略,如将序号最小的机器ID对应的节点机作为mater。
步骤203、节点机运行任务。
节点机可以在该组达到稳定状态且在10分钟之内,建立该组的节点机没有收到其他节点机发来的join请求时,开始按需启动任务,即可以根据任务列表,运行自身配置的任务。
具体的,若节点机启动的任务为定时任务,则可以进一步在该定时任务设定的运行时间,根据任务列表,运行该定时任务。
204、节点机重新运行任务。
节点机可以在接收到更新消息,或者在机器列表或任务列表发生变化时,重新运行任务,即重新确定自身配置的任务的启动和停止。
进一步的,如表3所示,每个节点机中还可以包括一个任务运行状态列表,可以分别针对每个任务(如任务1和任务2),记录运行该任务需要的节点机数量,以及所述组中正在运行该任务的节点机,具体的,所述组中正在运行该任务的节点机可以是该节点机通过节点机两两之间发送的监控消息确定的。
任务 |
需要的节点机数量 |
正在执行该任务的节点机 |
任务1 |
3 |
1,2,3 |
任务2 |
1 |
1 |
表3
节点机针对任务列表中每个自身可以运行的任务,可以确定正在运行某任务的节点机数量与任务列表中运行该任务需要的节点机数量之间的关系,从而确定自身需要停止还是启动该任务。
进一步的,在本实施例五提供的方案中,每台节点机启动时都可以向监控中心进行注册,监控中心的注册表中可以包含该节点机的IP地址,以及该节点机所在的组的标识(如组名)。监控中心向节点机发送view请求,要求查看任务运行的状态时,该节点机可以把本地的任务运行状态列表中的信息返回给监控中心,便于监控中心查看节点机的运行状态。
根据本申请实施例一~实施例六提供的方案,在解决了现有的集群环境下,任务管理效率低,且容易形成单点故障的问题的基础上,进一步提供了节点机在机器列表、任务列表或接收到更新消息时,通过与组内的其他节点机两两之间的信息交互来实现组内任务运行状态自维护的具体方案,并进一步提供了将组内任务运行状态提供给监控中心,便于监控中心进行查看的方案。而且,在本申请实施例提供的方案中,还提供了对组的建立和维护方法。
与本发明实施例一~实施例六基于同一发明构思,提供以下的装置。
实施例七、
本申请实施例七提供一种任务管理装置,所述装置可以集成在节点机中,该装置的结构如图4所示,包括:
分组模块11用于查询机器列表,并根据所述机器列表确定是否存在节点机自身所在组包括的节点机处于正常运行状态,若存在,则向建立该组的节点机请求加入该组,否则,建立该组,所述机器列表为所述组中包括的每个节点机的标识列表;执行模块12用于查询任务列表,所述任务列表包括任务配置信息,并根据所述任务列表运行节点机自身配置的任务。
分组模块11具体用于在启动时,查询节点机自身预先保存的机器列表,或者,在启动时,向监控中心上报启动提示,该提示中携带节点机标识,接收监控中心下发的机器列表,并查询该机器列表。
执行模块12具体用于查询节点机自身预先保存的任务列表,或者,向监控中心上报运行提示,该提示中携带节点机标识,接收监控中心下发的任务列表,并查询该任务列表。
执行模块12具体用于在建立所述组的节点机,在设定时长内没有接收到加入请求,且该组中正常运行的节点机数量达到设定值时,查询任务列表,并根据任务列表,运行节点机自身配置的任务。
所述装置还包括发送模块13和接收模块14:
发送模块13用于发送因特网包探索ping指令,在确定对端节点机无法ping通时,向所述组中的节点机发送更新消息,该更新消息用于通知其他节点机,本组不再包括所述对端节点机;和/或,在接收到某台节点机的加入请求时,向组中的节点机发送更新消息,该更新消息用于通知组中的节点机,所述发送加入请求的节点机加入本组。
接收模块14用于接收更新消息。
执行模块12还用于在接收模块接收到更新消息时,重新运行节点机自身配置的任务。
执行模块12还用于在确定机器列表中的节点机数量、节点机标识、任务列表中的任务数量、针对任意一个任务,该任务对应的节点机数量、节点机标识和节点机的优先级中的至少一项发生变化时,重新运行节点机自身配置的任务。
执行模块12具体用于针对任务列表中每个对应的节点机标识包含节点机自身对应的节点机标识的任务,按照该任务对应的节点机的优先级由高到低的顺序,选择该任务对应的节点机数量的节点机标识,在确定节点机自身对应的标识属于选择出的节点机标识时,运行该任务,否则,不运行该任务。
执行模块12具体用于针对任务列表中每个对应的节点机标识包含节点机自身对应的节点机标识的任务,确定正在运行该任务的节点机数量是否小于任务列表中该任务对应的节点机数量:
若正在运行该任务的节点机数量小于该任务对应的节点机数量,根据该任务对应的节点机数量与正在运行该任务的节点机数量之间的差值,除了正在运行该任务的节点机之外,按照该任务对应的节点机的优先级由高到低的顺序选择所述差值数量的节点机标识,在确定节点机自身对应的标识属于选择出的节点机标识时,运行该任务;
若正在运行该任务的节点机数量大于该任务对应的节点机数量,根据正在运行该任务的节点机数量与该任务对应的节点机数量之间的差值,按照针对该任务,正在运行该任务的节点机的优先级由低到高的顺序选择所述差值数量的节点机标识,在确定节点机自身对应的标识属于选择出的节点机标识时,停止运行该任务;
若正在运行该任务的节点机数量等于该任务对应的节点机数量,结束本次操作。
所述执行模块12还用于在任务列表中,将运行完毕的任务标记为已运行,以及运行任务列表中尚未标记为已运行的任务。
本申请实施例一~实施例七提供的方案可以由java编程语言实现,在web应用中,可以使用quartz定时任务框架。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。