一种数据同步方法及相关设备与流程

文档序号:14504784阅读:164来源:国知局

本发明涉及数据库领域,尤其涉及一种数据同步方法及相关设备。



背景技术:

当前云计算的应用越来越普遍,“云”可以用于做存储和计算工作,“云”就是计算机群,每群包括了几十万台、甚至上百万台计算机,“云”中的计算机可以随时更新,保证“云”长生不老。利用云计算技术,用户不需关心存储或计算发生在哪朵“云”上,在任何地点使用任何设备(如电脑、手机等)就可以快速地计算和查找到资料,也不需要担心资料丢失。其中,数据库作为云计算最核心的基础组件,为用户提供可靠地云数据库服务。“云”环境有如下特点:(1)计算与存储分离,通过网络进行互联;(2)计算采用虚拟机或者docker(应用容器引擎)的方式提供服务;(3)存储独立成资源来提供服务,大多采用类似网络附属存储(Network Attached Storage,NAS)的方式来提供服务;(4)在多个数据中心进行数据备份以防数据的丢失。

如图1所示,图1提供的一种AWS Aurora数据库的结构示意图,该AWS Aurora数据库基于上述特点对数据库的结构进行了调整,包括:整合数据库内核能力和Amazon本身较强的Iaas(Infrastructure as a Service,基础设施服务)能力,主打高性能(性能5倍优于MySQL)、高可用(与S3备份服务整合提高可用性)及完全兼容MySQL关系型数据库服务(Relational Database Service,RDS)能力。

其中,AWS Aurora数据库主要具有如下特点:(1)计算与存储进行分离;(2)主节点与存储节点通过redo来传递数据,存储节点通过redo来构建数据页面,来持久化页面和提供页面读服务;(3)存储节点采用跨3个AZ,保存6份的形式来保证数据库的高可用;(4)主节点采用是写6份,4份返回成功就算成功的多数机制在保证写的高可用的基础上来确保性能;(5)计算节点分为主节点Primary Instance和从节点replica Instance,整个集群中有且只有一个主节点,主节点提供写和一致性读服务,多个从节点提供有延时读服务;(6)所有计算节点共享所有的数据,与传统的主备模式相比,每个计算节点不在拥有自己的数据。(7)计算节点的主从节点间通过传递消息来确保读写的一致性,主节点将主节点产生的redo重做日志发送给从节点,从节点根据重做日志更新缓存区中的数据页面,来保证数据页面与主节点的一致。

现有技术提供了几种分布式一致性协议方案,包括:

第一,Paxos协议方案存在三种角色Proposer(提议者)、Acceptor(决策者)和Learner(议案学习者),整个过程(一个实例、一个事务或一个循环)分为两个阶段。包括:(1)准备阶段,Proposer向超过半数(n/2+1)Acceptor发起prepare消息(发送编号),如果prepare符合协议规则Acceptor回复promise消息,否则拒绝;(2)决议阶段或投票阶段,如果超过半数Acceptor回复promise,Proposer向Acceptor发送accept消息,然后Acceptor检查accept消息是否符合规则,消息符合则批准accept请求。

第二,Raft协议方案存在下列三种状态,包括:(1)follower,所有结点都以follower的状态开始,如果没收到leader消息则会变成candidate状态;(2)candidate,向其他节点“拉选票”,如果得到大部分的票则成为leader;(3)leader,所有对系统的修改都会先经过leader,每个修改都会写一条日志,leader收到修改请求后进行日志复制。其中,日志复制过程包括:(1)复制日志到所有follower结点;(2)大部分结点响应时才提交日志;(3)通知所有follower结点日志已提交;(4)所有follower也提交日志;(4)整个系统处于一致状态。

在AWS Aurora数据库中,主计算节点控制redo成功向存储节点写入至少4份数据页面,并且将写成功的节点信息和redo信息发送给从节点,从计算节点根据redo信息更新其缓冲区的页面,在读取数据页面时从写成功的存储节点中选择一个进行读取。如图2所示,图2提供了一种存储节点的日志存储方法的流程示意图,包括:(1)接收日志记录并添加到存储队列;(2)持续记录并发送确认消息;(3)整理日志记录并识别差别;(4)与其他存储节点进行填补空洞处理;(5)将日志记录添加到新数据块版本;(6)周期性创建日志和新数据块版本到S3备份服务器;(7)周期性失效旧版本数据块;(8)周期性进行CRC数据校验。其中,由于在与其他存储节点进行填补空洞处理机制时采用的是大多数机制,造成有部分存储节点数据的短缺,需要与其他节点协调获取。但是,上述方案写机制太过复杂,接收重做日志的日志存储节点需要与其他存储节点配合才能保持一致性状态,造成由于填补空缺时间过长,影响到读服务。并且,主计算节点和从计算节点之间传递重做日志、以及存储节点大量的填补空缺处理会占用大量的网络资源。



技术实现要素:

本发明实施例提供一种数据同步方法及相关设备。可以提高数据同步效率以及减少网络资源占用。

第一方面,本发明提供一种数据同步方法,包括:

主节点首先获取事务提交时变更页面的重做日志,并记录所述变更页面的页面标识、当前事务快照以及日志序列号,然后将所述重做日志写入到存储节点,存储节点根据重做日志对所述变更页面中的数据进行修复;最后主节点向所述从节点发送无效指示消息,所述无效指示消息包含所述页面标识、所述当前事务快照以及所述日志处理序列号,从节点接收到无效指示消息之后,首先失效所述页面标识对应的数据页面、然后根据所述当前事务快照确定对自身可见的所述数据页面的版本信息,并从所述存储节点获取通过目标重做日志修复成功的数据页面,所述目标重做日志的序列号大于等于所述版本信息对应的所述日志序列号。从而不需要在主节点和从节点之间传递重做日志,减小网络资源占用,提高数据读取效率。

在另一种可能的设计中,主节点获取事务提交时变更页面的重做日志,并记录所述变更页面的页面标识、当前事务快照以及日志序列号之前,可以申请全局失效缓冲区,所述全局失效缓冲区用于存储所述变更页面的页面标识、当前事务快照以及日志序列号。

在另一种可能的设计中,主节点获取每个所述存储节点与所述主节点之间的网络通信质量;选择最优的所述网络通信质量对应的存储节点作为所述重做日志写入的发起点,并通过所述发起点在多个所述存储节点之间复制所述重做日志,也可以选择任何一个存储节点作为发起点。其中,存储节点之间采用一致性协议来传输重做日志来确保多个存储节点都完成从工作日志的持久化接收,从而减少主节点向多个存储节点写入重做日志的时间,提高度服务的质量。

第二方面,本发明提供一种数据同步方法,包括:

主节点首先获取事务提交时变更页面的重做日志,并记录所述变更页面的页面标识、当前事务快照以及日志序列号,然后将所述重做日志写入到存储节点,存储节点根据重做日志对所述变更页面中的数据进行修复;最后主节点向所述从节点发送无效指示消息,所述无效指示消息包含所述页面标识、所述当前事务快照以及所述日志处理序列号,从节点接收到无效指示消息之后,首先失效所述页面标识对应的数据页面、然后根据所述当前事务快照确定对自身可见的所述数据页面的版本信息,并从所述存储节点获取通过目标重做日志修复成功的数据页面,所述目标重做日志的序列号大于等于所述版本信息对应的所述日志序列号,从而不需要在主节点和从节点之间传递重做日志,减小网络资源占用,提高数据读取效率。

在另一种可能的设计中,在从节点根据所述无效指示消息失效所述页面标识对应的数据页面之后,从节点向所述存储节点发送读请求,在存储节点判断正确的读请求之后,从节点可以从存储节点获取数据页面。

第三方面,本发明提供了一种数据同步装置,该数据同步装置被配置为实现上述第一方面中主节点所执行的方法和功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的单元。

第四方面,本发明提供了一种数据同步装置,该数据同步装置被配置为实现上述第二方面中从节点所执行的方法和功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的单元。

第五方面,本发明提供了一种数据同步设备,包括:处理器、存储器和通信总线,其中,所述通信总线用于实现所述处理器和存储器之间连接通信,处理器执行所述存储器中存储的程序用于实现上述第一方面提供的一种数据同步方法中的步骤。

第六方面,本发明提供了一种数据同步设备,包括:处理器、存储器和通信总线,其中,所述通信总线用于实现所述处理器和存储器之间连接通信,处理器执行所述存储器中存储的程序用于实现上述第二方面提供的一种数据同步方法中的步骤。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术方案提供的一种AWS Aurora数据库的结构示意图;

图2是现有技术方案提供了一种存储节点的日志存储方法的流程示意图;

图3是本发明实施例提出的一种数据库的结构示意图;

图4是本发明实施例提供的一种数据同步方法的流程示意图;

图5是本发明实施例提供的一种数据同步装置的结构示意图;

图6是本发明实施例提供的另一种数据同步装置的结构示意图;

图7是本发明实施例提供的一种数据同步设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图3,图3是本发明实施例提出的一种数据库的结构示意图。该数据库将传统数据库的原有一站式(主机和磁盘直接连接)的方式进行解耦成计算节点和存储节点,其中,计算节点包括主节点和从节点,计算节点和存储节点通过网络连接,计算节点负责数据库的查找和计算功能,存储节点负责数据的存储,因此计算节点可以根据需要选择不同的配置来提供服务,而存储节点提供数据服务。在该结构中,计算节点将重做日志传输到存储节点来构造数据页面,而不会直接将数据页面通过网络传递给存储节点,并且,计算节点采用的是一主多备共享数据的模型,对于数据的读取请求,主节点和从节点均可以从任何存储节点读取数据来提供服务,主节点可以发送指示消息来通知从节点做相应的处理来保证数据的一致性。

基于上述数据库的结构,图4是本发明实施例提供的一种数据同步方法的流程示意图。如图所示,本发明实施例中的方法包括:

S401,主节点获取事务提交时变更页面的重做日志,并记录所述变更页面的页面标识、当前事务快照以及日志序列号,所述变更页面为数据被修改的数据页面。

具体实现中,所述主节点可以申请全局失效缓冲区,所述全局失效缓冲区用于存储所述变更页面的页面标识、当前事务快照以及日志序列号。并且,可以将提交的事务的事务号写入该全局失效缓冲区,其中,事务可以表示访问或更新数据库中各种数据项的一个程序执行单元,重做日志用于记录数据块被修改后的值并将数据库恢复到修改后的状态;日志序列号是重做日志的唯一标识且随着数据页面的修改次数增加而递增,可以用于标识重做日志发生的时间;当前事务快照是对当前正在执行的事务或将要执行的事务进行的一次快照,保存当前所有事务的状态,在读取数据页面时,根据当前事务快照对记录的页面版本信息进行判断,如果可见则可以读取。

S402,主节点将所述重做日志写入到存储节点。

具体实现中,主节点可以首先向存储节点发送写请求,在发起写请求时线程在失效缓冲区生成失效指示消息,并缓存包含有所述变更页面的页面标识、当前事务快照以及日志序列号的三元组消息,然后将所述重做日志写入到存储节点。其中,如果每次重做日志写入存储节点成功,则小于等于该重做日志对应的日志序列号对应的重做日志均已写成功(重做日志是顺序生成顺序写入的)。

可选的,主节点可以获取每个所述存储节点与所述主节点之间的网络通信质量;然后选择最优的所述网络通信质量对应的存储节点作为所述重做日志写入的发起点,并通过所述发起点在多个所述存储节点之间复制所述重做日志。如图3所示,主节点将重做日志通过网络传输给一个存储实例的存储节点,对于不同的一致性协议(如:Paxos协议、Raft协议)的特点,对传输的存储节点有不同的要求,例如,对于Paxos协议中无主存储节点的情况,可以选择任何一个存储节点作为发起点,但也可以选择最优的网络通信质量对应的存储节点作为所述重做日志写入的发起点;对于Raft协议中需要主节点达成一致性的情况,则必须发给主存储节点,当所有存储节点中的大多数达成一致性协议后,则返回主节点成功消息,然后重做日志在多个存储实例之间进行复制,并在存储节点重做日志复制成功之后向各个计算节点提供服务。

S403,存储节点根据重做日志对数据页面进行修复。

具体实现中,存储节点可以利用重做日志将数据内容添加到数据页面,也可以对数据页面中的数据内容进行修改。

S404,主节点向所述从节点发送无效指示消息,所述无效指示消息包含所述页面标识、所述当前事务快照以及所述日志序列号。

S405,从节点根据所述无效指示消息失效所述页面标识对应的数据页面。

具体实现中,从节点收到失效指示消息之后,处理失效指示消息中三元组消息,并根据三元组消息失效页面标识对应的数据页面,同时维护日志序列号和当前事务快照的对应关系。

S406,从节点向所述存储节点发送读请求。

S407,从节点根据所述当前事务快照确定对自身可见的所述数据页面的版本信息,并从所述存储节点中获取通过目标重做日志修复成功的数据页面,所述目标重做日志的序列号大于等于所述版本信息对应的所述日志序列号。

具体实现中,在从节点从存储节点读取数据页面之前,从节点首先根据当前事务快照,确定对自身可见的所述数据页面的版本信息,若数据页面不在该从节点的当前缓存区内,则将之前接收到的日志序列号发送给存储节点,存储节点对该接收到的日志序列号与当前已处理的重做日志的日志序列号进行比较,若存储节点中已处理的日志序列号大于等于该接收到的日志序列号,则可以确定能够为从节点提供正确的数据页面,否则存储节点不能提供正确的数据页面,此时可以向从节点返回页面不存在的指示消息,也可以根据当前重做日志的处理情况进行等待。在N/2+1读取成功的策略下,最多尝试N/2次可以成功,在“云”环境下存储节点采用了高速网络,基本上一次就可以读取成功。

需要说明的是,从节点从存储节点获得数据页面,其处理的重做日志的序列号必须大于等于当前事务快照对应的日志序列号,确保该所有变更的重做日志一定要反映到数据页面上,避免数据丢失。

综上所述,本发明实施例提供一种基于共享数据的一写多读架构,并基于日志序列号来构造当前事务快照和失效数据页面,使得从节点的数据页面与主节点的数据页面同步,从而及时的提供最新数据的读服务;并且存储节点通过日志序列号就能够判断能否提供正确的读请求,从而使得所有存储节点都能够随机提供读服务,提升数据的读取效率。

请参考图5,图5是本发明实施例提供了一种数据同步装置。如图所示,本发明实施例中的装置包括:

信息获取模块501,用于获取事务提交时变更页面的重做日志,并记录所述变更页面的页面标识、当前事务快照以及日志序列号,所述变更页面为数据被修改的数据页面;

具体实现中,可以申请全局失效缓冲区,所述全局失效缓冲区用于存储所述变更页面的页面标识、当前事务快照以及日志序列号。并且,可以将提交的事务的事务号写入该全局失效缓冲区,其中,事务可以表示访问或更新数据库中各种数据项的一个程序执行单元,重做日志用于记录数据块被修改后的值并将数据库恢复到修改后的状态;日志序列号是重做日志的唯一标识且随着数据页面的修改次数增加而递增,可以用于标识重做日志发生的时间;当前事务快照是对当前正在执行的事务或将要执行的事务进行的一次快照,保存当前所有事务的状态,在读取数据页面时,根据当前事务快照对记录的页面版本信息进行判断,如果可见则可以读取。

日志写入模块502,用于将所述重做日志写入到存储节点,所述重做日志用于所述存储节点对所述变更页面中的数据进行修复;

具体实现中,可以首先向存储节点发送写请求,在发起写请求时线程在失效缓冲区生成失效指示消息,并缓存包含有所述变更页面的页面标识、当前事务快照以及日志序列号的三元组消息,然后将所述重做日志写入到存储节点,存储节点可以利用重做日志将数据内容添加到数据页面,也可以对数据页面中的数据内容进行修改。其中,如果每次重做日志写入存储节点成功,则小于等于该重做日志对应的日志序列号对应的重做日志均已写成功(重做日志是顺序生成顺序写入的)。

可选的,可以获取每个所述存储节点与所述主节点之间的网络通信质量;然后选择最优的所述网络通信质量对应的存储节点作为所述重做日志写入的发起点,并通过所述发起点在多个所述存储节点之间复制所述重做日志。如图3所示,主节点将重做日志通过网络传输给一个存储实例的存储节点,对于不同的一致性协议(如:Paxos协议、Raft协议)的特点,对传输的存储节点有不同的要求,例如,对于Paxos协议中无主存储节点的情况,可以选择任何一个存储节点作为发起点,但也可以选择最优的网络通信质量对应的存储节点作为所述重做日志写入的发起点;对于Raft协议中需要主节点达成一致性的情况,则必须发给主存储节点,当所有存储节点中的大多数达成一致性协议后,则返回主节点成功消息,然后重做日志在多个存储实例之间进行复制,并在存储节点重做日志复制成功之后向各个计算节点提供服务。

消息发送模块503,用于向所述从节点发送无效指示消息,所述无效指示消息包含所述页面标识、所述当前事务快照以及所述日志序列号,所述无效指示信息用于指示所述从节点失效所述页面标识对应的数据页面、以及根据所述当前事务快照确定对自身可见的所述数据页面的版本信息并从所述存储节点获取通过目标重做日志修复成功的数据页面,所述目标重做日志的序列号大于等于所述版本信息对应的所述日志序列号。

具体实现中,从节点收到失效指示消息之后,首先处理失效指示消息中三元组消息,并根据三元组消息失效页面标识对应的数据页面,同时维护日志序列号和当前事务快照的对应关系。

然后,从节点向所述存储节点发送读请求,根据当前事务快照,确定对自身可见的所述数据页面的版本信息,若数据页面不在该从节点的当前缓存区内,则将之前接收到的日志序列号发送给存储节点,存储节点对该接收到的日志序列号与当前已处理的重做日志的日志序列号进行比较,若存储节点中已处理的日志序列号大于等于该接收到的日志序列号,则可以确定能够为从节点提供正确的数据页面,否则存储节点不能提供正确的数据页面,此时可以向从节点返回页面不存在的指示消息,也可以根据当前重做日志的处理情况进行等待。在N/2+1读取成功的策略下,最多尝试N/2次可以成功,在“云”环境下存储节点采用了高速网络,基本上一次就可以读取成功。

请参考图6,图6是本发明实施例提供了另一种数据同步装置。如图所示,本发明实施例中的装置包括:

消息接收模块601,用于接收主节点发送的无效指示消息,所述无线指示信号由所述主节点获取事务提交时变更页面的重做日志并记录所述变更页面的页面标识、当前事务快照以及日志序列号、以及将所述重做日志写入到存储节点后发送的,所述无效指示消息包含所述页面标识、所述当前事务快照以及所述日志序列号。执行与上述S401-S404相同的步骤,本发明实施例不再赘述。

页面失效模块602,用于根据所述无效指示消息失效所述页面标识对应的数据页面。

具体实现中,从节点收到失效指示消息之后,处理失效指示消息中三元组消息,并根据三元组消息失效页面标识对应的数据页面,同时维护日志序列号和当前事务快照的对应关系。

页面获取模块603,用于根据所述当前事务快照确定对自身可见的所述数据页面的版本信息,并从所述存储节点中获取通过目标重做日志修复成功的数据页面,所述目标重做日志的序列号大于等于所述版本信息对应的所述日志序列号。

具体实现中,在从节点从存储节点读取数据页面之前,从节点首先根据当前事务快照,确定对自身可见的所述数据页面的版本信息,若数据页面不在该从节点的当前缓存区内,则将之前接收到的日志序列号发送给存储节点,存储节点对该接收到的日志序列号与当前已处理的重做日志的日志序列号进行比较,若存储节点中已处理的日志序列号大于等于该接收到的日志序列号,则可以确定能够为从节点提供正确的数据页面,否则存储节点不能提供正确的数据页面,此时可以向从节点返回页面不存在的指示消息,也可以根据当前重做日志的处理情况进行等待。在N/2+1读取成功的策略下,最多尝试N/2次可以成功,在“云”环境下存储节点采用了高速网络,基本上一次就可以读取成功。

请继续参考图7,图7是本发明提出的一种数据同步设备的结构示意图。如图所示,该设备可以包括:至少一个处理器701,例如CPU,至少一个通信接口702,至少一个存储器703和至少一个通信总线704。其中,通信总线704用于实现这些组件之间的连接通信。其中,本发明实施例中设备的通信接口702用于与其他节点设备进行信令或数据的通信。存储器703可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器703可选的还可以是至少一个位于远离前述处理器701的存储装置。存储器703中存储一组程序代码,且处理器701执行所述存储器703中存储的程序,执行上述数据同步装置所执行的方法、或实现上述数据同步装置所实现的功能。

需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。

以上对本发明实施例所提供的内容下载方法及相关设备、系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1