发明内容
本发明实施例通过提供一种推进任务状态的方法、***、存储介质及服务集群,解决了现有技术对任务状态推进不稳定的技术问题。
第一方面,本发明实施例提供了一种基于zookeeper推进任务状态的方法,其特征在于,应用于包括M台物理机的***中,在所述M台物理机上各自启动有针对同一目标任务的状态器进程实例,M为大于2的整数,所述方法包括:
将所述M台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例;
在所述主状态器进程实例不可用时,从所述主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例;
通过所述新的主状态器进程实例,从公共zookeeper目录中读取所述目标任务当前所处的任务状态,其中,所述公共zookeeper目录设置在不同于所述M台物理机的另一设备上;
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
可选的,在所述将所述目标任务从当前所处的任务状态推进至下一任务状态之后,所述方法还包括:
通过所述新的主状态器进程实例,将所述目标任务的推进之后的任务状态,同步给所述新的主状态器进程实例之外的各个可用的状态器进程实例。
可选的,所述从所述主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例,包括:
在所述主状态器进程实例不可用时,通过所述主状态器进程实例之外的M-1个状态器进程实例,删除所述主状态器进程实例在所述公共zookeeper目录下已经创建的原加锁子目录;
通过所述主状态器进程实例之外的M-1个状态器进程实例,在所述公共zookeeper目录下创建新的加锁子目录;
将重新创建所述加锁子目录成功的一个状态器进程实例作为新的主状态器进程实例;
所述新的主状态器进程实例之外的M-1个状态器进程实例,各自在所述公共zookeeper目录下注册针对新的加锁子目录的目录删除事件。
可选的,如果在所述公共zookeeper目录下存在与N个任务状态对应的N个状态目录,在所述M个状态器进程实例启动时,通过所述M个状态器进程实例各自在所述N个状态目录下注册与N个任务状态对应的***。
可选的,所述通过所述主状态器进程实例之外的M-1个状态器进程实例,在所述公共zookeeper目录下创建新的加锁子目录,包括:
激活所述主状态器进程实例之外的M-1个状态器进程实例在所述目标任务当前所在的状态目录下的***;
所述主状态器进程实例之外的M-1个状态器进程实例的激活后的***,在所述公共zookeeper目录下创建所述新的加锁子目录。
可选的,所述通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态,包括:
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态对应的状态目录中删除;
通过所述新的主状态器进程实例,将所述目标任务添加到下一任务状态对应的状态目录中,以推进所述目标任务至下一任务状态。
第二方面,本发明实施例提供了一种基于zookeeper推进任务状态的方法,应用于第一备用物理机中,所述第一备用物理机与另外K台物理机交互,K为正整数,所述第一备用物理机和所述K台物理机上各自启动有针对同一目标任务的状态器进程实例,将所述K台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例,所述方法包括:
在所述主状态器进程实例不可用时,在公共zookeeper目录下重新创建所述加锁子目录,其中,所述公共zookeeper目录设置在不同于所述第一备用物理机与所述K台物理机的另一设备上,所述目标任务的状态存储在所述公共zookeeper目录下;
如果所述加锁子目录创建成功,将所述第一备用物理机上的状态器进程实例确定为新的主状态器进程实例;
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
第三方面,本发明实施例提供了一种基于zookeeper推进任务状态的***,该***包括M台物理机,在所述M台物理机上各自启动有针对同一目标任务的状态器进程实例,M为大于2的整数,所述***包括:
设置单元,用于将所述M台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例;
选取单元,用于在所述主状态器进程实例不可用时,从所述主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例;
读取单元,用于通过所述新的主状态器进程实例,从公共zookeeper目录中读取所述目标任务当前所处的任务状态,其中,所述公共zookeeper目录设置在不同于所述M台物理机的另一设备上;
推进单元,用于通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
第四方面,本发明实施例提供了一种计算机服务集群,该集群包括M台物理机,M台物理机上均设置有控制器,各个控制器均包括存储器和处理器,其中,所述存储器存储有计算机程序,在所述M台物理机上各自启动有针对同一目标任务的状态器进程实例,将所述M台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例,M为大于2的整数,所述程序被处理器执行时能够实现以下步骤:
在所述主状态器进程实例不可用时,从所述主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例;
通过所述新的主状态器进程实例,从公共zookeeper目录中读取所述目标任务当前所处的任务状态,其中,所述公共zookeeper目录设置在不同于所述M台物理机的另一设备上;
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
第五方面,本发明实施例提供了一种计算机可读存储介质,应用于第一备用物理机中,所述第一备用物理机与另外K台物理机交互,K为正整数,所述第一备用物理机和所述K台物理机上各自启动有针对同一目标任务的状态器进程实例,将所述K台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例,其介质上存储有计算机程序,其特征在于,该程序被处理器执行时实现以下步骤:
在所述主状态器进程实例不可用时,在公共zookeeper目录下重新创建所述加锁子目录,其中,所述公共zookeeper目录设置在不同于所述第一备用物理机与所述K台物理机的另一设备上,所述目标任务的状态存储在所述公共zookeeper目录下;
如果所述加锁子目录创建成功,将所述第一备用物理机上的状态器进程实例确定为新的主状态器进程实例;
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
本发明实施例提供的一种或多种技术方案,至少实现了如下技术效果或优点:
由于公共zookeeper目录设置在不同于M台物理机的另一设备上,因此,在主状态器进程实例不可用仍然能够得到目标任务当前所处的任务状态,保证了任务的信息可靠性、持久化,再由新的主状态器进程实例对目标任务从当前所处的任务状态进行继续推进,因此不会因为单个状态器进程实例不可用而不能够继续支撑目标任务的状态推进,从而保证了任务状态变迁的稳定性。
具体实施方式
本发明实施例通过提供一种推进任务状态的方法、***、存储介质及服务集群,解决了现有技术对任务状态推进不稳定的技术问题,本发明的总体思路如下:
在主状态器进程实例不可用时,从主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例;通过新的主状态器进程实例,从公共zookeeper目录中读取目标任务当前所处的任务状态,其中,公共zookeeper目录设置在不同于M台物理机的另一设备上;通过新的主状态器进程实例,将目标任务从当前所处的任务状态推进至下一任务状态。
通过上述技术方案,由于公共zookeeper目录设置在不同于M台物理机的另一设备上,因此,在主状态器进程实例不可用仍然能够得到目标任务当前所处的状态,保证了任务的信息可靠性、持久化,再由新的主状态器进程实例对目标任务从所处的状态进行继续推进,因此不会因为单个状态器进程实例不可用而不能够继续支撑目标任务的状态推进,从而保证了任务状态变迁的稳定性。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
本发明实施例提供的一种基于zookeeper推进任务状态的方法,应用于设置有M台物理机的***中,在M台物理机上各自启动有针对同一目标任务的状态器进程实例,M为大于2的整数,在M台物理机中的其中一台物理机上的状态器进程实例当前为主状态器进程实例。在不同于M台物理机的另一设备上为存储目标任务对应的数据的位置:公共zookeeper目录。
需要说明的是,ZooKeeper是一个分布式服务软件,具体为分布式的、开放源码的分布式应用程序协调服务,为分布式应用提供一致***的软件。
在本发明实施例中,物理机可以设置有3台,或者4台,或者5台,在每台物理机上启动有针对同一目标任务的状态器进程实例。
参考图1所示,本发明实施例提供的基于zookeeper推进任务状态的方法包括如下步骤:
首先执行S101、将M台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例
在S101之后,接着执行S102、在主状态器进程实例不可用时,从主状态器进程之外的M-1个状态器进程实例中确定出新的主状态器进程实例。
相对于确定出来的新的主状态器进程实例,不可用的主状态器进程实例为原主状态器进程实例,原主状态器进程实例为从M个状态器进程实例中确定出,在公共zookeeper目录下创建有一个master目录节点,M个状态器进程实例在启动时均在同一master目录下创建加锁子目录(比如,加锁子目录可以命名为/master/lock)。如果一个状态器进程实例创建加锁子目录成功,则该状态器进程实例被确定为主状态器进程实例,主状态器进程实例之外的M-1个状态器进程实例注册针对主状态器进程实例已经创建的原加锁子目录的目录删除事件。
主状态器进程实例不可用的情况包括:主状态器进程实例需要重启,或者主状态器进程实例所在的物理机需要重启或者出现故障时。
在本发明实施例中从主状态器进程之外的M-1个状态器进程实例中确定出新的主状态器进程实例,通过如下步骤S1021~S1024实现:
步骤S1021、在主状态器进程实例不可用时,通过主状态器进程实例之外的M-1个状态器进程实例,删除主状态器进程实例在公共zookeeper目录下已经创建的原加锁子目录。
具体的,通过主状态器进程之外的M-1个状态器进程实例的目录删除事件,删除主状态器进程实例在公共zookeeper目录下已经创建的原加锁子目录。
步骤S1022:通过所述主状态器进程实例之外的M-1个状态器进程实例,在公共zookeeper目录下创建新的加锁子目录。
步骤S1023:将重新创建加锁子目录成功的一个状态器进程实例作为新的主状态器进程实例。
步骤S1024:新的主状态器进程实例之外的M-1个状态器进程实例,各自在公共zookeeper目录下注册针对新的加锁子目录的目录删除事件。
进一步的,在公共zookeeper目录下存在与N个任务状态对应的N个状态目录。为了确定出新的主状态器进程实例。在执行S101之前,还包括:在M个状态器进程实例启动时,M个状态器进程实例各自在N个状态目录下注册与任务状态对应的***。则每个状态器进程实例都在N个状态目录下注册与任务状态对应的***,则一个状态器进程实例会注册N个***,每个状态目录下注册的***不同。
以目标任务的任务状态包括触发状态、准备中状态、执行中状态、成功状态、失败状态、取消状态为例,对注册的与任务状态对应的***进行举例说明:在触发状态对应的目录下注册***TriggedMonitor,在准备中状态对应的目录下注册***PreparingMonitor,在执行中状态对应的目录下注册***RunningMonitor,在成功状态对应的目录下注册***SucceedMonitor;在失败状态对应的目录下注册***FailedMonitor;在取消状态对应的目录下注册***CancelledMonitor。
对应的,基于注册的与任务状态对应的各个***,实现通过主状态器进程实例之外的M-1个状态器进程实例,在公共zookeeper目录下创建新的加锁子目录的过程如下:
首先,激活主状态器进程实例之外的M-1个状态器进程实例在目标任务当前所在的状态目录下的***;
接着,主状态器进程实例之外的M-1个状态器进程实例的激活后的***,在公共zookeeper目录下创建新的加锁子目录。
在执行S102之后,接着执行S103:通过新的主状态器进程实例,从公共zookeeper目录中读取目标任务当前所处的任务状态,其中,公共zookeeper目录设置在不同于M台物理机的另一设备上。
需要说明的是,公共zookeeper目录为zookeeper软件在不同于M台物理机的另一设备上创建的公共位置,目标任务在不同的时间段,处于公共zookeeper目录下的N个状态目录中的其中一个状态目录中。
在具体实施过程中,N个任务状态包括如下:1、触发状态:表征目标任务在当前时间被触发,在触发状态进行检查目标任务是否满足执行条件;2、准备中状态:用于目标任务执行前的准备工作动作,在准备中状态解析目标任务执行所需要的参数,确定目标任务的执行节点;3、执行中状态:表征目标任务正在执行中;4、成功状态:表征目标任务正常执行完毕;5、失败状态:表征目标任务执行出错,采取重试机制。6、取消状态:表征目标任务被取消。
由于可以在zookeeper软件中,以目录的形式存储任务。具体的,设置N个任务状态与N个状态目录一一对应,各个任务存储在与当前所处的任务状态对应的状态目录中。
则,具体的,如果目标任务处于触发状态,则存储在触发状态对应的目录下;如果目标任务处于准备中状态,则将目标任务存储在准备中状态对应的目录下;如果目标任务处于执行中状态,则存储在执行中状态对应的目录下;如果目标任务处于成功状态,则存储在成功对应的目录下;如果目标任务处于失败状态,则存储在失败状态对应的目录下;如果目标任务处于取消状态,则存储在取消状态对应的目录下。
参考下表1,对N个状态目录形成的目录结构进行举例来讲:
表1.状态目录表
任务状态 |
状态目录 |
触发状态 |
/job/trigged |
准备中状态 |
/job/preparing |
执行中状态 |
/job/running |
成功状态 |
/job/succeed |
失败状态 |
/job/failed |
取消状态 |
/job/cancelled |
参考表1所示,所有处于触发状态的任务存放在/job/trigged目录下,所有处于准备中状态的任务存放在/job/preparing目录下,所有处于执行中状态的任务存放在/job/running目录中,所有处于成功状态的任务存放在/job/succeed目录下,所有处于失败状态的任务存放在/job/failed目录下,所有处于取消状态的任务存放在/job/cancelled目录下。
基于本实施例提供的表1所示的目录结构,则目标任务被触发处于触发状态时,首先将目标任务存放在/job/trigged目录下。
接着,如果目标任务的任务状态从触发状态推进至准备中状态,则从/job/trigged目录下删除目标任务,并存储目标任务至/job/preparing目录;否则,目标任务的任务状态从触发状态推进至失败状态,则从/job/trigged目录下删除目标任务,并存储目标任务至/job/cancelled目录。
再接着,如果目标任务的任务状态从准备中状态推进至执行中状态,则从/job/preparing目录下删除目标任务,并存储目标任务至/job/running目录;否则,目标任务的任务状态从准备中状态推进至失败状态,则从/job/preparing目录下删除目标任务,并存储目标任务至/job/failed目录。
最后,如果目标任务的任务状态从执行中状态推进至成功状态,则从/job/running目录删除目标任务,并存储目标任务至/job/succeed目录;否则,则将目标任务的任务状态从执行中状态推进至取消状态,需要则从/job/running目录删除目标任务,并存储目标任务至/job/cancelled目录。还有可能将目标任务的任务状态从执行中状态推进至失败状态,需要则从/job/running目录删除目标任务,并存储目标任务至/job/failed目录。
基于本实施例,由于目标任务的信息存储到了一个公共位置,则各个状态器进程实例不需要各自维护同一目标任务的信息,从而各个状态器进程实例的维护之间达到能够任务状态的同步,即使主状态器进程实例不可用,也能够从公共的位置(公共zookeeper目录)得到目标任务的任务状态,由于在zookeeper软件中以目录的形式来持久化的存储数据,故可保证了存储任务状态的一致性,持久性,因此,得到任务状态更可靠。
在S103之后,接着执行S104:通过新的主状态器进程实例,将目标任务从当前所处的任务状态推进至下一任务状态。
在具体实施过程中,目标任务当前所处的任务状态为触发状态、准备中状态、执行中状态、成功状态、失败状态、取消状态中的一种。
具体的,将目标任务从当前所处的任务状态推进至下一任务状态,通过如下步骤S1041~S1042实现:
步骤S1041:通过新的主状态器进程实例,将目标任务从当前所处的任务状态对应的状态目录中删除;
步骤S1042:通过新的主状态器进程实例,将目标任务添加到下一任务状态对应的状态目录中,以推进目标任务至下一任务状态。
更具体来讲,注册的与N任务状态对应的N个***,还用于实现将目标任务从当前所处的任务状态推进至下一任务状态,实现过程如下。
N个***都是父类NodeMonitor的子类,N个***各自实现了父类的nodeAddEvent方法,N个***对应监听N个状态目录中各自的添加事件。当目标任务被触发,添加目标任务到触发状态对应的目录中,此时触发状态对应的目录下的添加事件被触发,触发状态对应的***被激活,调用触发状态对应的***内的nodeAddAction函数,其中,nodeAddEvent作为参数传递给nodeAddAction函数,getEventSource方法获取到目标任务,从而将目标任务的任务状态推进至触发状态。
在具体实施过程中,推进任务状态至其他任务状态的过程与推进至触发状态的方式相似,为了说明书的简洁,本文不再赘述。
在执行S104之后,本发明实施例提供的技术方案还包括:基于新的主状态器进程实例将推进之后的任务状态同步给新的主状态器进程实例之外的各个可用的状态器进程实例。
下面,从当目标任务被触发开始,对本发明实施例提供的基于zookeeper推进任务状态的方法实现推进任务状态的过程进行更详细的描述:
步骤1:执行添加事件,以添加目标任务到触发状态对应的目录中。
步骤2:通过M个状态器进程实例各自在触发状态对应的***,各自判断M个状态器进程实例是否为主状态器进程实例,不是主状态器进程实例的状态器进程实例忽略该添加目标任务到触发状态对应的目录的事件,主状态器进程实例通过nodeAddEvent的getEventSource方法获取到目标任务的信息。
步骤3:主状态器进程实例将目标任务的状态设置为触发状态;
步骤4:主状态器进程实例检查目标任务是否满足执行条件,如果满足,将目标任务从触发状态对应的目录中删除,再将目标任务添加到与准备状态对应的状态目录中,此时,目标任务从触发状态到准备状态的变迁就完成了。
步骤5:准备状态对应的状态目录中新增了一个节点,故M个状态器进程实例在准备状态对应的状态目录下各自注册的***均被激活,以再次进行各自判断M个状态器进程实例是否为主状态器进程实例,由再次判断出的主状态器进程实例(实际中,可能为上一次完成推进至准备中状态的主状态器进程实例,也可能为重新确定出的新的主状态器进程实例)将目标任务从准备中状态推进至执行中状态,且进行执行中状态对应的逻辑。最后,将目标任务从准备状态对应的状态目录中删除,再将目标任务添加到执行中状态对应的状态目录中,至此完成了目标任务从准备状态到执行中状态的变迁。目标任务的任务状态变迁继续推进,直到目标任务终止(成功或取消)。这样就通过zookeeper软件的事件特性来完成任务状态推进的驱动。
基于同一发明构思,本发明实施例提供了一种基于zookeeper推进任务状态的方法,应用于第一备用物理机中,所述第一备用物理机与另外K台物理机交互,所述第一备用物理机和所述K台物理机上各自启动有针对同一目标任务的状态器进程实例,将所述K台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例,参考图2所示,所述方法包括:
S201:在所述主状态器进程实例不可用时,在公共zookeeper目录下重新创建所述加锁子目录,其中,所述公共zookeeper目录设置在不同于所述第一备用物理机与所述K台物理机的另一设备上,所述目标任务的状态存储在所述公共zookeeper目录下;
S202:如果所述加锁子目录创建成功,将所述第一备用物理机上的状态器进程实例确定为新的主状态器进程实例;
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
进一步的,在本发明实施例提供的技术方案中,在之后S202之后还包括:
通过所述新的主状态器进程实例,将所述目标任务的推进之后的任务状态,同步给所述新的主状态器进程实例之外的各个可用的状态器进程实例。
在本发明实施例提供的具体技术方案中:在所述主状态器进程实例不可用时,删除所述主状态器进程实例在所述公共zookeeper目录下已经创建的原加锁子目录;在所述公共zookeeper目录下创建新的加锁子目录;如果创建所述加锁子目录成功,确定为新的主状态器进程实例,否则在所述公共zookeeper目录下注册针对新的加锁子目录的目录删除事件。
在本发明实施例提供的具体技术方案中:如果在所述公共zookeeper目录下存在与N个任务状态对应的N个状态目录,在所述新的状态器进程实例启动时,通过所述新的状态器进程实例在所述N个状态目录下注册与N个任务状态对应的***。
在本发明实施例提供的具体技术方案中,在所述公共zookeeper目录下创建新的加锁子目录,包括:激活在所述第一备用物理机上启动的状态器进程实例在目标任务当前所在的状态目录下的***;激活后的***,在所述公共zookeeper目录下创建所述新的加锁子目录。
在本发明实施例提供的具体技术方案中,步骤S203包括:通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态对应的状态目录中删除;通过所述新的主状态器进程实例,将所述目标任务添加到下一任务状态对应的状态目录中,以推进目标任务至下一任务状态。
本发明实施例中执行的方法步骤为前述应用于***的基于zookeeper推进任务状态的方法中以一个备用的物理机侧的执行过程,本领域技术人员基于前述应用于***的基于zookeeper推进任务状态的方法,可以知晓本实施例的实施细节,为了说明书的简洁,本文不在赘述。
基于同一发明构思,本发明实施例提供了一种基于zookeeper推进任务状态的***,该***包括M台物理机,在所述M台物理机上各自启动有针对同一目标任务的状态器进程实例,M为大于2的整数,参考图3所示,所述***包括:
设置单元301,用于将M台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例;
选取单元302,用于在所述主状态器进程实例不可用时,从所述主状态器进程实例之外的M-1个状态器进程实例中确定出新的主状态器进程实例;
读取单元303,用于通过所述新的主状态器进程实例,从公共zookeeper目录中读取所述目标任务当前所处的任务状态,其中,所述公共zookeeper目录设置在不同于所述M台物理机的另一设备上;
推进单元304,用于通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态推进至下一任务状态。
在本发明实施例的进一步技术方案,所述***还包括:
同步单元,用于通过所述新的主状态器进程实例,将所述目标任务的推进之后的任务状态,同步给所述新的主状态器进程实例之外的各个可用的状态器进程实例。
在本发明实施例的进一步技术方案,所述选取单元302具体用于:
在所述主状态器进程实例不可用时,通过所述主状态器进程实例之外的M-1个状态器进程实例,删除所述主状态器进程实例在所述公共zookeeper目录下已经创建的原加锁子目录;
通过所述主状态器进程实例之外的M-1个状态器进程实例,在所述公共zookeeper目录下创建新的加锁子目录;
将重新创建所述加锁子目录成功的一个状态器进程实例作为新的主状态器进程实例;
所述新的主状态器进程实例之外的M-1个状态器进程实例,各自在所述公共zookeeper目录下注册针对新的加锁子目录的目录删除事件。
在本发明实施例的进一步技术方案,如果在所述公共zookeeper目录下存在与N个任务状态对应的N个状态目录,N为正整数,在所述M个状态器进程实例启动时,通过所述M个状态器进程实例各自在所述N个状态目录下注册与N个任务状态对应的***。
在本发明实施例一具体技术方案,所述选取单元302具体用于:
激活所述主状态器进程实例之外的M-1个状态器进程实例在所述目标任务当前所在的状态目录下的***;
所述主状态器进程实例之外的M-1个状态器进程实例的激活后的***,在所述公共zookeeper目录下创建所述新的加锁子目录。
在本发明实施例的进一步技术方案,所述推进单元304具体用于:
通过所述新的主状态器进程实例,将所述目标任务从当前所处的任务状态对应的状态目录中删除;
通过所述新的主状态器进程实例,将所述目标任务添加到下一任务状态对应的状态目录中,以推进所述目标任务至下一任务状态。
本发明实施例提供的***为实施前述应用于***中的基于zookeeper推进任务状态的方法,基于前述应用于***的基于zookeeper推进任务状态的方法实施例,本领域技术人员可以知晓本实施例的实施细节,为了说明书的简洁,本文不在赘述。
基于同一发明构思,本发明实施例提供一种计算机服务集群,参考图4所示,该集群包括M台物理机,M台物理机上均设置有控制器,各个控制器均包括存储器和处理器,其中,所述存储器存储有计算机程序,在所述M台物理机上各自启动有针对同一目标任务的状态器进程实例,M为大于2的整数,所述程序被处理器执行时能够实现前述的应用于***的基于zookeeper推进任务状态的方法实施例中的各个步骤。
本发明实施例提供的计算机服务集群用于实施前述应用于***的基于zookeeper推进任务状态的方法,基于前述应用于***的基于zookeeper推进任务状态的方法实施例,本领域技术人员可以知晓本实施例的实施细节,为了说明书的简洁,本文不在赘述。
基于同一发明构思,本发明实施例提供一种计算机可读存储介质,应用于第一备用物理机中,所述第一备用物理机与另外K台物理机交互,所述第一备用物理机和所述K台物理机上各自启动有针对同一目标任务的状态器进程实例,将所述K台物理机中的其中一台物理机上的状态器进程实例设置为主状态器进程实例,其介质上存储有计算机程序,该程序被处理器执行时实现前述应用于第一备用物理机中的基于zookeeper推进任务状态的方法实施例的各个步骤。
本发明实施例中的存储介质用于存储实施前述应用于第一备用物理机中的基于zookeeper推进任务状态的方法,基于前述应用于第一备用物理机中的基于zookeeper推进任务状态的方法实施例,本领域技术人员可以知晓本实施例的实施细节,为了说明书的简洁,本文不在赘述。
本发明实施例提供的上述技术方案,由于公共zookeeper目录设置在不同于M台物理机的另一设备上,因此,在主状态器进程实例不可用仍然能够得到目标任务当前所处的任务状态,保证了任务的信息可靠性、持久化,再由新的主状态器进程实例对目标任务从当前所处的任务状态进行继续推进,因此不会因为单个状态器进程实例不可用而不能够继续支撑目标任务的状态推进,从而保证了任务状态变迁的稳定性,
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。