超级账本Fabric怎么利用Gossip实现区块的广播,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Hyperledger Fabric是一个分布式区块链网络,每个节点都存有共享账本的一个副本,该副本保存了所有交易的确定性历史记录。当新的交易发生时,这些交易必须扩散到整个Hyperledger Fabric网络中,以便使账本的所有副本保持一致。本文将介绍Gossip协议机制的原理并说明Hyperledger Fabric如何使用Gossip机制来保证所有peer节点的数据同步。
从大的层面讲,在Hyperledger Fabric中整个交易处理流程如下:
-
新交易被提交给排序节点
-
排序节点创建新的区块,其中包含了新产生的交易
-
排序节点分发区块给所有的对等节点
最后一步,分发,就是gossip协议发挥作用的环节。即使在一个仅包含少量成员机构的Hyperledger Fabric网络中,也可能会包含大量的对等节点。例如,一个重度使用IoT设备的Hyperledger Fabric网络可能就需要很多Peer节点来将这些IoT设备接入区块链网络。更进一步讲,大范围网络中的peer节点连接可能是间歇性的,有些peer节点不是总会被排序节点访问到。另外也没必要要求排序节点将新区块 分发给每个peer节点,而且这一要求在有些情况下也是不可能满足的。
Gossip:闲聊; 八卦; 小道消息;
实际上在Hyperledger Fabric的排序节点分发区块时,它只会把新区块分发给每个机构中的主导peer节点,然后经过gossip过程,这些peer节点自己完成新区块在彼此之间的扩散:
-
某个peer节点有一个需要散播给其他peer节点的消息。例如,主导的peer节点 有一个新的区块。
-
该peer节点将消息发送给(随机选择的)预定数量的其他peer节点
-
收到消息的peer节点再将消息发送给(随机选择的)预定数量的其他peer节点
-
如此不断反复,直到每个peer节点都收到消息。
上面的过程被称为广播,这一过程被应用于Fabric的gossip系统来向全体peer成员分发各种类型的消息。
1、网络成员gossip流程
Gossip协议的一个核心组件,就是每个peer都会转发消息给网络中一组随机选择的节点。这隐含了每个peer节点都了解网络中有哪些peer节点因此才可以进行随机选择。
在Fabric中,每个peer节点都会周期性的广播消息来表示自身的存活并且已经接入网络。每个peer节点都会维护一个清单来记录网络上的所有peer节点 – 哪些peer是存活的,哪些peer是死翘翘的。
-
当Peer A收到来自Peer B的alive消息,它就会将Peer B标注为alive。对于Peer A来说,Peer B就是网络中的一个成员
-
如果过了一段时间,Peer SA不在收到来自Peer B的alive消息,它就会 将Peer B标注为dead。对于Peer A来说,Peer B就不再是网络中的一员了。
假设Peer B并没有真的死翘翘,Peer A 会周期性地尝试连接标记为dead的Peer节点以检查其是否还存活。例如,有可能是因为网络问题或其他Peer节点的故障导致了Peer B的alive消息无法到达Peer A,因此当Peer A直接联系Peer B时,它就可以确定Peer B的真实状态。
上面描述的过程仅当在peer节点有一组可供发送alive消息的peer节点清单时才可以正常工作。因此每个peer节点在启动引导时都有一个启动引导节点集来提供初始的peer节点清单。
每个peer节点会签名其发送的alive消息,这意味着一个坏家伙不能伪造消息来愚弄其他网络成员。这个坏家伙能做的也就是不转发alive消息。只要其他peer节点继续转发alive消息,这就不是什么大问题。
2、数据扩散gossip流程
正如前面所描述的,在Hyperledger Fabric网络中数据扩散的基本原理很简单。每个peer节点只需将新的数据转发给一组随机选择的peer节点,最终就可以完成新数据在整个网络中的扩散。这一过程被称为广播,以一种基于推送的信息传递方案。
然而,如果一个peer节点从网络断开并在稍后重连,它可能就会错过广播过程。为了跟上网络中其他成员的数据进度,这个节点需要一种基于拉取的机制来请求 其缺失的数据。在Hyperledger Fabric中,peer节点间会周期性地交换网络成员数据和账本数据,这是的peer节点可以保持更新状态,即使其错过某个广播过程。
3、Hyperledger Fabric中的Gossip应用
Hyperledger Fabric在peer节点之间使用Gossip作为一种可伸缩的容错机制来保证所有peer节点上的账本副本保持同步。使用gossip有效降低了排序节点的压力,因为排序节点只需要将区块分发给每个机构中的主导节点,同时这也让peer节点即使在断线重连的情况下也能跟得上整个网络的状态更新。
关于超级账本Fabric怎么利用Gossip实现区块的广播问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/219820.html