本发明涉及计算机通信技术领域,具体地说是一种跨平台分布式一致性框架系统及其实现方法。
背景技术:
随着同一商家自主产品在市场占有率的提高,同一区域(同一客户)内的客户端数量很容易达到万级甚至十万级。在这种环境下,传统的c/s模式难以解决大流量的数据同步、软件推送、产品升级等等业务需求。在多操作系统(windows、linux、国产操作系统混合)、网络资源紧张(低带宽、高延迟、丢包、乱序等等)、服务器宕机等复杂环境下,保持所有客户端软件的数据一致性,进而提高产品的可靠性、可用性是亟需解决的问题。
技术实现要素:
本发明的目的在于一种跨平台分布式一致性框架系统及其实现方法,用于解决所有客户端软件数据一致性的问题。
本发明解决其技术问题所采取的技术方案是:
本发明第一方面提供了一种跨平台分布式一致性框架系统,由多个安装有客户端软件的主机构成;每个客户端软件所在的主机为raft集群中的一个node节点,包括通讯rpc模块,负责node节点与其他node节点的数据交互通讯;
raft算法模块,用于保障node与node之间数据的一致性;
多个功能模块,为该系统的业务模块,用于实现多种业务功能。
结合第一方面,在第一方面第一种可能实现的方式中,所述的通讯rpc模块包括网络应用层、应用层、数据传输层、网络数据序列号/反序列化模块。
结合第一方面,在第一方面第二种可能实现的方式中,所述的网络应用层以多线程异步、绑定硬件cpu亲和性的方式基于boost::asio实现;
所述的应用层基于boost::bind/function及编译器宏实现,用于动/静态反射;
所述的数据传输层采用国产商密4算法进行加密;
所述的网络数据序列号/反序列化模块采用谷歌的protobuf。
本发明第二方面提供了一种跨平台分布式一致性框架的实现方法,该方法包括以下步骤:
功能模块通过通讯rpc模块与其他node节点进行业务交互;
raft算法模块判断node节点与其他node节点之间数据是否一致;
如果node节点与node节点之间的数据不一致,raft算法模块进行数据同步。
结合第二方面,在第二方面第一种可能实现的方式中,raft算法模块判断node节点与其他node节点之间数据是否一致具体包括:raft算法模块实时检查功能模块产生的数据信息、二进制信息,并与其他node节点的信息做对比。
结合第二方面,在第二方面第二种可能实现的方式中,当node节点与node节点之间的数据不一致时,raft算法模块进行数据同步具体包括以下方法:
根据时间帧确定数据是否更新,最新的时间帧所对应的数据为最新数据,将最新的数据替换之前的数据。
由以上方案可知,本发明提供raft算法实现了所有客户端软件数据的一致性。且适用于多芯片架构平台(普通x86、龙芯、兆芯、飞腾、申威)的多系统平台(windows、linux),及混用环境。在数据交互方面,采用国产加密算法,安全保密。本发明简单配置、调用接口就能组件分布式一致性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为raft算法原理示意图一;
图2为raft算法原理示意图二;
图3为一种跨平台分布式一致性框架系统结构示意图;
图4为本发明实施例所应用的一种跨平台分布式一致性框架实现方法流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议,raft也是一个共识算法。所谓共识,就是多个节点对某个事情达成一致的看法,即使是在部分节点故障、网络延时、网络分割的情况下。利用raft算法协议,可以完整解决问题。
如图1和图2所示,正常状态下,集群中所有节点都处于三种状态(领袖、群众、候选人)的其中一种状态。
当客户端向集群领袖节点提交数据后,领袖节点接收到的数据处于将未提交状态。接着领袖节点会并发地向所有群众节点复制数据并等待接收响应。集群中至少超过半数的节点已接收到数据后,领袖节点再向客户端确认数据已接收。
一旦向客户端发出数据接收回复响应后,表明此时数据状态进入已提交状态,领袖节点再向群众节点发通知告知该数据状态已提交。
raft协议强依赖领袖节点的可用性,以确保集群数据的一致性。当领袖节点因宕机或其他因素发生故障时,此时所有群众都会变成候选人,进入选举状态。
以最简单的三节点集群为例,初始状态abc都是群众,然后发起选举这时有三种可能的情形发生。下图中前二种都能选出领袖,第三种则表明本轮投票无效。对于第三种,每方都投给了自己,结果没有任何一方获得多数票。之后每个参与方随机休息一阵(electiontimeout)重新发起投票直到一方获得多数票。这里的关键就是随机timeout,最先从timeout中恢复发起投票的一方,向还在timeout中的另外两方请求投票,这时它就只能投给自己,导致很快达成一致。
选出领袖后,领袖会定时向所有群众发送心跳,如果群众一段时间没有收到领袖发来的心跳,那么会认为领袖已经挂掉,会再次发起选举。
本发明实施例应用raft算法协议,提供了一种跨平台分布式一致性框架系统及其实现方法,解决了所有客户端中数据不一致的问题。
如图3所示,一种跨平台分布式一致性框架系统,由多个安装有客户端软件的主机构成;每个客户端软件所在的主机为raft集群中的一个node节点,包括通讯rpc模块,负责node节点与其他node节点的数据交互通讯;raft算法模块,用于保障node与node之间数据的一致性;多个功能模块,为该系统的业务模块,用于实现多种业务功能。
通讯rpc模块包括网络应用层、应用层、数据传输层、网络数据序列号/反序列化模块。所述的网络应用层以多线程异步、绑定硬件cpu亲和性的方式基于boost::asio实现;应用层基于boost::bind/function及编译器宏实现,用于动/静态反射;数据传输层采用国产商密4算法进行加密;网络数据序列号/反序列化模块采用谷歌的protobuf。
如图4所示,一种跨平台分布式一致性框架的实现方法,该方法包括以下步骤:
s1、功能模块通过通讯rpc模块与其他node节点进行业务交互;
s2、raft算法模块判断node节点与其他node节点之间数据是否一致;
s3、如果node节点与node节点之间的数据不一致,raft算法模块进行数据同步。
s2中raft算法模块判断node节点与其他node节点之间数据是否一致具体包括:raft算法模块实时检查功能模块产生的数据信息、二进制信息,并与其他node节点的信息做对比。
s3中当node节点与node节点之间的数据不一致时,raft算法模块进行数据同步具体包括以下方法:根据时间帧确定数据是否更新,最新的时间帧所对应的数据为最新数据,将最新的数据替换之前的数据。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
1.一种跨平台分布式一致性框架系统,其特征是,由多个安装有客户端软件的主机构成;每个客户端软件所在的主机为raft集群中的一个node节点,包括通讯rpc模块,负责node节点与其他node节点的数据交互通讯;
raft算法模块,用于保障node与node之间数据的一致性;
多个功能模块,为该系统的业务模块,用于实现多种业务功能。
2.根据权利要求1所述的系统,其特征是,所述的通讯rpc模块包括网络应用层、应用层、数据传输层、网络数据序列号/反序列化模块。
3.根据权利要求2所述的系统,其特征是,所述的网络应用层以多线程异步、绑定硬件cpu亲和性的方式基于boost::asio实现;
所述的应用层基于boost::bind/function及编译器宏实现,用于动/静态反射;
所述的数据传输层采用国产商密4算法进行加密;
所述的网络数据序列号/反序列化模块采用谷歌的protobuf。
4.一种跨平台分布式一致性框架的实现方法,根据权利要求1-3所述的所述的系统,其特征是,该方法包括以下步骤:
功能模块通过通讯rpc模块与其他node节点进行业务交互;
raft算法模块判断node节点与其他node节点之间数据是否一致;
如果node节点与node节点之间的数据不一致,raft算法模块进行数据同步。
5.根据权利要求4所述的方法,其特征是,raft算法模块判断node节点与其他node节点之间数据是否一致具体包括:raft算法模块实时检查功能模块产生的数据信息、二进制信息,并与其他node节点的信息做对比。
6.根据权利要求4所述的方法,其特征是,当node节点与node节点之间的数据不一致时,raft算法模块进行数据同步具体包括以下方法:
根据时间帧确定数据是否更新,最新的时间帧所对应的数据为最新数据,将最新的数据替换之前的数据。
技术总结