发明内容
本发明实施例提供一种分布式系统中数据协商方法及装置,用以解决现有技术中由于集群非主节点数据版本落后,无法参与后续数据协商,影响系统业务的正常进行的问题。
第一方面,提供一种分布式系统中数据协商方法,包括:
在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,判断是否需要进行决议追赶;
在确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第一方面,在第一种可能的实现方式中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收集群主节点发送的开始协商消息;
将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号;
若本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第一方面,在第二种可能的实现方式中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收所述集群主节点发送的提交消息;
将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述提交消息中包含的最大决议编号为所述打包决议中最后一个决议的决议编号;
若本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第一方面,或第一方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议,包括:
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议;
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第一方面,或第一方面的第一至三种可能的实现方式中的任意一种可能的实现方式,在第四种可能的实现方式中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,包括:
向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;
接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。
结合第一方面,或第一方面的第一至四种可能的实现方式中的任意一种可能的实现方式,在第五种可能的实现方式中,所述方法还包括:
在初始化完成后,启动等待接收消息的定时器;
若在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
第二方面,提供一种分布式系统中数据协商方法,该方法包括:
接收集群非主节点发送的追赶消息,所述追赶消息包括所述集群非主节点已提交的决议的最大决议编号和所述集群非主节点的节点标识信息;
根据所述追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;
根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点。
结合第二方面,在第一种可能的实现方式中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目小于等于设定阈值,则根据所述追赶消息中包括的节点标识信息,将在所述编号区间内的决议编号分别对应的决议进行打包;并
将打包后的决议发送给所述集群非主节点。
结合第二方面,在第二种可能的实现方式中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目大于设定阈值,则将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并
将每个分片分别发送给所述集群非主节点。
第三方面,提供一种分布式系统中数据协商装置,包括:
判断模块,用于在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,判断是否需要进行决议追赶;
获取模块,用于在所述判断模块确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第三方面,在第一种可能的实现方式中,所述判断模块具体用于:
接收集群主节点发送的开始协商消息;将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号;若本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第三方面,在第二种可能的实现方式中,所述判断模块具体用于:
接收所述集群主节点发送的提交消息;将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述提交消息中包含的最大决议编号为所述打包决议中最后一个决议的决议编号;若本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第三方面,或第三方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,所述获取模块具体用于:
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议;
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第三方面,或第三方面的第一至三种可能的实现方式中的任意一种可能的实现方式,在第四种可能的实现方式中,所述获取模块具体用于:
向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。
结合第三方面,或第三方面的第一至四种可能的实现方式中的任意一种可能的实现方式,在第五种可能的实现方式中,所述获取模块还用于:
在初始化完成后,启动等待接收消息的定时器;若在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
第四方面,提供一种分布式系统中数据协商装置,包括:
接收模块,用于接收集群非主节点发送的追赶消息,所述追赶消息包括所述集群非主节点已提交的决议的最大决议编号和所述集群非主节点的节点标识信息;
确定模块,用于根据所述接收模块接收的追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;
发送模块,用于根据所述追赶消息中包括的节点标识信息,将所述确定模块确定的决议发送给所述集群非主节点。
结合第四方面,在第一种可能的实现方式中,所述发送模块具体用于:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目小于等于设定阈值,则根据所述追赶消息中包括的节点标识信息,将在所述编号区间内的决议编号分别对应的决议进行打包;并将打包后的决议发送给所述集群非主节点。
结合第四方面,在第二种可能的实现方式中,所述发送模块具体用于:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目大于设定阈值,则将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并将每个分片分别发送给所述集群非主节点。
第五方面,提供一种分布式系统中数据协商设备,该设备包括处理器、存储器和总线,所述存储器存储执行指令,当所述设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述执行指令使得所述设备执行如下方法:
在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,判断是否需要进行决议追赶;
在确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第五方面,在第一种可能的实现方式中,所述处理器执行的所述方法中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收集群主节点发送的开始协商消息;
将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号;
若本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第五方面,在第二种可能的实现方式中,所述处理器执行的所述方法中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收所述集群主节点发送的提交消息;
将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述提交消息中包含的最大决议编号为所述打包决议中最后一个决议的决议编号;
若本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则确定需要进行决议追赶。
结合第五方面,或第五方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,所述处理器执行的所述方法中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议,包括:
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议;
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
结合第五方面,或第五方面的第一至三种可能的实现方式中的任意一种可能的实现方式,在第四种可能的实现方式中,所述处理器执行的所述方法中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,包括:
向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;
接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。
结合第五方面,或第五方面的第一至四种可能的实现方式中的任意一种可能的实现方式,在第五种可能的实现方式中,所述处理器执行的所述方法还包括:
在初始化完成后,启动等待接收消息的定时器;
若在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
第六方面,提供一种分布式系统中数据协商设备,该设备包括处理器、存储器和总线,所述存储器存储执行指令,当所述设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述执行指令使得所述设备执行如下方法:
接收集群非主节点发送的追赶消息,所述追赶消息包括所述集群非主节点已提交的决议的最大决议编号和所述集群非主节点的节点标识信息;
根据所述追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;
根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点。
结合第六方面,在第一种可能的实现方式中,所述处理器执行的所述方法中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目小于等于设定阈值,则根据所述追赶消息中包括的节点标识信息,将在所述编号区间内的决议编号分别对应的决议进行打包;并
将打包后的决议发送给所述集群非主节点。
结合第六方面,在第二种可能的实现方式中,所述处理器执行的所述方法中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目大于设定阈值,则将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并
将每个分片分别发送给所述集群非主节点。
采用上述方法、装置或设备,集群非主节点在参与数据协商的过程中发现本节点数据版本落后时,可以及时进行决议追赶,将缺失的决议补齐,从而可以在后续正常参与数据协商,提高了数据协商成功的几率,保证了系统业务的正常进行。
具体实施方式
本发明实施例在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶;在确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。可见,采用本发明实施例,集群非主节点在参与数据协商的过程中发现本节点数据版本落后时,可以及时进行决议追赶,将缺失的决议补齐,从而可以在后续正常参与数据协商,提高了数据协商成功的几率,保证了系统业务的正常进行。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图1所示,为本发明实施例一提供的分布式系统中数据协商方法流程图,包括以下步骤:
S101:集群非主节点在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶。
该步骤中,在进行数据协商的过程中,集群主节点会向集群非主节点发送协商类消息,比如,开始协商消息和提交消息;在这些消息中携带决议编号,集群非主节点可以将集群主节点发送的决议编号与本节点已提交的决议的最大决议编号进行比较,根据比较结果,判断本节点数据版本是否落后,若落后,则需要进行决议追赶。根据协商类消息的不同,集群非主节点将集群主节点发送的决议编号与本节点已提交的决议的最大决议编号进行比较的方式也会不同,以下实施例二中将会作进一步介绍,这里不再详述。
S102:所述集群非主节点在确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
该步骤中,在进行数据协商过程中,集群非主节点在确定本节点数据版本落后时,可以向集群内部的集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议;或者,为了不给集群内的集群主节点或其它集群非主节点带来负担,影响集群内业务的正常进行,也可以调用外部接口,从为集群主节点提供决议的源头(也即集群服务对象)处获取本节点需要追赶的决议。
可选地,集群非主节点可以在以下不同情况时分别采用不同的追赶方式:
情况一、在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议。
这里,若所述集群主节点发送的最大决议编号为开始协商消息中的最大决议编号,则所述设定差值阈值大于1;若所述集群主节点发送的最大决议编号为提交消息中的最大决议编号,则所述设定差值阈值大于该集群非主节点之前批准的打包决议的打包决议个数。
在这种情况下,当集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,说明此时本节点落后版本不是很多、且能够在集群内部节点处获取到本节点缺失的已协商一致的数据版本,则可以采用集群内部追赶的方式。
具体地,集群非主节点进行集群内部追赶的过程可以是:向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;所述追赶消息包括本节点已提交的决议的最大决议编号和本节点的节点标识信息;接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。相应地,被追赶对象(集群主节点或除本节点外的其它集群非主节点)在接收到所述追赶消息后,根据所述追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点。被追赶对象在确定需要发送给所述集群非主节点的决议版本较多时,可以采用分片发送的方式,以下实施例三中将作进一步介绍,这里不再详述。
情况二、在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
这里,若所述集群主节点发送的最大决议编号为开始协商消息中的最大决议编号,则所述设定差值阈值大于1;若所述集群主节点发送的最大决议编号为提交消息中的最大决议编号,则所述设定差值阈值大于该集群非主节点之前批准的打包决议的打包决议个数。
在这种情况下,当集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,说明此时本节点落后版本较多,为了不给集群系统增加较大的负担,采用集群外部追赶的方式。若集群主节点发送的最小决议编号大于本节点已提交的决议的最大决议编号,说明本节点将无法从集群主节点处获取到本节点缺失的连续的数据版本,此时也需要采用集群外部追赶的方式。
如图2所示,为本发明实施例二提供的分布式系统中数据协商方法流程图,本实施例二重点对集群非主节点需要进入追赶流程的情况作进一步说明,包括以下步骤:
S201:集群非主节点在初始化完成后,启动等待接收消息的定时器。
该步骤中,集群非主节点在初始化时,启动等待接收消息的定时器,等待集群主节点发送消息,或等待定时器超时。
S202:若所述集群非主节点在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
该步骤中,若所述集群非主节点在接收到所述集群主节点发送的任何消息之前定时器超时,说明在此期间该集群非主节点与集群主节点之间的链路可能存在问题,该集群非主节点的数据版本可能已经落后,则这时启动追赶流程,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点未接收到的已协商一致的决议。
S203:若所述集群非主节点在所述定时器超时之前接收到所述开始协商消息,则将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号。
该步骤中,集群非主节点接收到集群主节点发送的开始协商消息,该开始协商消息中包含需要协商的打包决议、该打包决议中第一个决议的决议编号(也即是该集群主节点发送的最大决议编号),除此之外,该开始协商消息中还可以包含该集群主节点目前已提交的决议的最小决议编号。
S204:若所述集群非主节点将本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
该步骤中,若集群非主节点将本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则说明本节点数据版本落后,需要进入追赶流程,即向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
在具体实施过程中,所述集群非主节点可以根据所述开始协商消息中包含的最大决议编号和最小决议编号与本节点已提交的决议的最大决议编号和最小决议编号之间的关系,确定进行决议追赶的方式。若所述开始协商消息中的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值(该设定差值阈值大于1),或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,则通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。若所述开始协商消息中的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号,则向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议。
S205:若所述集群非主节点将本节点已提交的决议的最大决议编号加1后,等于所述开始协商消息中包含的最大决议编号,则向集群主节点回复批准所述开始协商消息中包含的打包决议。
该步骤中,若集群非主节点将本节点已提交的决议的最大决议编号加1后,等于所述开始协商消息中包含的最大决议编号,则说明本节点数据版本没有落后,可以向集群主节点回复批准所述开始协商消息中包含的打包决议。
在具体实施过程中,集群主节点发送的所述开始协商消息中包含的最大决议编号和最小决议编号与本节点已提交的决议的最大决议编号和最小决议编号之间的关系除上述几种情况(包括需要进入追赶流程的情况以及批准决议的情况)外,还有可能会出现一些异常情况,比如,所述开始协商消息中包含的最大决议编号小于等于本节点已提交的决议的最大决议编号,甚至小于本节点已提交的决议的最小决议编号,则这种情况为异常情况,则可以向管理界面反馈异常信息,并记录异常日志。
S206:所述集群非主节点在接收到所述集群主节点发送的提交消息后,将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述最大决议编号为所述打包决议中最后一个决议的决议编号。
该步骤中,集群非主节点在向集群主节点回复批准其在开始协商消息中发送的打包决议后,会接收到集群主节点发送的提交消息,此时,集群主节点发送的提交消息中的最大决议编号为需要提交的打包决议中最后一个决议的决议编号。但是,在集群非主节点回复批准打包决议的消息之后,接收到集群主节点发送的提交消息之前,仍有可能出现该集群非主节点与集群主节点之间的链路异常,导致提交消息中的最大决议编号与该集群非主节点应该提交的决议的最大决议编号不符。因此,需要将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较。
S207:若所述集群非主节点将本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
该步骤中,若集群非主节点将本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则说明本节点数据版本落后,需要进入追赶流程,即向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
在具体实施过程中,所述提交消息中除包含该集群主节点目前需要提交的决议的最大决议编号外,还可以包含该集群主节点目前已提交的决议的最小决议编号。所述集群非主节点可以根据所述提交消息中包含的最大决议编号和最小决议编号与本节点已提交的决议的最大决议编号和最小决议编号之间的关系,确定进行决议追赶的方式。若所述提交消息中的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值(该设定差值阈值大于打包决议个数)。或者本节点已提交的决议的最大决议编号加1后小于所述提交消息中的最小决议编号,则通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。若所述提交消息中的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号,则向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议。
S208:若所述集群非主节点将本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,等于所述提交消息中包含的最大决议编号,则提交所述打包决议。
该步骤中,若集群非主节点将本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,等于所述提交消息中包含的最大决议编号,则说明本节点数据版本没有落后,可以进行决议提交,也即根据所述打包决议中的各个决议进行相关处理,包括删除、添加、修改数据等。
在具体实施过程中,集群主节点发送的所述提交消息中包含的最大决议编号和最小决议编号与本节点已提交的决议的最大决议编号和最小决议编号之间的关系除上述几种情况(包括需要进入追赶流程的情况以及确认能够提交决议的情况)外,还有可能会出现一些异常情况,比如,所述提交消息中包含的最大决议编号小于等于本节点已提交的决议的最大决议编号,甚至小于本节点已提交的决议的最小决议编号,则这种情况为异常情况,则可以向管理界面反馈异常信息,并记录异常日志。
如图3所示,为本发明实施例三提供的分布式系统中数据协商方法流程图,本实施例三重点对集群非主节点在数据协商过程中进行决议追赶的流程作进一步说明,包括以下步骤:
S301:集群非主节点在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,确定需要进行决议追赶。
比如,在一个包含N个节点的集群中,大部分集群节点已提交的决议的最大决议编号已达到602,但是,存在一个集群非主节点由于网络闪断等原因,它提交的决议的最大决议编号为600,在该集群非主节点网络通信恢复正常后,接收到集群主节点发送的消息,检测到本节点决议版本落后,进入追赶流程。
S302:所述集群非主节点判断本节点已提交的决议的最大决议编号加1后是否小于所述集群主节点发送的最小决议编号,若是,则进入步骤S303,否则,进入步骤S304。
S303:所述集群非主节点通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
S304:所述集群非主节点判断所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差是否大于等于设定差值阈值,若是,则进入步骤S303,否则进入步骤S305。
S305:所述集群非主节点向被追赶对象发送追赶消息;所述追赶消息包括本节点已提交的决议的最大决议编号和本节点的节点标识信息,所述被追赶对象为所述集群主节点或其它集群非主节点。
在具体实施过程中,集群中所有节点都存储有本集群所有N个节点的节点信息集合,其中包括每个节点的配置信息等。集群非主节点可以从这N个节点中选取M个节点作为学习对象,加入学习对象集合,这M个节点包括集群主节点和M-1个集群非主节点。该集群非主节点在选择集群非主节点作为学习对象时,可以从所有N-2个集群非主节点中,选择配置相对较高、性能较好、通信时延较短的节点;如果所有集群非主节点的配置相同,则随机选取M-1个集群非主节点作为学习对象。该集群非主节点在向某被追赶对象(集群非主节点)发起追赶流程的过程中,若发现本节点与该被追赶对象之间无法通信,则将该被追赶对象从其学习对象集合中删除,重新选择一个可以通信的其它集群非主节点加入学习对象集合。
在具体实施中,所述集群非主节点可以直接向集群主节点发送追赶消息,若集群主节点处于繁忙的协商任务中,为了使追赶流程不加重集群主节点的工作负载,则从学习对象集合中选取一个集群非主节点作为被追赶对象,发送追赶消息,若该被追赶对象已提交的决议的最大决议编号小于等于发送追赶消息的集群非主节点的最大决议编号,或者,该被追赶对象已删除了连续的决议日志(即无法为该集群非主节点提供连续的决议版本),则该被追赶对象无法为所述集群主节点提供其需要追赶的决议,该集群主节点再从剩余的M-2个学习对象中选择其它集群非主节点作为被追赶对象,如此递归,直至完成追赶过程。
在具体实施中,被追赶对象根据所述追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,将在区间[追赶对象已提交的决议的最大决议编号+1,被追赶对象已提交的决议的最大决议编号]内的决议编号所对应的决议发送给追赶对象。该追赶对象在接收到被追赶对象发送的决议后,比较该被追赶对象发送的决议的最大决议编号与集群主节点的最大决议编号,若该被追赶对象发送的决议的最大决议编号小于集群主节点发送的最大决议编号,则继续从其它学习对象中选择一个学习对象作为被追赶对象发送追赶消息,若该被追赶对象发送的决议的最大决议编号等于集群主节点发送的最大决议编号,则确定追赶成功。
在具体实施中,被追赶对象检测到本节点已提交的决议的最大决议编号与追赶对象发送的最大决议编号相同时,向所述追赶对象发送追赶响应消息,指示无需进行决议追赶;若检测到本节点已提交的决议的最大决议编号小于该追赶对象发送的最大决议编号,或者已删除了部分决议日志,无法为该追赶对象提供连续的决议版本,则向所述追赶对象发送追赶响应消息,指示无法提供服务。
S306:所述被追赶对象接收到追赶消息后,判断在该追赶消息中包括的所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目是否小于等于设定阈值,若是,则进入步骤S307,否则,进入步骤S308。
S307:所述被追赶对象将在所述编号区间内的决议编号分别对应的决议进行打包;并将打包后的决议发送给所述集群非主节点。
S308:所述被追赶对象将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并将每个分片分别发送给所述集群非主节点。
在具体实施过程中,若在区间[所述集群非主节点已提交的决议的最大决议编号+1,本节点已提交的决议的最大决议编号]内的决议编号数目大于设定数目阈值,则发送的决议数据包会过大,有可能导致发送失败。比如用户数据报协议(User Datagram Protocol,UDP)协议要求数据包大小不能超过64K,否则就会发送失败。因此,在本申请实施例中,若在该区间内的决议编号数目大于设定数目阈值,则所述被追赶对象将在该区间内的决议编号所对应的决议划分为多个分片分别发送给所述集群非主节点;其中,每个分片的决议个数小于等于所述设定数目阈值k。比如,被追赶对象可以首先将该区间对应的共L个决议中的前k个决议发送给追赶对象,之后判断剩余的决议个数L-k是否仍大于k,若仍大于k,则继续发送后续的k个决议,如此循环,直到剩余的决议个数小于等于k,则将剩余的决议全部发送给追赶对象。
基于同一发明构思,本发明实施例中还提供了一种与分布式系统中数据协商方法对应的分布式系统中数据协商装置,由于该装置解决问题的原理与本发明实施例分布式系统中数据协商方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图4所示,为本发明实施例四提供的分布式系统中数据协商装置结构示意图,包括:
判断模块41,用于在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,判断是否需要进行决议追赶;
获取模块42,用于在所述判断模块41确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
可选地,所述判断模块41具体用于:
接收集群主节点发送的开始协商消息;将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号;若本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则确定需要进行决议追赶。
可选地,所述判断模块41具体用于:
接收所述集群主节点发送的提交消息;将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述提交消息中包含的最大决议编号为所述打包决议中最后一个决议的决议编号;若本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则确定需要进行决议追赶。
可选地,所述获取模块42具体用于:
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议;
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
可选地,所述获取模块42具体用于:
向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。
可选地,所述获取模块42还用于:
在初始化完成后,启动等待接收消息的定时器;若在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
如图5所示,为本发明实施例五提供的分布式系统中数据协商装置结构示意图,包括:
接收模块51,用于接收集群非主节点发送的追赶消息,所述追赶消息包括所述集群非主节点已提交的决议的最大决议编号和所述集群非主节点的节点标识信息;
确定模块52,用于根据所述接收模块51接收的追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;
发送模块53,用于根据所述追赶消息中包括的节点标识信息,将所述确定模块52确定的决议发送给所述集群非主节点。
可选地,所述发送模块53具体用于:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目小于等于设定阈值,则根据所述追赶消息中包括的节点标识信息,将在所述编号区间内的决议编号分别对应的决议进行打包;并将打包后的决议发送给所述集群非主节点。
可选地,所述发送模块53具体用于:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目大于设定阈值,则将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并将每个分片分别发送给所述集群非主节点。
如图6所示,为本发明实施例六提供的分布式系统中数据协商设置结构示意图,该设备包括处理器61、存储器62和总线63,所述存储器62存储执行指令,当所述设备运行时,所述处理器61与所述存储器62之间通过总线63通信,所述处理器61执行所述执行指令使得所述设备执行如下方法:
在进行数据协商的过程中,根据本节点已提交的决议的最大决议编号和集群主节点发送的最大决议编号,判断是否需要进行决议追赶;
在确定需要进行决议追赶后,向所述集群主节点或除本节点外的集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
可选地,所述处理器61执行的所述方法中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收集群主节点发送的开始协商消息;
将本节点已提交的决议的最大决议编号加1后,与所述开始协商消息中包含的最大决议编号进行比较;所述开始协商消息中包含的最大决议编号为所述开始协商消息中包含的需要协商的打包决议中第一个决议的决议编号;
若本节点已提交的决议的最大决议编号加1后,小于所述开始协商消息中包含的最大决议编号,则确定需要进行决议追赶。
可选地,所述处理器61执行的所述方法中,根据本节点已提交的决议的最大决议编号和集群主节点发送的决议编号,判断是否需要进行决议追赶,包括:
接收所述集群主节点发送的提交消息;
将本节点已提交的决议的最大决议编号加上最近一次批准的打包决议的决议个数后,与所述提交消息中包含的最大决议编号进行比较,所述提交消息中包含的最大决议编号为所述打包决议中最后一个决议的决议编号;
若本节点已提交的决议的最大决议编号加上所述打包决议的决议个数后,小于所述提交消息中包含的最大决议编号,则确定需要进行决议追赶。
可选地,所述处理器61执行的所述方法中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,或通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议,包括:
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差小于设定差值阈值、且本节点已提交的决议的最大决议编号加1后大于等于所述集群主节点发送的最小决议编号时,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议;
在所述集群主节点发送的最大决议编号与本节点已提交的决议的最大决议编号之差大于等于设定差值阈值时,或者本节点已提交的决议的最大决议编号加1后小于所述集群主节点发送的最小决议编号时,通过调用外部接口向集群服务对象请求获取本节点需要追赶的决议。
可选地,所述处理器61执行的所述方法中,向所述集群主节点或除本节点外的其它集群非主节点请求获取本节点需要追赶的决议,包括:
向所述集群主节点或除本节点外的其它集群非主节点发送追赶消息;
接收所述集群主节点或除本节点外的其它集群非主节点根据所述追赶消息发送的决议。
可选地,所述处理器61执行的所述方法还包括:
在初始化完成后,启动等待接收消息的定时器;
若在接收到所述集群主节点发送的任何消息之前定时器超时,则向所述集群主节点或除本节点外的其它集群非主节点请求获取已协商一致的决议。
如图7所示,为本发明实施例七提供的分布式系统中数据协商设置结构示意图,该设备包括处理器71、存储器72和总线73,所述存储器72存储执行指令,当所述设备运行时,所述处理器71与所述存储器72之间通过总线73通信,所述处理器71执行所述执行指令使得所述设备执行如下方法:
接收集群非主节点发送的追赶消息,所述追赶消息包括所述集群非主节点已提交的决议的最大决议编号和所述集群非主节点的节点标识信息;
根据所述追赶消息中包括的最大决议编号和本节点已提交的决议的最大决议编号,确定需要发送给所述集群非主节点的决议;
根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点。
可选地,所述处理器71执行的所述方法中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目小于等于设定阈值,则根据所述追赶消息中包括的节点标识信息,将在所述编号区间内的决议编号分别对应的决议进行打包;并
将打包后的决议发送给所述集群非主节点。
可选地,所述处理器71执行的所述方法中,根据所述追赶消息中包括的节点标识信息,将确定的决议发送给所述集群非主节点,包括:
若在所述集群非主节点已提交的决议的最大决议编号加1至本节点已提交的决议的最大决议编号之间的编号区间内的决议编号数目大于设定阈值,则将在所述编号区间内的决议编号分别对应的决议划分为多个分片,其中,每个分片包含的决议个数小于等于所述设定阈值,并
将每个分片分别发送给所述集群非主节点。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。