跨区域/国别网络发生故障的情况下,如中国大陆跨海光纤发生中断,此时此刻若发生交易,如何保证账本的一致性?在网络恢复后,跨区域账本同步机制是否存在隐患?网络稳定性对共识机制的影响?
关于一致性和有序性的保证,新发布的Hyperledger 1.0的共识机制要达成的从根本上讲就是一种保证所有节点都认可的一致性状态时序,许可链的设计只需满足一致的状态时序即可,Fabric1.0基于通道对所有交易消息进行排序并全序广播相关节点,R3 Corda则是使用公证人节点对“双方有效共识”交易进行唯一性验证防止双花以确保交易时序。共识服务为每个chaincode提供通讯通道,所有提交节点和背书节点都连到这个通讯通道上,每个节点可以向通道广播消息也可以接收通道发来的其他节点广播的消息,通道的作用就是保证所有的消息全序广播,每个消息被分配唯一的广播序列号,就如同微信上的聊天群,每个加入群的人都可以在这个群上收发消息,微信通道保证所有发出的消息其他人都可以送达,但是有一个不同就是广播的消息会包括上一个序号消息的哈希值,这样每个节点就维护了一个完整的全序消息的哈希链,所有在同一个通讯通道上的节点收到消息的一致性,完整性得以保证,任何共识服务在通讯通道上的消息广播不会重复,不凭空产生,也不会发生跳跃,为了提高通道效率,共识服务会收集一段期间内的消息组成一个报文批次,按批次送达各个订阅节点。
如果出现断网,且时间很长,出现两条较长的链,Hyperledger 1.0引入了基于有效账本的检查点(checkpoint)机制,节点可每隔设定的区块数向其他节点广播检查点消息,把自己当前有效账本的blockno和blockhash以及自己的签名广播给其他节点,其他节点将其与自己的有效账本blockno和blockhash进行比对,如果一致,可以回复自己的签名,请求者收集到符合检查点策略的签名后,减掉直到blockno所有的原始账本batch记录。每个节点可以定义自己的检查点策略,如定义本地策略“只要是A节点的确认即认为符合”,或者全局策略“克服拜占庭恶意失效的2f个节点确认才认为符合”。这样一旦网络恢复,如果一致没有问题,如果不一致,按照节点策略,实施全局策略,如上面所说的A节点的确认即认为符合等,能够有效解决断网所产生的两边不一致的情况。
另外检查点除了可以降低节点数据量存储外,当有新的节点加入到相同的通道时,还可以大量减少其从头开始构建原始账本和有效账本的时间成本。如果新加入的节点的检查点策略同某个节点的检查点策略一致,新节点可直接从那个节点的检查点开始同步后续的原始账本。
收起这是个很有趣的问题,其实是和具体的共识机制算法有关,每种共识机制其实在处理上都不太一样。
超级账本采用的是PBFT算法,这种算法的容错率是(N-1)/3,也就是大约1/3的节点如果被中断了,系统仍然能够正常的工作,那些被中断的节点在网络恢复后会重新同步账本;如果大于这个数量的节点出现故障,那整个网络就会瘫痪,交易不能正常进行了。
PBFT的具体解释可以参考下面的连接
收起断成两个大网后,实际上是链分叉了,分为两条很长的链。
断网的时间足够长的话,有可能出现“双花”问题。一般说法是6个账页(block)后认为安全,这个时间长度就是6个账页的生成时间。
网络恢复后,弃链里的交易是否能同步到别一个网里,从而在新的block中进行登记确认,也是一个问题?
收起