多节点数据同步的方法和装置,以及计算机设备转让专利

申请号 : CN202010048622.7

文献号 : CN111274317A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王东临

申请人 : 书生星际(北京)科技有限公司

摘要 :

本发明提供了一种多节点数据同步的方法和装置,以及计算机设备,该方法包括:多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作;该主节点将该写操作对应的至少一条数据变更日志打包到由该主节点产生的区块中,并对该区块进行签名;在对该区块进行签名后,该主节点将该区块广播至多节点中的其它节点;多节点中的至少一个同步节点读取该区块中的所述至少一条数据变更日志,并执行该区块中的与至少一条数据变更日志对应的至少一个数据变更操作;以及多节点中的至少一个节点确定该区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。

权利要求 :

1.一种多节点数据同步的方法,其特征在于,包括:

所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作;

所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名;

在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点;

所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作;以及所述多节点中的至少一个节点确定所述区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。

2.根据权利要求1所述的方法,其特征在于,还包括:所述多节点中的除所述主节点外的每个节点在接收所述区块后,将确认接收消息广播到所述多节点中的其它节点,其中所述确认接收消息中包括所述节点的确认接收签名。

3.根据权利要求2所述的方法,其特征在于,所述多节点中的至少一个节点确定所述区块的操作状态包括:当所述至少一个节点中的一个节点满足第二预设条件时,所述节点将所述区块判定为确认区块,并将高度最高的确认区块的高度判定为确认区块高度。

4.根据权利要求3所述的方法,其特征在于,所述第二预设条件包括:所述节点接收到除所述主节点外的所述多节点中的预设数量的节点广播的所述确认接收消息;以及在所述区块之前产生的所有区块均被所述节点判定为确认区块。

5.根据权利要求1所述的方法,其特征在于,还包括:在所述至少一个同步节点中的一个同步节点执行完成所述区块中的所述至少一个数据变更操作后,将确认执行消息广播到所述多节点中的其它节点,其中所述确认执行消息中包括所述同步节点的确认执行签名。

6.根据权利要求5所述的方法,其特征在于,所述多节点中的至少一个节点确定所述区块的操作状态包括:当所述至少一个节点中的一个节点满足第一预设条件时,所述节点将所述区块判定为不可逆区块,并将高度最高的不可逆区块的高度判定为不可逆区块高度。

7.根据权利要求6所述的方法,其特征在于,所述第一预设条件包括:所述节点接收到所述多节点中的所有同步节点广播的所述确认执行消息;以及在所述区块之前产生的所有区块均被所述节点判定为不可逆区块。

8.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:所述主节点将所述写操作所在的区块的高度发送至所述应用程序,以便于所述应用程序根据所述写操作所在的区块的高度,确定所述数据同步的状态。

9.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:当所述至少一个主节点包括一个主节点时,当在一定时间间隔存在所述至少一条数据变更日志或所述数据变更日志达到一定数量时,所述主节点产生所述区块;或当所述至少一个主节点包括多个主节点时,所述多个主节点轮流出块,以产生所述区块。

10.根据权利要求1至7中任一项所述的方法,其特征在于,所述执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作,包括:根据区块顺序执行每个区块中的数据变更操作;

根据所述区块中的数据变更日志顺序执行每个区块中的数据变更操作;或对多个互不相关的数据变更操作同时并发执行。

11.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:所述主节点广播所述区块的同时还广播与所述区块中的所述至少一条数据变更日志对应的至少一个验证数据,其中所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作,包括:所述至少一个同步节点对所述至少一个验证数据进行验证;以及当所述至少一个验证数据验证通过后,所述至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作。

12.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:验证所述至少一个同步节点在执行完成所述区块中的所述至少一个数据变更操作后的数据是否一致;以及当所述至少一个同步节点在执行完成所述区块中的所述至少一个数据变更操作后的数据不一致时,根据预设策略去除数据不一致的节点。

13.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:当有新节点加入时,所述新节点按顺序读取所有区块中的所有数据变更日志,并执行与所述所有数据变更日志对应的数据变更操作。

14.根据权利要求1至7中任一项所述的方法,其特征在于,当前产生的区块中包括前一个区块的数字摘要。

15.根据权利要求1至7中任一项所述的方法,其特征在于,还包括:将所述多节点所在的区块链分叉为至少两条子链,以便于所述主节点将与所述写操作对应的数据变更日志按类别打包到对应子链的区块中。

16.一种多节点数据同步的方法,其特征在于,包括:向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中;

向所述多节点中的至少一个节点查询所述区块的操作状态;以及根据所述区块的操作状态,确定数据同步的状态。

17.根据权利要求16所述的方法,其特征在于,还包括:接收所述主节点发送的所述写操作所在的区块的高度,

其中,所述根据所述区块的操作状态,确定数据同步的状态,包括:比较确认区块高度与所述写操作所在区块的高度的大小;以及当所述写操作所在的区块的高度小于或等于所述确认区块高度时,判定为所述写操作成功写入,和/或比较不可逆区块高度与所述写操作所在区块的高度的大小;以及当所述写操作所在的区块的高度小于或等于所述不可逆区块高度时,可向多节点中的至少一个同步节点查询所述写操作完成后的数据状态。

18.一种多节点数据同步的装置,其特征在于,包括:主节点的操作接收模块,配置为所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作;

主节点操作模块,配置为所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名;

区块广播模块,配置为在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点;

数据同步模块,配置为所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作;以及区块操作状态确定模块,配置为所述多节点中的至少一个节点确定所述区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。

19.一种多节点数据同步的装置,其特征在于,包括:操作提交模块,配置为向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中;

状态查询模块,配置为向所述多节点中的至少一个节点查询所述区块的操作状态;以及数据同步的状态确定模块,配置为根据所述区块的操作状态,确定数据同步的状态。

20.一种计算机设备,包括存储器、处理器以及存储在所述存储器上被所述处理器执行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至17中任一项所述的多节点数据同步的方法。

21.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1至17中的任一项所述的多节点数据同步的方法。

说明书 :

多节点数据同步的方法和装置,以及计算机设备

技术领域

[0001] 本发明涉及区块链开发技术领域,具体涉及一种多节点数据同步的方法和装置,以及计算机设备。

背景技术

[0002] 传统数据库集群或分布式存储系统在数据同步时存在数据可靠性和写操作的同步性能的矛盾,原因在于,如果应用程序等待多节点都同步后才算完成写操作,则写操作的同步性能过低,如果多节点中的一个节点保存后就同步,当数据还没同步到其它节点时该节点就出现故障,则导致数据丢失,会使数据可靠性降低,所以如果想保证数据可靠性,就需要等待多节点之间同步完成,导致数据写入性能过低。当各节点数据库都在同机房时这个矛盾相对不是很突出,可以利用高速局域网,既可以得到较好的写操作的同步性能,又能够保证数据不丢失,而且在同一机房的多节点数据库都归同一个所有者所有,可以与外网隔离,有较好的物理防护和防火墙等安全防护措施,对多节点数据的同步方案可以不考虑节点作恶的问题。
[0003] 但当各节点位于距离遥远的不同地域、相互之间通过广域网来连接时,以上问题就非常突出了。由于节点之间同步性能过慢,每次写操作都等待足够多节点完成同步才返回应用的话,写操作的同步性能过于低下,而且各节点分布在不同地域,给每个节点都增加安保人员、物理防护和防火墙等安全防护措施的成本过于高昂,甚至不同节点都可能归属不同的所有者,存在节点主动作恶或被黑客掌控后作恶的风险。在这种情况下,传统的多节点数据同步方案就不再适用。
[0004] 传统方式下应用程序不了解各节点的同步状态,当写完再读时,可能会因为写操作和读操作被分配到不同节点上,而执行读操作的节点还没完成对写操作的同步,从而出现读到的数据是写之前的旧数据的情况。

发明内容

[0005] 有鉴于此,本发明实施例致力于提供一种多节点数据同步的方法和装置,以及计算机设备,通过主节点将与应用程序提交的写操作对应的至少一条数据变更日志打包到区块中,并将该区块广播至多节点中的其它节点,然后多节点中的同步节点对数据进行同步,多节点中的至少一个节点确定出该区块的操作状态,最后应用程序在数据同步过程中向至少一个节点查询该区块的操作状态,并根据该区块的操作状态确定数据同步的状态,从而实现应用程序在数据同步的过程中对数据同步的状态的追踪,从而让应用程序可以自行在写操作的同步性能和数据可靠性中进行平衡,并解决数据不一致的问题。例如,应用程序可以在一系列写操作时不等每一次写操作确认就继续进行下一步骤,在最后再确认所有写操作是否都全部确认(即每个写操作都同步到足够多数量的节点),如果因为某个节点故障导致某个写操作不成功时,可以重新提交该次写操作,直到所有写操作都彻底完成,这样可以兼顾写操作的同步性能和数据可靠性。另外,应用程序也可以了解写操作的执行状态,知道在哪个节点可以读到写操作执行完之后的数据,以及什么时候可以在所有同步节点都能读到写完后的数据。
[0006] 根据本发明实施例的第一方面,提供一种多节点数据同步的方法,包括:所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作;所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名;在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点;所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作;以及所述多节点中的至少一个节点确定所述区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。
[0007] 根据本发明实施例的第二方面,提供一种多节点数据同步的方法,包括:向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中;向所述多节点中的至少一个节点查询所述区块的操作状态;以及根据所述区块的操作状态,确定数据同步的状态。
[0008] 根据本发明实施例的第三方面,提供一种多节点数据同步的装置,包括:主节点的操作接收模块,配置为所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作;主节点操作模块,配置为所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名;区块广播模块,配置为在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点;数据同步模块,配置为所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作;以及区块操作状态确定模块,配置为所述多节点中的至少一个节点确定所述区块的操作状态以便所述应用程序根据所述区块的操作状态,确定数据同步的状态。
[0009] 根据本发明实施例的第四方面,提供一种多节点数据同步的装置,包括:应用程序提交模块,配置为应用程序向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中;应用程序查询模块,配置为所述应用程序向所述多节点中的至少一个节点查询所述区块的操作状态;以及数据同步的状态确定模块,配置为所述应用程序根据所述区块的操作状态,确定数据同步的状态。
[0010] 根据本发明实施例的第五方面,提供一种计算机设备,包括存储器、处理器以及存储在所述存储器上被所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的多节点数据同步的方法。
[0011] 根据本发明实施例的第六方面,提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述可执行指令被处理器执行时实现如上所述的多节点数据同步的方法。
[0012] 本发明的实施例所提供的一种多节点数据同步的方法,通过主节点将与应用程序提交的写操作对应的至少一条数据变更日志打包到区块中,并将该区块广播至多节点中的其它节点,然后多节点中的同步节点对数据进行同步,多节点中的至少一个节点确定出该区块的操作状态,最后应用程序在数据同步过程中向至少一个节点查询该区块的操作状态,并根据该区块的操作状态确定数据同步的状态,从而实现应用程序在数据同步的过程中对数据同步的状态的追踪,例如,当应用程序的写操作出现故障时,可以及时重写该写操作;和/或,当数据同步的过程中各节点的数据同步进度不一时,大体知道每个节点的同步进度。

附图说明

[0013] 图1所示为本发明一个实施例提供的多节点数据同步的方法的流程示意图。
[0014] 图2所示为本发明另一个实施例提供的多节点数据同步的方法的流程示意图。
[0015] 图3所示为本发明一个实施例提供的多节点数据同步的装置的框图。
[0016] 图4所示为本发明另一个实施例提供的多节点数据同步的装置的框图。
[0017] 图5所示为本发明又一个实施例提供的多节点数据同步的装置的框图。

具体实施方式

[0018] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0019] 图1所示为本发明一个实施例提供的多节点数据同步的方法的流程示意图。如图1所示,该方法包括:
[0020] S101:所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作。
[0021] 应当理解,多节点可以是区块链中的节点,也可以是DAG(Directed Acyclic Graph,有向无环图)等广义区块链中的节点,还可以是公链,还可以是联盟链,还可以是私链,本发明实施例对此并不做限定。在数据同步的过程中,写操作的个数可以有很多个,本发明实施例并不限定写操作的具体个数,在同一出块周期中,可以有多个应用程序提交写操作给同一主节点,每个应用程序在同一出块周期可以有多个写操作提交给主节点,一个写操作可以对应一个或多个数据变更操作,本发明实施例对此并不做限定。
[0022] 具体地,当应用程序写操作时(包括但不限于写数据库),应用程序可以将该写操作提交给主节点,以使主节点的数据库(或其它数据存储形式)产生数据的变更,相应地也会产生与写操作对应的数据变更日志。
[0023] 在本发明一实施例中,数据变更日志所记录的操作可以是新增数据,可以是删除已有数据,也可以是更改已有数据,或者其它对数据进行变更的操作。
[0024] S102:所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名。
[0025] 应当理解,多节点可以包括至少一个主节点。当至少一个主节点的个数为多个时,在每一个出块周期中多个主节点又包括一个产生区块的主节点,和除产生区块的主节点以外的其它主节点,即在不同出块周期中,区块由不同的主节点产生,不同的主节点产生区块的时间是不同。当基于DAG时,每一个出块周期可以有多个主节点同时出块。当至少一个主节点的个数为一个时,不管在哪一个出块周期中,区块均由一个主节点产生。
[0026] 具体地,所述主节点将与写操作对应的数据变更日志打包到所述区块中,并对该区块进行签名以实现对所述区块的身份的确认。需要说明的是,区块只有经历了有出块权的主节点签名的步骤后,这个区块才算真正的产生,即签名后的区块才可以加入到区块链中,以告知区块链中的其它节点该区块是不可替代和不可篡改的。
[0027] 在一个实施例中,主节点对所述区块的签名是用主节点的私玥对所述区块的数字摘要进行加密,是对区块信息的广播者广播信息真实性的一个有效证明。
[0028] 需要说明的是,本发明实施例并不限定数据的具体存储形式,可以是主节点数据库中的数据,也可以是主节点文件中的数据,还可以是内存中的数据和非文件系统的数据。同时,本发明实施例也并不限定打包到区块中的数据变更日志的条数,优选地,打包到区块中的数据变更日志就是与写操作对应的所有数据变更日志,这样才可以完成整个数据同步的过程,避免出现某个数据得不到同步的情况。同时,本发明实施例并不限定至少一个主节点的具体个数。
[0029] S103:在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点。
[0030] 应当理解,多节点还可以包括非同步节点和同步节点,同步节点的作用是为了接收主节点广播的区块后执行对数据的变更操作从而实现数据同步,而非同步节点不执行对数据的变更操作,但是接收并保存主节点广播的区块从而保存所有对数据进行变更的操作的记录,从而保证该操作不会丢失,在极端情况下即使所有同步节点都出现了故障也可以利用非同步节点保存的所有区块信息重新执行所有的数据变更操作从而恢复数据的状态。所述多节点还可以包括从节点,即非主节点的其它节点。主节点和同步节点之间没有必然关系,主节点可以是同步节点也可以是非同步节点,从节点可以是同步节点也可以是非同步节点,本发明实施例对此并不做限定。
[0031] 本发明一实施例中,除产生区块的主节点以外的其它的所有节点均可以接收主节点广播的区块,也就是说,区块可以广播给同步节点,也可以广播给非同步节点,但是需要说明的是,本发明实施例并不限定将区块广播给何种类型的节点。
[0032] 具体地,当至少一个主节点的个数为一个时,该主节点对所述区块完成签名后,可以将该区块广播给至少一个从节点;当至少一个主节点的个数为多个时,产生区块的主节点对所述区块完成签名后,可以将该区块广播给其它主节点,或者将该区块广播给其它主节点和至少一个从节点。需要说明的是,本发明实施例并不限定产生区块的主节点将该区块广播给哪种类型的同步节点,只要接收区块的同步节点可以完成数据不可篡改的同步即可。同时,本发明实施例也并不限定至少一个同步节点的具体个数。
[0033] 本发明实施例也不限定广播区块的方式,主节点广播区块可以看做为主节点广播信息的过程,即,可以是发送广播信息的一方直接发送给其它节点,也可以是发送广播信息后其它节点监听,也可以是发送广播信息给所有相邻节点,其相邻节点收到广播信息后再转发给自己的所有相邻节点,直到广播到所有节点,也可以是其它广播方式。
[0034] S104:所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作。
[0035] 具体地,当所述至少一个同步节点中的任意一个同步节点接收到所述区块后,该同步节点均可以读取打包到所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作,以完成数据的同步。
[0036] 需要说明的是,在接收到所述区块后,同步节点可以立刻读取打包到所述区块中的所述至少一条数据变更日志,但是本发明实施例对同步节点读取所述区块中的至少一条数据变更日志的时机并不做具体限定,同步节点也可以当超过预设数量的同步节点和非同步节点都接收到了该区块后,才读取所述区块中的至少一条数据变更日志,同步节点也可以经过预设时间后才读取所述区块中的至少一条数据变更日志,或者执行完上一个区块包含的所有数据变更操作,或者其它时机。
[0037] S105:所述多节点中的至少一个节点确定所述区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。
[0038] 应当理解,多节点中的至少一个节点可以确定该区块的操作状态,该区块的操作状态可以指该区块的接收状态(确认区块),也可以指该区块的执行状态(不可逆区块)等,本发明实施例对该区块的操作状态并不做具体限定。
[0039] 需要说明的是,本发明实施例对可以确定所述区块的操作状态的节点的个数并不作具体限定,同时,本发明实施例对可以确定所述区块的操作状态的节点的类型并不作具体限定,其可以是多节点中的任意一种类型的节点。
[0040] 在本发明的另一个实施例中,所述多节点中的除所述主节点外的每个节点在接收所述区块后,将确认接收消息广播到所述多节点中的其它节点,其中所述确认接收消息中包括所述节点的确认接收签名。
[0041] 应当理解,所述确认接收消息中包括所述节点对所述区块的确认接收签名以表示所述节点接收到了所述区块,该确认接收签名记录在确认接收消息中。该节点将该确认接收消息广播给其它的全部节点,以广播告知其它的全部节点自己已经接收到了主节点广播的区块。所述确认接收签名就是为了告知其它的全部节点该确认接收消息是可信任的,不可篡改的。
[0042] 在本发明一实施例中,确认接收签名为所述节点用自己的私玥对所签名的区块的数字摘要进行加密的结果。
[0043] 在本发明一实施例中,由于区块是由主节点产生的,因此,产生区块的主节点是不必广播确认接收消息的,即本发明实施例中的广播确认接收消息的节点为除产生区块的主节点以外的任意一个节点;同时,由于每个节点在接收到所述区块后,都需要广播确认接收消息来广播告知其它节点自己已经接收到了所述区块,因此,实际上,除产生区块的主节点以外的每个节点都是确认接收消息的广播者,所有节点都是接收者。
[0044] 本发明实施例也不限定广播确认接收消息的方式,可以是发送确认接收信息的一方直接发送给其它节点,也可以是发送确认接收信息后其它节点监听,也可以是发送确认接收信息给所有相邻节点,其相邻节点收到确认接收信息后再转发给自己的所有相邻节点,直到广播到所有节点,也可以是其它广播方式。
[0045] 在本发明的另一个实施例中,所述多节点中的至少一个节点确定所述区块的操作状态包括:当所述至少一个节点中的一个节点满足第二预设条件时,所述节点将所述区块判定为确认区块,并将高度最高的确认区块的高度判定为确认区块高度。
[0046] 需要说明的是,每一个节点均可以将区块判定为确认区块,只要该节点满足第二预设条件即可,本发明实施例对可以判定确认区块的节点的个数并不作具体限定。
[0047] 具体地,当该区块被判定为确认区块时,该确认区块高度还可以被判定为高度最高的确认区块的高度。
[0048] 本发明一实施例中,区块中的数据变更操作可能会因为该产生区块的主节点的故障而丢失,而当足够多的节点都已经接收了该区块,即该区块被确认为确认区块时,因为足够多的节点均记录了该数据变更操作,所以即使产生该区块的主节点出现故障,确认区块中的该数据变更操作也不会丢失,这种情况下数据变更操作就算是真正完成了(即数据变更操作生效)。
[0049] 在本发明一实施例中,并不是数据变更操作生效后就代表数据表更操作是有效的,只有当与生效后的数据变更操作对应的验证数据验证通过后,才可以执行生效后的数据变更操作,此时才代表该生效后的数据变更操作是有效的。
[0050] 在本发明的另一个实施例中,所述第二预设条件包括:所述节点接收到除所述主节点外的所述多节点中的预设数量的节点广播的所述确认接收消息;以及在所述区块之前产生的所有区块均被所述节点判定为确认区块。
[0051] 应当理解,所述第二预设条件包括两个条件,其一是该节点已经接收到了除所述主节点外的所述多节点中的预设数量的节点分别广播的确认接收消息,这表示预设数量的节点均已经接收到了该区块,需要说明的是,该节点可以指多节点中的任意一个节点;其二是在所述区块之前产生的所有区块均被所述节点判定为确认区块,这表示在该区块和该区块之前产生的所有区块均被连续确认为确认区块,高度最高的被判定为确认区块的高度称为确认区块高度,所有不超过确认区块高度的区块中的所有数据变更操作均已生效。
[0052] 需要说明的是,预设数量可以是一个固定数字,也可以是根据预设规则计算出来的动态数字,不管是哪种数字,该预设数量可能与当前在线的节点数量有关。例如,预设数量的同步节点的个数可以为所有在线节点数的三分之二,也可以为二分之一加一。需要说明的是,本发明实施例并不限定预设数量的节点的个数,只要预设数量的节点的个数足够多即可,目的是保证足够多的节点均记录了所有数据变更操作。
[0053] 在本发明的另一个实施例中,所述方法还包括:在所述至少一个同步节点中的一个同步节点执行完成所述区块中的所述至少一个数据变更操作后,将确认执行消息广播到所述多节点中的其它节点,其中所述确认执行消息中包括所述同步节点的确认执行签名。
[0054] 应当理解,所述确认执行消息中包括所述同步节点对所述区块的确认执行签名以表示所述同步节点执行完成了所述区块中的所有数据变更操作,该确认执行签名记录在确认执行消息中。同步节点将该确认执行消息广播给其它的全部节点,以广播告知其它的全部节点自己已经执行完成所述区块中的所有数据变更操作。所述确认执行签名就是为了告知其它的全部节点该确认执行消息是可信任的,不可篡改的。
[0055] 需要说明的是,本发明实施例并不限定广播确认执行消息的同步节点的主从类型,其可以是包括产生区块的主节点在内的任意一个同步节点(例如任意主节点或从节点),只要该同步节点执行了区块中的数据变更操作,那该同步节点就可以广播确认执行消息;同时,由于每个同步节点在执行完成一个区块中的数据变更操作后,都需要广播确认执行消息来广播告知其它节点自己已经执行完成所述区块中的所有数据变更操作,因此,实际上,每个同步节点都是确认执行消息的广播者和接收者。
[0056] 本发明实施例也不限定广播确认执行消息的方式,可以是发送确认执行信息的一方直接发送给其它节点,也可以是发送确认执行信息后其它节点监听,也可以是发送确认执行信息给所有相邻节点,其相邻节点收到确认执行信息后再转发给自己的所有相邻节点,直到广播到所有节点,也可以是其它广播方式。
[0057] 在本发明的另一个实施例中,所述多节点中的至少一个节点确定所述区块的操作状态包括:当所述至少一个节点中的一个节点满足第一预设条件时,所述节点将所述区块判定为不可逆区块,并将高度最高的不可逆区块的高度判定为所述不可逆区块高度。
[0058] 需要说明的是,每一个节点均可以将区块判定为不可逆区块,只要该节点满足第一预设条件即可,本发明实施例对可以判定不可逆区块的节点的个数并不作具体限定。此时为了节省存储空间,还可以丢弃与所述区块中的所述至少一条数据变更日志对应的所述至少一个验证数据,也就是说,该区块中的数据变更操作不再需要验证数据来证明其数据变更操作的合法性,但是本发明实施例并不限定验证数据是否被丢弃,当该节点已经判定该区块为不可逆区块时,该区块中的验证数据也可以不被丢弃。
[0059] 本发明一实施例中,当该节点已经判定该区块为不可逆区块时,此时就表示可向所述任意一个同步节点查询所述写操作完成后的数据状态(除非该状态又被后续操作改变)。
[0060] 在本发明一实施例中,即使一个区块没有成为不可逆区块,只要该区块被某个同步节点执行了,该可以在该同步节点查询到该区块所记录的数据变更操作的执行结果。
[0061] 在本发明的另一个实施例中,所述第一预设条件包括:所述节点接收到所述多节点中的所有同步节点广播的所述确认执行消息;以及在所述区块之前产生的所有区块均被所述节点判定为不可逆区块。
[0062] 应当理解,所述第一预设条件包括两个条件,其一是该节点已经接收到了的所有同步节点分别广播给自己的确认执行消息,这表示所有同步节点均执行完成了该区块中记录的所有数据变更操作;其二是在所述区块之前产生的所有区块均被所述节点判定为不可逆区块,这表示每个同步节点均已完成了对之前接收到的所有的区块的数据同步,均可向每个同步节点查询到不可逆区块每一个写操作完成后的数据状态(除非被后续操作改变)。只有满足这两个条件,该节点才可以判定所述区块为不可逆区块。
[0063] 在本发明的另一个实施例中,该方法还包括:所述主节点将所述写操作所在的区块的高度发送至所述应用程序,以便于所述应用程序根据所述写操作所在的区块的高度,确定所述数据同步的状态。
[0064] 应当理解,所述应用程序在将写操作提交给主节点时,主节点也相应地会将该写操作所在的区块的高度告知于应用程序,也就是说,以区块为单位进行数据同步时,主节点可以向将写操作放在预设高度的区块上,并把预设高度发送给应用程序,以告知写操作所在的区块的高度,然后所述应用程序根据所述写操作所在的区块的高度,确定所述数据同步的状态。
[0065] 在本发明的另一个实施例中,当多个节点中的至少一个节点既满足第一预设条件,又满足第二预设条件时,所述节点既可以将所述区块判定为不可逆区块,并将高度最高的不可逆区块的高度判定为不可逆区块高度,所述节点又可以将所述区块判定为确认区块,并将高度最高的确认区块的高度判定为确认区块高度。
[0066] 在本发明的另一个实施例中,该方法还包括:当所述至少一个主节点包括一个主节点时,当在一定时间间隔存在所述至少一条数据变更日志或所述数据变更日志达到一定数量时,所述主节点产生所述区块;或当所述至少一个主节点包括多个主节点时,所述多个主节点轮流出块,以产生所述区块。
[0067] 应当理解,当所述至少一个主节点的数量仅为一个时,当所述主节点在一定时间间隔存在所述至少一条数据变更日志或所述数据变更日志达到一定数量时,所述主节点便产生了所述区块。需要说明的是,此时,所述主节点是在持续不断地产生区块,只要在一定时间间隔存在所述至少一条数据变更日志或所述数据变更日志达到一定数量时所述主节点就会产生一个新区块,以此类推,实现持续不断的出块。需要说明的是,本发明实施例并不限定在一定时间间隔内存在的数据变更日志的条数为多少条时才由主节点产生一个新区块。
[0068] 本发明一实施例中,当所述至少一个主节点数量为多个时,需要判断哪个主节点有权出块,但是本发明实施了并不限定判断哪个主节点有权出块的具体策略,其可以轮流出块,可以进行投票来选择此时出块的主节点,也可以其它方式来选择此时出块的主节点。不管是采取哪种策略来选择出块的主节点,有出块权的主节点有尚未打包到区块中的数据变更日志就可以出块,如果轮到出块的主节点没有尚未打包的数据变更日志就不出块或出空块。
[0069] 在本发明的另一个实施例中,所述执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作,包括:根据区块顺序执行每个区块中的数据变更操作;根据所述区块中的数据变更日志顺序执行每个区块中的数据变更操作;或对多个互不相关的数据变更操作同时并发执行。
[0070] 需要说明的是,本发明实施例并不限定所述同步节点执行每个区块中的数据变更操作的顺序,所述同步节点可以根据所述主节点广播的区块顺序来依次执行每个区块中的数据变更操作,也可以根据所述主节点打包到每个区块中的数据变更日志顺序来依次执行每个区块中的数据变更操作,还可以将每个区块或者多个区块中的多个互不相关的数据变更操作同时并发来执行。
[0071] 本发明一实施例中,不管所述至少一个主节点的个数为多少个,区块都是在持续不断地产生,因此,每个区块产生的时间是不同的,产生区块的主节点将每一个区块广播给同步节点的时间也是不同的,有的区块会先广播给同步节点,有的区块会后广播给同步节点,那么区块顺序就是指产生区块的节点广播区块的先后顺序;同时,产生区块的主节点在产生区块后会将数据变更日志打包到该区块中,产生区块的主节点打包每一条数据变更日志的时间是不同的,有的数据变更日志会先打包到区块中,有的数据变更日志会后打包到区块中,那么每个区块中的数据变更日志顺序就是指产生区块的主节点打包到区块中的数据变更日志的先后顺序。
[0072] 本发明一实施例中,互不相关的数据变更操作就是指当互不相关的数据变更操作被同时执行时,并不会对执行后的数据状态产生任何影响,例如对不同的数据进行的变更操作就可以同时并发执行。在同一区块中有可能会存在互不相关的数据变更操作,同时,在不同的区块中也有可能会存在互不相关的数据变更操作。当存在互不相关的数据变更操作时,本发明实施例并不限定同步节点必须要按照以上提到的区块顺序或者数据变更日志顺序来执行相应的数据变更操作,所述同步节点也可以对不同区块中的互不相关的数据变更操作或者同一区块中的互不相关的数据变更操作同时并发执行。
[0073] 在本发明的另一个实施例中,该方法还包括:所述主节点广播所述区块的同时还广播与所述区块中的所述至少一条数据变更日志对应的至少一个验证数据。
[0074] 具体地,产生区块的主节点在广播区块的同时,还可以向其它的同步节点广播与数据变更操作对应的验证数据。
[0075] 需要说明的是,本发明实施例并不限定一个区块中的验证数据的个数,一个验证数据可以对应一条数据变更日志,一个验证数据也可以对应多条数据变更日志,也可以有的数据变更日志没有对应的验证数据。
[0076] 本发明一实施例中,验证数据是由有权进行该数据变更操作的所有者授权得到的,携带有经过所有者授权得到的验证数据的数据变更操作是可信任的和不可篡改的。由于所有数据变更操作都有验证数据来证明其合法性,如果有节点作恶擅自进行没有验证数据支持的数据变更操作的话则会留下永久证据,可供安全审计用,甚至可能当场被剔除整个网络。特别地,由于数据变更操作附上验证数据,证明相关数据的所有者授权进行该数据变更操作(例如转账给别人的),这样相关节点就不能擅自篡改数据(否则大多数节点都会拒绝执行),甚至也不能擅自丢弃数据变更操作(否则提交该次数据变更操作的应用程序在区块链上查不到相应操作,可以自动举报该节点作恶,以该节点收到验证数据的签名回执为证据)。
[0077] 在本发明的另一个实施例中,所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作,包括:所述至少一个同步节点对所述至少一个验证数据进行验证;以及当所述至少一个验证数据验证通过后,所述至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作。
[0078] 具体地,在所述同步节点接收产生区块的主节点广播的所述区块和与所述至少一条数据变更日志对应的至少一个验证数据后,所述同步节点可以对所述至少一个验证数据进行验证。当所述至少一个验证数据被所述同步节点验证通过后,所述同步节点才可以读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作;当所述至少一个验证数据未被所述同步节点验证通过,所述同步节点不可以执行所述区块中的所述至少一条数据变更操作,由于该数据变更操作未经有权进行该数据变更操作的主体授权,则存在恶意篡改的可能。
[0079] 在本发明的另一个实施例中,所述方法还包括:验证所述至少一个同步节点在执行完成所述区块中的所述至少一个数据变更操作后的数据是否一致;以及当所述至少一个同步节点在执行完成所述区块中的所述至少一个数据变更操作后的数据不一致时,根据预设策略去除数据不一致的节点。
[0080] 需要说明的是,每个同步节点在执行完成一个区块中的所有数据变更操作后,该同步节点就已经完成了对所述区块的数据同步,那么为了保证各个同步节点同步的数据的一致性,最好能对各个同步节点中的数据同步后的数据进行验证,本发明实施例并不限定是由谁来发起验证数据一致性的操作,可以是计算机代码进行验证,也可以是人工进行验证。具体验证方法可以是将所有数据都用Merkle树保存,比较不同节点在执行完相同区块后的根节点Hash值就可以判断,也可以对所有数据都计算数值摘要,或者其它的方式。
[0081] 本发明一实施例中,当所述至少一个同步节点在执行完成所述区块中的所述至少一个数据变更操作后的数据出现不一致时,可以根据预设策略去除数据不一致的节点。需要说明的是,预设策略可以为以大多数同步节点同步的数据为准,也可以采用拜占庭共识等,本发明实施例对此并不作限定。
[0082] 需要说明的是,本发明实施例并不限定数据不一致的节的个数,可以为一个,也可以为两个或多个。在本发明一实施例中,当数据不一致的节点的个数大于等于一个预设数量时,则暂停提供系统服务,等待人工处理,本发明实施例也并不限定数据不一致的节点的个数超过多少时暂停提供系统服务,可以是三分之二,也可以是四分之三,同时本发明实施例并不限定是由谁来发起去除数据不一致的节点的操作,可以是计算机代码,也可以是人工。
[0083] 本发明一实施例中,当至少一个主节点的个数为一个时,也就是说多节点中仅有一个主节点和至少一个从节点,那么如果该数据不一致的节点包括该主节点时,则可以根据第二预设策略从所有从节点和/或加入的新节点中选举一个节点作为新的主节点,该新的主节点将继续担任主节点的所有职能,以完成数据的同步。当至少一个主节点的个数为多个时,也就是说多节点中有多个主节点和/或至少一个从节点,那么如果该数据不一致的节点包括多个主节点中的至少一个主节点时,则可以根据第二预设策略从所有从节点和/或加入的新节点中选举一个节点作为新的主节点,也可以不选举新的主节点,但是,不管有无主节点因数据不一致而被移除,都可以选举新的主节点,本发明实施例对新的主节点的选举时机并不作限定。
[0084] 还需要说明的是,本发明实施例也并不限定第二预设策略的具体实现形式,可以是竞选投票出票数最高的节点为新的主节点,也可以是将预先设定好的备选节点作为新的主节点,还可以是随机选择一个新的主节点,同时本发明实施例并不限定是由谁发起第二预设策略来进行主节点的选择,可以是计算机代码,也可以是人工。
[0085] 在本发明的另一个实施例中,所述方法还包括:当有新节点加入时,所述新节点按顺序读取所有区块中的所有数据变更日志,并执行与所述所有数据变更日志对应的数据变更操作。
[0086] 具体地,当有新节点加入到区块链中时,所述新节点可以读取由所述至少一个主节点产生的所有区块中的所有数据变更日志,并执行所述所有区块中的与所述所有数据变更日志对应的所有数据变更操作以完成数据的同步。
[0087] 本发明一实施例中,所述新节点可以根据所述区块顺序来依次执行每个区块中的数据变更操作,也可以根据所述主节点打包到每个区块中的数据变更日志顺序来依次执行每个区块中的数据变更操作,还可以将每个区块或者多个区块中的多个互不相关的数据变更操作同时并发来执行。
[0088] 在本发明的另一个实施例中,当前产生的区块中包括前一个区块的数字摘要。
[0089] 应当理解,假如主节点按时间的先后顺序产生的区块分别为第一区块、第二区块和第三区块,那么第二区块中包括第一区块中的数字摘要,第三区块中包括第二区块中的数字摘要,但第三区块并不直接包括第一区块的数字摘要。
[0090] 本发明一实施例中,数字摘要是将任意长度的消息变成固定长度的短消息,数字摘要类似于一个自变量式消息的函数(即Hash函数)。数字摘要采用单向Hash函数将需要加密的明文“摘要”成固定长度(例如128位)的密文,这一串密文又称为数字指纹,该密文有固定的长度,而且不同的明文“摘要”成密文,其结果总是不同的,而同样的明文所采用的摘要必定一致。
[0091] 在本发明的另一个实施例中,所述方法还包括:将所述多节点所在的区块链分叉为至少两条子链,以便于所述主节点将与所述写操作对应的数据变更日志按类别打包到对应子链的区块中。
[0092] 应当理解,当数据变更日志的个数较多时,可以将区块链分叉,以产生至少两条子链,换句话说,在特定区块高度N后,有至少两个N+1区块,每个N+1区块的上一个区块都是同一个区块(即高度为N的区块)。主节点可以把新产生的数据变更日志按类别打包到不同子链的N+1区块中,且每一条子链都包括区块链分叉之前产生的所有区块,这样每条子链所占用的存储空间不会过大,因此在有新节点加入时,新节点执行区块链分叉之前和分叉以后的所有区块时,所花费的时间可以维持在可接受的范围内。
[0093] 在一实施例中,所谓将新产生的数据变更日志按类别分别打包到不同区块中是指可以按用户来将新产生的数据变更日志分别打包到不同区块中,即,不同用户的数据是互不相关的,根据用户编号对某一批用户的数据进行变更的操作日志打包到某个子链中,对另一批用户的数据进行变更的操作日志打包到另一个子链中。
[0094] 在一实施例中,所述至少两条子链中的每条子链还可以根据需求继续分叉,以此类推,将区块链不断的分叉,且每次分叉获得的子链中都包括分叉之前产生的所有区块。
[0095] 但是需要说明的是,本发明实施例并不限定将区块链分叉为多少条子链,本领域技术人员可以根据实际需求来设定。
[0096] 图2所示为本发明另一个实施例提供的多节点数据同步的方法的流程示意图。图2所述的方法由用户设备上的应用程序来执行,但本申请实施例不以此为限。如图2所示,该方法包括:
[0097] S201:向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中。
[0098] S202:向所述多节点中的至少一个节点查询所述区块的操作状态。
[0099] S203:根据所述区块的操作状态,确定数据同步的状态。
[0100] 应当理解,可以以区块为单位进行数据同步,应用程序可以根据区块的操作状态(区块的接收状态和/或区块的执行状态),确定数据同步的状态,即,在数据同步的过程中自己均衡数据可靠性和写操作的同步性能之间的矛盾,且可以在各节点的数据同步进度不一时,大体知道每个节点的同步进度。
[0101] 具体地,当所述多节点中的至少一个节点确定了所述区块的操作状态后,应用程序可以向多节点中的至少一个节点查询该区块的操作状态,在应用程序查询到该区块的操作状态后,该应用程序可以根据该区块的操作状态确定出数据同步的过程中的数据同步的状态。
[0102] 本发明一实施例中,应用程序可以根据区块的接收状态来确定数据同步的状态,例如,由于数据同步的过程中会包含多个写操作,这样应用程序的多个写操作只需要完成最后一次写操作后等待所有写操作都被确认(例如该写操作所在区块成为确认区块),而不用每个写操作都等待被确认后再进行下一步操作。当应用程序发现写操作的过程出现故障,则可以重新进行未完成的写操作,这样可以均衡数据可靠性和写操作的同步性能之间的矛盾。应用程序也可以根据区块的执行状态来确定数据同步的状态,例如,应用程序通过区块的执行状态可以清晰地了解到各节点之间的数据同步状态,从而知道写操作所改变的数据在哪个节点可以查询到,以解决在各节点的数据同步进度不一时,以哪个节点同步的数据为准的问题。
[0103] 因此,不管数据同步在任何一种网络下进行,都可以在各节点的数据同步进度不一时,知道以哪个节点同步的数据为准,且可以均衡数据库集群存在的数据可靠性和写操作的同步性能之间的矛盾。
[0104] 但是需要说明的是,应用程序当然也可以根据自己的需求来自主选择其它的方案,只要可以实现均衡数据库集群存在的数据可靠性和写操作的同步性能的之间矛盾或在各节点的数据同步进度不一时,知道以哪个节点同步的数据为准即可。
[0105] 在本发明的另一个实施例中,所述方法还包括:接收所述主节点发送的所述写操作所在的区块的高度。
[0106] 在本发明的另一个实施例中,所述根据所述区块的操作状态,确定数据同步的状态,包括:比较确认区块高度与所述写操作所在区块的高度的大小;以及当所述写操作所在的区块的高度小于或等于确认区块高度时,判定为所述写操作成功写入。
[0107] 应当理解,当所述写操作所在的区块的高度小于或等于确认区块高度时,这表示写操作写入成功。由于本发明向应用程序开放当前区块同步的高度(即确认区块的高度),应用程序可以比较确认区块高度与所述写操作所在区块高度的大小,因此,多个写操作只需要等待一次来判断写操作是否写入成功,而不用使每个写操作都等待数据同步完成后再判断写操作是否写入成功,从而均衡数据库集群存在的数据可靠性和写操作的同步性能之间的矛盾。
[0108] 然而,需要说明的是,应用程序也可以对一批数据写完后,再等待相关区块都成为确认区块即可算写操作写入成功(实际上,只需判断包含该写操作的各区块中的区块高度最高的区块为确认区块即可算写入成功),这样对写操作的同步性能影响较小。
[0109] 在本发明的另一个实施例中,所述根据所述区块的操作状态,确定数据同步的状态,包括:比较不可逆区块高度与所述写操作所在区块的高度的大小;以及当所述写操作所在的区块的高度小于或等于不可逆区块高度时,可向所述至少一个同步节点查询所述写操作完成后的数据状态。
[0110] 应当理解,当所述写操作所在的区块的高度小于或等于不可逆区块高度时,这表示可向所述至少一个同步节点查询所述写操作完成后的数据状态。由于本发明技术方案可以向应用程序开放当前区块同步的高度(即不可逆区块的高度),应用程序可以比较不可逆区块高度与所述写操作所在区块的高度的大小,应用程序通每个区块中的数据变更操作的执行状态可以清晰地了解到各节点之间的数据同步状态,以解决在各节点的数据同步进度不一时,以哪个节点同步的数据为准的问题。
[0111] 需要说明的是,本发明实施例并不限定为了解决在各节点的数据同步进度不一时,以哪个节点同步的数据为准的问题,一般来说以执行区块高度(即小于等于该高度的所有区块中记录的数据变更操作都被该节点所执行了)最高的节点为准,因为其数据是最新的,但也可以用任何一个执行高度超过了所关注的写操作所在的区块高度的节点,也可以其它的方式。
[0112] 在本发明的另一个实施例中,所述根据所述区块的操作状态,确定数据同步的状态,包括:比较所述写操作所在区块的高度与不可逆区块高度和确认区块高度的大小;以及当所述写操作所在的区块的高度小于或等于不可逆区块高度和所述确认区块高度时,可向所述至少一个同步节点查询所述写操作完成后的数据状态,且判定为所述写操作成功写入。
[0113] 综上,不管数据同步在任何一种网络下进行,都可以在各节点的数据同步进度不一时,知道以哪个节点同步的数据为准,且可以均衡数据库集群存在的数据可靠性和写操作的同步性能之间的矛盾。
[0114] 图3所示为本发明一个实施例提供的多节点数据同步的装置的框图。如图3所示,该装置300包括:
[0115] 主节点的操作接收模块310,配置为所述多节点中的至少一个主节点中的一个主节点接收到应用程序提交的写操作。
[0116] 主节点操作模块320,配置为所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中,并对所述区块进行签名。
[0117] 区块广播模块330,配置为在对所述区块进行签名后,所述主节点将所述区块广播至所述多节点中的其它节点。
[0118] 数据同步模块340,配置为所述多节点中的至少一个同步节点读取所述区块中的所述至少一条数据变更日志,并执行所述区块中的与所述至少一条数据变更日志对应的至少一个数据变更操作。
[0119] 区块操作状态确定模块350,配置为所述多节点中的至少一个节点确定所述区块的操作状态,以便于所述应用程序根据所述区块的操作状态,确定数据同步的状态。
[0120] 上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0121] 图4所示为本发明另一个实施例提供的多节点数据同步的装置的框图。如图4所示,该装置400包括:
[0122] 操作提交模块410,配置为向所述多节点中的至少一个主节点中的一个主节点提交写操作,以便于所述主节点将所述写操作对应的至少一条数据变更日志打包到由所述主节点产生的区块中。
[0123] 状态查询模块420,配置为向所述多节点中的至少一个节点查询所述区块的操作状态。
[0124] 数据同步的状态确定模块430,配置为根据所述区块的操作状态,确定数据同步的状态。
[0125] 上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0126] 图5所示为本发明又一个实施例提供的多节点数据同步的装置500的框图。
[0127] 参照图5,装置500包括处理组件510,其进一步包括一个或多个处理器,以及由存储器520所代表的存储器资源,用于存储可由处理组件510的执行的指令,例如应用程序。存储器520中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件510被配置为执行指令,以执行上述任意实施例所述的多节点数据同步的方法。
[0128] 装置500还可以包括一个电源组件被配置为执行装置500的电源管理,一个有线或无线网络接口被配置为将装置500连接到网络,和一个输入输出(I/O)接口。装置500可以操作基于存储在存储器520的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
[0129] 一种非临时性计算机可读存储介质,当存储介质中的指令由上述装置500的处理器执行时,使得上述装置500能够执行如前任一实施例所述的多节点数据同步的方法。该计算机存储介质可以为任何有形媒介,例如软盘、CD-ROM、DVD、硬盘驱动器、甚至网络介质等。
[0130] 以上所述仅为本发明的较佳实施例而已,并不用以限定本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。