| 导语数据同步,也就是区块同步,是区块链实现节点加入、状态恢复等必不可少的一个环节,只有拥有最新状态的节点,才能参与到共识中去,进行下一个新区块的共识。
众所周知,在区块链中,每个节点都需要维护一个账本,这是区块链的特性,也是区块链实现去中心化,防篡改的重要方式。区块链节点状态的新旧,最重要的标识之一就是账本里的区块高度。当一个新的节点想加入到区块链网络中,或一个异常的节点恢复正常后,此节点的区块高度落后于其它节点,其状态不是最新的,不能参与网络中交易的共识,此时就需要进行区块同步,该节点会主动向其它节点请求下载区块。
这就引申出一个问题,如何实现数据的快速同步?
在公链中,以比特币为例,节点可以分为“全节点”和“轻节点”,“轻节点”只存储部分账本数据,下载区块头数据代替下载完整区块链数据,通过一种名为“简易支付验证(SPV)”的方式来完成交易验证(SPV就是把比特币核心钱包部分功能独立出来,交易验证交给全节点)。因此在比特币网络中,如果有新节点想要加入网络,作为“轻节点”接入是最快速高效的方式。但缺点是牺牲了一些安全性和可靠性。
在联盟链Hyperledger Fabric中,在Fabric v2.3版本出来之前,一个新节点加入通道(通道,Fabric的一个特性,可以理解为一个通道就是一个区块链网络,不同通道间的账本是独立的,节点可以加入多个通道),往往都需要同步通道中全量的数据,在一般的网络带宽中,同步过程将可能非常缓慢,几天或一两个星期都有可能。在最新的Fabric版本中,账本快照很好的解决了这个问题。
账本快照功能可以对一个节点的通道信息(包括其状态数据库)进行快照,新节点可以通过快照加入该通道。
使用账本快照具有以下优点:
账本快照可以实现节点间数据的快速同步,但也有一些局限性:
数据同步是区块链中非常常见的场景,所以实现数据的快速同步也将是区块链的必备能力之一。Hyperledger Fabric作为最具代表的联盟链引擎,一直在不断更新迭代,功能也越来越完善。账本快照为联盟链生态提供了一个很好的技术实现参考,我们期待无论是公链还是联盟链,区块链都会走的更快,更好,更远。
附录:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。