在区块链系统中切换分片节点的方法和装置与流程

文档序号:25721551发布日期:2021-07-02 21:05阅读:154来源:国知局
在区块链系统中切换分片节点的方法和装置与流程

本说明书实施例涉及区块链技术领域,更具体地,涉及在区块链系统中切换分片节点的方法和装置。



背景技术:

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有难以篡改、去中心化等特征。区块链技术在金融、公益、司法、交易等场景中,具有巨大的应用潜力。

目前限制区块链技术大规模落地应用的一个很重要因素是性能,主要包括吞吐量,吞吐量一般可以通过每秒交易笔数(transactionpersecond,简称tps)来度量。开发者们提出了各种各样的方案来尝试提升区块的吞吐量,这一过程称为“扩容”。区块链分片技术是一种用于对区块链进行扩容的方案。区块链分片的基本思路是将区块链网络中的节点分成若干个相对独立的子网络,每个子网络构成一个区块链,一个子网络也就是一个分片(shard)。通过多个分片的并行处理,可提升整个网络的吞吐量。

然而,目前分片技术的实现方案一方面难以满足实际应用中日益增长的需求,另一方面,由于现有的区块链分片技术通常应用与公链中,节点参与方的数量较多,在不受到恶意攻击的情况下基本不可能达到影响共识的故障节点数量,因此,很少涉及到对故障节点的恢复。



技术实现要素:

本说明书实施例旨在提供一种更有效的在包含分片的区块链系统中切换分片节点的方案,使得可以更快地进行故障节点的恢复。

为实现上述目的,本说明书一个方面提供一种在区块链系统中切换分片节点的方法,所述区块链系统包括第一分片和至少一个第二分片,所述第一分片包括第一节点,所述第一节点在所述第一分片中的节点故障之后切换为所述第一分片的节点,并存储有在所述切换之后获取的第一数据,所述方法应用于所述第一节点,包括:

从第二节点接收上线信息;

将所述第一数据同步给所述第二节点;

在同步结束之后,将同步结束信息分别发送给所述第二节点和各个所述第二分片,以使得所述第二节点替换所述第一节点成为所述第一分片的节点。

本说明书另一方面提供一种在区块链系统中切换分片节点的装置,所述区块链系统包括第一分片和至少一个第二分片,所述第一分片包括第一节点,所述第一节点在所述第一分片中的节点故障之后切换为所述第一分片的节点,并存储有在所述切换之后获取的第一数据,所述装置应用于所述第一节点,包括:

接收单元,用于从第二节点接收上线信息;

同步单元,用于将所述第一数据同步给所述第二节点;

发送单元,用于在同步结束之后,将同步结束信息分别发送给所述第二节点和各个所述第二分片,以使得所述第二节点替换所述第一节点成为所述第一分片的节点。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

在本说明书实施例中,分片中的性能较低的第一节点在性能较高的第二节点上线之后将执行区块过程中生成的状态信息同步给第二节点,使得第二节点不需要重复执行交易和跨分片子交易,从而可以更快地实现分片节点的状态恢复和切换。

附图说明

通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:

图1示出根据本说明书实施例的一种区块链系统的架构图;

图2示出区块链系统中的多个分片执行区块的过程示意图;

图3示出根据本说明书实施例的一种在区块链系统中切换分片节点的方法流程图;

图4示出根据本说明书实施例的切换分片节点的一种可能的过程示意图;

图5示出根据本说明书实施例的切换分片节点的一种可能的过程示意图;

图6示出根据本说明书实施例的一种在区块链系统中切换分片节点的装置架构图。

具体实施方式

下面将结合附图描述本说明书实施例。

本说明书实施例所提供的信息处理方法主要用于在区块链中进行故障节点的恢复,该方法可应用于包括分片的区块链系统。区块链分片技术是一种用于对区块链进行扩容的方案。区块链分片的基本思路是将区块链网络中的节点分成若干个相对独立的子网络,每个子网络构成一个区块链,一个子网络也就是一个分片(shard)。通过多个分片的并行处理,可提升整个网络的吞吐量。具体而言,分片技术根据不同的分片机制可以划分为三种:网络分片(networksharding),交易分片(transactionsharding),状态分片(statesharding)。网络分片是最基础的一种分片方式,包括将整个区块链网络划分成多个子网络,也就是多个分片。这样,区块链网络中的多个分片可以并行处理网络中不同的交易。交易分片是将交易按某种规则分配到不同分片,这样既能够达到并行处理的目的又能避免双花问题。交易分片的前提是先进行网络分片。状态分片的关键是将整个存储区分开,让不同的分片存储不同账户的状态,每个分片只负责存储归属于自己的一部分账户的世界状态,而不是存储区块链中全部账户的世界状态。状态分片能够解决存储能力瓶颈问题。下文中,将以包括多个分片的区块链系统为例描述本说明书实施例提供的信息处理方案。本说明书实施例提供的方案可应用于状态分片,可以理解,本说明书实施例的方案也可应用于其它类型的分片。

图1示出根据本说明书实施例的一种区块链系统的架构图。

如图1所示,区块链系统可以包括分片1,分片2和分片3(图1中未示出),其中,不同分片的互信的多个节点可以形成一个集合,该集合中可包括分别属于3个分片的3个分片节点,所述分片节点可以实现为任何具有计算、处理能力的装置、服务器或设备集群等。例如,区块链系统可以为联盟链系统,该系统中可以包括联盟方a,联盟方b,联盟方c和联盟方d,各个联盟方即为上述包括不同分片的互信的多个节点的集合。可以理解,图1仅是示例性的示出三个分片和四个联盟方,实际上区块链系统中可以包括任意数目的分片和联盟方。下文中将以联盟链系统为例进行描述,可以理解,本说明书实施例不限于应用于联盟链系统,而可以应用于任意区块链系统。

其中,从分片角度来说,分片节点1a,分片节点1b,分片节点1c和分片节点1d均属于分片1。分片节点2a,分片节点2b,分片节点2c和分片节点2d均属于分片2。分片节点3a,分片节点3b,分片节点3c和分片节点3d均属于分片3。同一分片中的节点可以搭建一条区块链,具体例如,分片1中的节点1a、1b和1c可以搭建一条区块链1,分片2中的节点2a、2b和2c可以搭建一条区块链2,分片3中的节点3a、3b和3c可以搭建一条区块链3。每个分片内部的各参与方节点之间进行共识。

从联盟方的角度来说,分片节点1a,分片节点2a和分片节点3a均属于联盟方a。分片节点1b,分片节点2b和分片节点3b均属于联盟方b。分片节点1c,分片节点2c和分片节点3c均属于联盟方c。分片节点1d,分片节点2d和分片节点3d均属于联盟方d。其中,属于相同联盟方的节点互为信任节点,可以通过联盟方内部的网络连接。

每个分片节点均连接有一个备用节点,备用节点和与其相连接的分片节点属于相同的分片以及相同的联盟方。例如,分片节点1a连接有备用节点1a,备用节点1a也属于分片1以及属于联盟方a。分片节点2b连接有备用节点2b,备用节点2b也属于分片2以及属于联盟方b。分片节点3c连接有备用节点3c,备用节点3c也属于分片3以及属于联盟方c,对其它备用节点以此类推。

在图1所示的区块链系统中,一个联盟方包括分别属于不同分片的多个节点,该多个节点例如可以通过联盟方的内网连接。当该系统中的一个分片需要向另一个分片发送跨分片子交易时,可以在一个联盟方的该两个分片的分片节点中进行跨分片通信,从而可提供较快的通信速度。另外,由于一个联盟方包括的节点之间相互信任,该跨分片通信过程中不需要进行身份验证,从而可以进一步提高该系统的处理效率。

可以理解,本说明书实施例提供的方案不限于用于图1所示的区块链系统,而是可以应用于任何包括分片的区块链系统中。

图2示出区块链系统中的多个分片执行区块的过程示意图。图2中以联盟方a中包括的各个分片节点代表各个分片为例进行描述,可以理解,图2所示的多个分片执行区块的过程不限于由一个联盟方中的多个节点执行,而可以由各个分片中的任意其他节点执行。

如图2所示,在对区块执行的过程中,分片节点1a~分片节点3a同时执行高度相同的各自所属的分片的区块。例如,分片节点1a执行高度为m的分片1的区块(即分片1区块m),同时,分片节点2a执行高度为m的分片2的区块(即分片2区块m),分片节点3a执行高度为m的分片3的区块(即分片3区块m)。

分片1~分片3同时执行高度相同的各自的区块,可以是为了保证包括跨片事务的交易在不同分片的子交易的执行结果的原子性。具体是,分片1、分片2和分片3首先分别开始执行各自的创世块(下文称为区块0),各个分片在分别共识之后存入各自的创世块,创世块中一般包括配置信息,如分片中包括的分片节点,各个分片节点的ip地址、端口号、各个分片节点的公钥列表,分片中的共识节点标识等等。在执行创世块之后,分片1、分片2和分片3开始执行各自的区块1。具体是,分片1、分片2和分片3在分别通过共识确定属于区块1的多个交易及该多个交易的执行顺序之后,分片1、分片2和分片3分别开始执行经共识的各自的区块1中的多个交易。其中,分片1在执行交易的过程中可能会产生了需由分片2执行的跨分片子交易。如果该交易对应于对事务的执行,分片1在确定该交易的跨分片子交易执行成功之后才能确定对应交易执行成功。相应地,分片1在确定发送给全部其他分片节点的跨分片子交易都执行成功了,才能确定对区块1中的多个交易执行成功。其中,在上文及之后的描述中,使用“交易”表示在分片中共识的属于区块的多个交易,使用“跨分片子交易”表示通过执行交易或跨分片子交易所产生的子交易。

类似地,分片节点2a和分片节点3a也会向联盟方a中的其他分片节点发送跨分片子交易,也同样地在确定发送给全部其他分片节点的跨分片子交易都执行成功了,才能确定其对应的分片的区块1中的多个交易执行成功。因此,为了保证各个分片的区块1中的事务型交易的执行正确性,分片节点1a~分片节点3a分别等待联盟方a中的全部分片节点都结束对跨分片子交易的执行,并且确定这些跨分片子交易都执行成功之后才开始进行如下操作:更新其所属分片的世界状态,即存储其所属分片的与区块1对应的世界状态,生成其所属分片的区块1(即区块1的区块体和区块头),并存储区块1,从而结束对其所属分片的区块1的执行,这样保证各个分片的区块1中的事务型交易包括的子交易的执行原子性。

分片节点1a~分片节点3a各自在确定全部分片节点都结束对区块1的执行之后,才各自开始对区块2的执行,依此类推,分片节点1a~分片节点3a各自在确定全部分片节点都结束对区块2的执行之后,才各自开始对区块3的执行。因此,分片节点1a~分片节点3a(即不同分片)之间对区块的执行是同步的,各个分片节点在同一时间具有同样的区块高度。

可以理解,虽然在图2中示出分片节点1a~分片节点3a同时执行高度相同的各自所属的分片的区块,本说明书实施例不限于此,本说明书实施例也可以与其他用于保证交易原子性的技术相结合,在该其他用于保证交易原子性的技术中,不同的分片有可能执行不同高度的区块,也即,分片节点1a~分片节点3a有可能在同一时间执行不同高度的区块。

从上述描述可以看出,在本说明书实施例提供的包括多个分片的区块链系统中,执行区块的过程包括以下顺序进行的多个步骤:各个分片基本同时通过共识确定属于同一高度的区块(例如区块m)的多个交易,各个分片分别执行各自的属于区块m的多个交易,执行来自其他分片的多个跨分片子交易,各个分片在确定各个分片都完成对跨分片子交易的执行、并且没有生成新的跨分片子交易之后,分别基于多个交易和多个跨分片子交易的执行结果对应的状态信息,更新世界状态,即存储与区块m对应的世界状态,生成区块m的区块体和区块头,并存储区块m。可以理解,在各个分片在执行属于区块m的多个交易的过程中都没有产生跨分片子交易的情况中,执行区块的过程将不包括上述执行跨分片子交易的过程。

具体是,如图2所示,以联盟方a中的各个分片节点执行区块m为例,在分片1、分片2和分片3分别通过共识确定属于各自的区块m的n个交易之后,分片节点1a、分片节点2a和分片节点3a分别开始执行对应分片的属于区块m的n个交易(如图2中标注“n”的矩形框所示,图2中,以同样的矩形框表示对交易或者跨分片子交易的执行过程),该对n个交易的执行过程可以视为在执行区块m过程中的第1轮交易执行过程。可以理解,图2中虽然示例示出分片节点1a、分片节点2a和分片节点3a在第1轮交易执行过程中分别执行属于分片1区块m、分片2区块m和分片3区块m的n个交易,本说明书实施例不限于此,分片1、分片2和分片3可分别设定属于分片1区块m、分片2区块m和分片3区块m的交易个数,该交易个数有可能是不等的。可以理解,分片1区块m表示分片1中高度为m的区块,分片2区块m表示分片2中高度为m的区块,以此类推,因此,分片1区块m、分片2区块m和分片3区块m表示不同的区块。

如图1中所示,联盟方a中还包括分片节点对应的备用节点,下文中以备用节点1a为例描述备用节点的操作,可以理解,图1中的备用节点2a和备用节点3a的操作可参考对备用节点1a的描述。备用节点1a与分片节点1a相对应,用于对分片节点1a在执行区块的过程中产生的数据进行备份,以用于在分片节点1a发生故障时可以代替分片节点1a工作。具体是,分片节点1a在接收到对区块m的n个交易的共识结果之后,可以将该n个交易和该共识结果发送给备用节点1a进行备份。分片节点1a在执行完属于区块m的n个交易之后,基于该n个交易的执行结果将产生用于更改世界的状态信息,存储该状态信息,同时,分片节点1a也将该状态信息发送给备用节点1a进行备份。

各个分片在执行完区块m的第1轮交易执行过程之后,分别产生了一个或多个跨分片子交易,并将这些跨分片子交易分别发送给对应的分片的分片节点。例如,分片节点1a在执行n个交易之后,产生了与分片2对应的一个或多个跨分片子交易,并将这些跨分片子交易发送给分片节点2a,产生了与分片3对应的一个或多个跨分片子交易,并将这写跨分片子交易发送给分片节点3a。分片节点2a和分片节点3a也类似地进行跨分片通信。最终,分片节点1a例如从分片节点2a和分片节点3a共接收q个跨分片子交易,并执行该q个跨分片子交易,分片节点2a例如从分片节点1a和分片节点3a共接收m个跨分片子交易,并执行该m个跨分片子交易,分片节点3a例如从分片节点1a和分片节点2a共接收p个跨分片子交易,并执行该p个跨分片子交易,如图2中所示,该执行过程可视为各个分片节点在执行区块m的过程中的第2轮交易执行过程。同样地,各个分片节点在完成该第2轮交易执行过程之后,向其对应的备用节点备份与该轮交易执行过程对应的状态信息。可以理解,由于该第2轮交易执行过程是基于第1轮交易执行过程对应的状态信息进行的,因此,该第2轮交易执行过程对应的状态信息中包括了前一状态信息在第2轮交易执行过程中未更新的内容。同时,各个分片节点在完成该第2轮交易执行过程,又可能产生新的跨分片子交易,并可将该新产生的跨分片子交易发送给对应的分片节点,以使得该分片节点开始新一轮的交易执行过程。

其中,所述跨分片子交易是在执行区块过程中产生的交易,具体是,可以是执行属于区块的多个交易的过程中产生的交易,或者可以是执行跨分片子交易的过程中产生的交易。该跨分片子交易例如包括操作指令,以指示在对应的分片中执行与该操作指令对应的操作。该子交易可以与交易具有相同的形式,即包括发送账户、接收账户、数据字段等,与交易不同的是,由于该子交易在同一个联盟方包括的多个相互信任的分片节点之间发送,该多个分片节点之间不需要对子交易进行验证,因此,该子交易可以不包括数字签名。在该区块链系统包括状态分片的情况中,该跨分片子交易用于查询或更改对应分片中的账户的状态(即世界状态),该跨分片子交易例如可通过调用对应分片中的合约来查询或更改对应分片中的账户的状态。在一种实施方式中,跨分片子交易中可包括对应的原始交易的哈希值。在另一种实施方式中,可在跨分片子交易中包括对应的执行轮次信息,指示对应的跨分片子交易针对第几轮交易执行过程而产生。

也就是说,各个分片节点对区块的执行过程可包括多轮交易执行过程,每轮交易执行过程之后都会生成与该轮交易执行过程对应的状态信息(即用于更改世界状态的信息),并将该状态信息发送给对应的备用节点进行备份。其中,对于区块m的第1轮交易执行过程,对应的状态信息为对交易执行过程中写入变量的值的记录,对于区块m的从第2轮交易执行过程开始的每轮交易执行过程,对应的状态信息为在前一轮交易执行过程对应的状态信息的基础上对当前一轮交易执行过程中写入变量的值的记录。其中,在一轮交易执行过程之后可包括跨分片通信过程,该跨分片通信过程可跨分片发送跨分片子交易,使得接收该跨分片子交易的节点进行下一轮的交易执行过程以执行该跨分片子交易对应的操作,各个分片节点执行的所述多轮交易执行过程也是基本同步的。

如图2所示,各个分片节点在完成第i轮交易执行过程之后,假设分片节点1a发生故障,从而分片节点2a和分片节点3a不能连接上分片节点1a并发送在第i轮交易执行过程中产生的与分片1对应的跨分片子交易。在该情况中,分片节点2a和分片节点3a分别连接备用节点1a,并向备用节点1a发送跨分片子交易。备用节点1a在从分片节点2a和分片节点3a都接收到跨分片子交易之后,可确定分片节点1a发生故障,从而,备用节点1a开始代替分片节点1a工作。具体是,备用节点1a基于已经备份的与分片节点1a的第i轮执行对应的状态信息进行对接收的跨分片子交易的执行(如备用节点1a对应的行中的矩形框所示),即进行第i+1轮交易执行过程,并根据执行的区块产生跨分片信息分别发送给对应的分片节点2a和分片节点3a。

在一种情况中,备用节点1a在第i+1轮交易执行过程中产生新的一个或多个跨分片子交易,并将这些跨分片子交易发送给对应的分片节点。在另一种情况中,备用节点1a在第i+1轮交易执行过程中没有产生新的跨分片子交易,从而向分片节点2a和分片节点3a分别发送用于指示未产生跨分片子交易的信息。同时,备用节点1a在执行完成第i+1轮交易执行过程之后,产生与该第i+1轮交易执行过程对应的状态信息,并存储该状态信息。也就是说,备用节点1a执行与分片节点1a相同的操作。在备用节点1a、分片节点2a和分片节点3a都相互发送了用于指示未产生跨分片子交易的信息的情况下,备用节点1a、分片节点2a和分片节点3a可存储与区块m对应的世界状态,生成区块m、存储区块m,从而结束对区块m的执行,并开始对区块m+1的执行。

在又一种情况中,备用节点1a在进行第i+1轮执行时,对其中一个跨分片子交易执行失败,备用节点1a停止第i+1轮执行,根据该跨分片子交易中包含的原始交易的哈希值,将该跨分片子交易对应的原始交易作为错误交易通知给分片节点2a和分片节点3a。假设该错误交易为属于分片2的区块m的交易,因此,分片节点2a在接收到该通知之后,停止第i+1轮执行,并等待分片节点3a对第i+1轮执行的结果。如果分片节点3a在完成第i+1轮执行之后都未发现其他错误交易,则将该信息通知其他两个分片节点,分片节点2a在接收到该信息之后,从属于区块m的多个交易剔除错误交易并回滚缓存中的状态信息,基于分片2的区块m-1对应的世界状态重新执行区块m。分片节点1a和分片节点3a也同时回滚状态重新执行区块m。如果分片节点3a在完成第i+1轮执行之后也发现错误交易,则将该信息通知其他两个分片节点,分片节点2a在接收到该信息之后,从属于区块m的多个交易剔除错误交易之后回滚状态并重新执行区块m。如果基于同样的过程确定分片1和分片3的属于区块m的多个交易中也存在错误交易,则分片节点1a和分片节点3a与上述同样地在状态回滚之后重新执行在剔除错误交易之后的属于区块m的多个交易。

然而,在图1所示系统中,出于成本的考虑,备用节点通常是性能低于分片节点的设备,仅用于以相对低的性能水平维持服务不中断。为此,当备用节点代替了故障的分片节点工作之后,当故障的分片节点恢复正常时,需要从备用节点再切换回分片节点,以为用户提供正常性能的服务。下文中参考图3的流程图描述本说明书实施例提供的从备用节点切换回分片节点的方案。

图3示出根据本说明书实施例的一种在区块链系统中切换分片节点的方法流程图,该方法由本说明书实施例提供的包括分片的区块链系统中的切换为分片中的节点的备用节点执行,包括:

步骤s301,从分片节点接收上线信息;

步骤s303,将数据同步给分片节点;

步骤s305,在同步完成之后,将同步完成信息分别发送给所述分片节点和区块链系统中的其他分片。

下文中,以参考图4和图5所示的过程示意图描述图3所示的方法,其中,在图4和图5中,同样地以联盟方a中包括的各个分片节点代表各个分片的操作为例进行描述,可以理解,本说明书实施例不限于此,例如,图4中的分片节点2a可以替换为分片2中的其他任一节点,图4中的分片节点3a可以替换为分片3中的其他任一节点。

图4为切换分片节点的一种可能的过程示意图,下文将首先参考图4所示的第一种情况描述图3所示的方法。

首先,在步骤s301,从分片节点接收上线信息。参考图4,假设备用节点1a在如图2所示切换为分片节点之后执行图3所示方法,以切换回到故障恢复的分片节点1a。如图4所示,假设在备用节点1a与分片节点2a和分片节点3a都执行了区块m的第j轮交易执行过程,并且相互进行跨分片通信之后,备用节点1a从分片节点1a接收到上线信息,该上线信息由分片节点1a在故障恢复之后发送,指示分片节点1a可重新作为分片节点工作。

在步骤s303,将数据同步给分片节点。

如图4所示,在接收到上线信息之前,备用节点1a进行了第j轮交易执行过程,并且与分片节点2a和分片节点3a之间进行了跨分片通信。备用节点1a在完成第j轮交易执行过程之后,生成并存储了与该轮交易执行过程对应的状态信息,并且,备用节点1a从分片节点2a和分片节点3a接收到多个跨分片子交易。从而,在确定分片节点1a上线之后,备用节点1a将最新的状态信息(即与第j轮交易执行过程对应的状态信息)和待执行的从分片节点2a和/或分片节点3a接收到的一个或多个跨分片子交易一起同步给分片节点1a,从而使得分片节点1a可直接基于该同步数据继续进行对区块m的执行,而不需要重新开始执行区块m。同时,备用节点1a还可以将从第i+1轮交易执行过程到第j-1轮交易执行过程的每轮交易执行过程对应的状态信息发送给分片节点1a。可以理解,所述第j轮交易执行过程可以为执行区块m的过程中任一轮交易执行过程,例如,所述第j轮交易执行过程可以是执行区块m的过程中的第1轮交易执行过程,即执行属于区块m的多个交易的过程,或者也可以为执行区块m的过程中的任一轮执行跨分片子交易的过程。

可以理解,图4仅示出备用节点1a向分片节点1a同步状态信息和跨分片子交易的一种情况,备用节点1a根据备用节点1a、分片节点2a和分片节点3a的第j轮交易执行过程的不同的执行结果、或者根据接收到上线信息的不同的时机,将向分片节点1a同步不同的数据,这将在下文详细描述。

在步骤s305,在同步完成之后,将同步完成信息分别发送分片节点和区块链系统中的其他分片。

参考图4,备用节点1a在完成向分片节点1a同步数据之后,分别向分片节点1a、分片节点2a和分片节点3a发送同步完成信息。分片节点1a在接收到该同步完成信息之后,可基于从备用节点1a接收的与第j轮交易执行过程对应的状态信息,执行从备用节点1a接收的多个跨分片子交易,从而进行区块m的第j+1轮交易执行过程,在完成第j+1轮交易执行过程之后,分片节点1a可再次向备用节点1a备份状态信息。分片节点2a和分片节点3a根据接收到同步完成信息的时间,有可能如图4中所示,在接收到同步完成信息之后执行第j+1轮交易执行过程,并将新产生的跨分片子交易发送给分片节点1a,从而分片节点1a、分片节点2a和分片节点3a后续可继续进行对区块m的执行。分片节点2a和分片节点3a也有可能在接收到同步完成信息之前进行了第j+1轮执行,并将新产生的跨分片子交易发送给了备用节点1a,在该情况下,分片节点2a和分片节点3a在接收到同步完成信息之后,获知分片节点1a上线,则可以将在j+1轮交易执行过程中新产生的跨分片子交易再次发送给分片节点1a,从而分片节点1a、分片节点2a和分片节点3a后续可同样地继续进行对区块m的执行。

在除图4所示情况之外的第二种情况中,备用节点1a在执行完第j轮交易执行过程之后,产生新的跨分片子交易发送给分片节点2a和/或分片节点3a,并从分片节点2a和分片节点3a分别接收到用于指示未生成跨分片子交易的信息,在该第j轮交易执行过程的跨分片通信之后,备用节点1a从分片节点1a接收到上线信息。在该情况中,备用节点1a将自身的与第j轮交易执行过程对应的状态信息和接收到的用于指示未生成跨分片子交易的信息一起同步给分片节点1a,在该情况下,分片节点1a在收到同步完成信息之后,在第j+1轮交易执行过程中不执行任何跨分片子交易。

在第三种情况中,备用节点1a在执行完第j轮交易执行过程之后,未产生新的跨分片子交易,从而向分片节点2a和分片节点3a分别发送用于指示未生成跨分片子交易的信息,并从分片节点2a和分片节点3a分别接收到用于指示未生成跨分片子交易的信息,在该第j轮交易执行过程的跨分片通信之后,备用节点1a从分片节点1a接收到上线信息。在该情况中,备用节点1a将自身的与第j轮交易执行过程对应的状态信息和用于指示备用节点1a、分片节点2a和分片节点3a都未生成跨分片子交易的信息同步给分片节点1a,从而分片节点1a在确定同步完成之后,可开始进行生成区块m并存储区块m的操作,并且可基于与第j轮交易执行过程对应的状态信息更新世界状态,即存储与区块m对应的世界状态。

在第四种情况中,备用节点1a在执行第j轮交易执行过程中从分片节点2a和/或分片节点3a接收到错误交易的信息,该信息例如为错误交易的哈希值,备用节点1a基于该错误交易的信息确定该错误交易是否为分片1区块m中的交易,如果是,则存储该错误交易的信息并结束第j+1轮交易执行过程。如果不是,则继续第j+1轮交易执行过程,以确定第j+1轮交易执行过程中是否有执行失败的跨分片子交易,如果有,则将该跨分片子交易对应的交易的哈希值作为错误交易信息发送给其他的分片节点。在完成该第j+1轮交易执行过程和跨分片通信之后,备用节点1a从分片节点1a接收到上线信息,从而备用节点1a将分片1区块m和/或其它分片的区块m的错误交易信息同步给分片节点1a。从而,在同步完成之后,在分片1区块m中包括错误交易信息的情况中,分片节点1a基于分片1区块m-1的世界状态,重新执行在剔除错误交易之后的属于分片1区块m的多个交易;在分片1区块m中不包括错误交易信息的情况中,分片节点1a基于分片1区块m-1的世界状态,重新执行属于分片1区块m的多个交易。分片节点2a和分片节点3a也同样地在回滚状态后重新执行剔除错误交易的区块m。

在第五种情况中,如图5中的切换分片节点的一种可能的过程示意图所示,备用节点1a在完成第j轮交易执行过程之后,且在发送跨分片信息之前从分片节点1a接收到上线信息。从而,备用节点1a将与第j轮交易执行过程对应的状态信息和将要发送给其它分片节点的跨分片信息同步给分片节点1a。其中,该跨分片信息如上文所述可以为一个或多个跨分片子交易、用于指示未生成跨分片子交易的信息或者错误交易信息。在同步完成之后,备用节点1a向各个分片节点分别发送同步完成信息。分片节点1a在接收到同步完成信息之后,将从备用节点1a同步的跨分片信息发送给分片节点2a和/或分片节点3a,分片节点2a和分片节点3a在接收到同步完成信息之后,可将已经发送给备用节点1a的跨分片信息再次发送给分片节点1a,从而各个分片节点可继续进行对区块m的执行。例如,如图5所示,在分片节点1a上线之后与分片节点2a和分片节点3a相互发送跨分片子交易的情况中,分片节点1a~分片节点3a可分别进行区块m的第j+1轮交易执行过程。

在第六种情况中,备用节点1a在接收到分片节点1a的上线信息时,已经结束对区块m的执行,并完成区块n的第k轮交易执行过程,区块n为区块m之后的区块。在该情况中,备用节点1a除了如上所述向分片节点1a同步与第k轮交易执行过程对应的状态信息和跨分片信息之外,还需要向分片节点1a同步以下数据:区块m到区块n-1的各个区块的区块数据和对应世界状态、属于区块n的多个交易及该多个交易的执行结果。即,备用节点1a需要向分片节点1a同步在其故障期间由备用节点1a生成的需要持久性存储的数据、以及用于继续执行区块n所需要的数据。

在第七种情况中,分片节点1a的故障不可恢复,由新的分片节点1a′上线代替分片节点1a,在该情况中,假设备用节点1a在分片节点1a′上线时已经进行完区块m的第j轮交易执行过程,备用节点1a除了如上所述向分片节点1a′同步与第j轮交易执行过程对应的状态信息和跨分片信息之外,还需要向分片节点1a′同步以下数据:创世区块到区块m-1的各个区块的区块数据和对应世界状态、属于区块m的多个交易及该多个交易的执行结果。即,备用节点1a需要向分片节点1a′同步分片1中从创世块开始的需要持久性存储的数据、以及用于继续执行区块m所需要的数据。其中,备用节点1a在分片节点1a正常运行期间从分片节点1a备份由分片节点1a生成的需要持久性存储的数据。

另外,在上述任一种情况中,在分片中的各个分片节点将接收的交易放入交易池中,并从交易池获取属于待执行的区块的多个交易的场景中,备用节点1a还可以向分片节点1a同步当前交易池中包括的多个交易,以使得分片节点1a在执行完当前区块之后,可以基于该交易池中包括的多个交易获取属于下一个区块的多个交易。

图6示出根据本说明书实施例的一种在区块链系统中切换分片节点的节点切换装置,所述区块链系统包括第一分片和至少一个第二分片,所述第一分片包括第一节点,所述第一节点在所述第一分片中的节点故障之后切换为所述第一分片的节点,并存储有在所述切换之后获取的第一数据,所述装置应用于所述第一节点,包括:

接收单元61,用于从第二节点接收上线信息;

同步单元62,用于将所述第一数据同步给所述第二节点;

发送单元63,用于在同步结束之后,将同步结束信息分别发送给所述第二节点和各个所述第二分片,以使得所述第二节点替换所述第一节点成为所述第一分片的节点。

在一种实施方式中,各个所述第二分片中包括与所述第一节点互为信任节点的第三节点,所述发送单元具体用于,将同步结束信息分别发送给所述第二节点和各个所述第三节点。

在一种实施方式中,所述第一数据中包括所述第一节点在执行第一区块的过程中生成的状态信息。

在一种实施方式中,所述第一数据中还包括所述第一节点在执行第一区块的过程中生成的一个或多个第一跨分片信息。

在一种实施方式中,所述第一数据中还包括所述第一节点从一个或多个所述第二分片接收的一个或多个第二跨分片信息。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

在本说明书实施例中,备用节点在分片节点上线之后将执行区块过程中生成的状态信息同步给分片节点,使得分片节点不需要重复执行交易和跨分片子交易,从而可以更快地实现分片节点的状态恢复和切换。

需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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