Fabric区块传播的gossip过程

简介:

Hyperledger Fabric是一个分布式区块链网络,每个节点都存有共享账本的一个副本,该副本保存了所有交易的确定性历史记录。当新的交易发生时,这些交易必须扩散到整个Hyperledger Fabric网络中,以便使账本的所有副本保持一致。本文将介绍Gossip协议机制的原理并说明Hyperledger Fabric如何使用Gossip机制来保证所有peer节点的数据同步。

Hyperledger Fabric相关开发教程:

从大的层面讲,在Hyperledger Fabric中整个交易处理流程如下:

  • 新交易被提交给排序节点
  • 排序节点创建新的区块,其中包含了新产生的交易
  • 排序节点分发区块给所有的对等节点

最后一步,分发,就是gossip协议发挥作用的环节。即使在一个仅包含少量成员机构的Hyperledger Fabric网络中,也可能会包含大量的对等节点。例如,一个重度使用IoT设备的Hyperledger Fabric网络可能就需要很多Peer节点来将这些IoT设备接入区块链网络。更进一步讲,大范围网络中的peer节点连接可能是间歇性的,有些peer节点不是总会被排序节点访问到。另外也没必要要求排序节点将新区块
分发给每个peer节点,而且这一要求在有些情况下也是不可能满足的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBXnDWjL-1576125458897)(hyperledger-fabric-gossip/gossip-theory.png)]

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节点即使在断线重连的情况下也能跟得上整个网络的状态更新。


原文链接:Hyperledger Fabric Gossip原理解析 - 汇智网

目录
相关文章
|
JavaScript Java Go
深入理解Fabric区块链Gossip机制
Gossip在Hyperledger Fabric中发挥着重要的作用。在这个教程中,我们将分阶段考察Fabric网络启动时gossip的运行机制,学习Fabric中的一些核心概念,例如主导节点/leader、锚节点/anchor等,理解 gossip是如何帮助Hyperledger Fabric成为一个可伸缩的联盟链平台。
1800 0
深入理解Fabric区块链Gossip机制
|
开发框架 .NET 区块链
Hyperledger fabric部署链码(五)初始化与链码升级
fabric部署chaincode-go(智能合约)系列之五
208 0
|
测试技术 Go 区块链
Hyperledger fabric 测试环境部署
Hyperledger fabric 测试环境部署及相关问题解答
278 3
Hyperledger fabric 测试环境部署
|
JavaScript 测试技术 Go
Hyperledger fabric部署链码(一)打包链码
fabric部署chaincode-go(智能合约)系列之一
253 0
|
存储 JSON 安全
Hyperledger fabric智能合约编写(一)
本篇文章主要对链码编写的主要思路和部分API进行梳理。
176 1
|
区块链
Hyperledger fabric部署链码(二)安装链码到fabric
fabric部署chaincode-go(智能合约)系列之二
149 1
|
Go API 区块链
Hyperledger Fabric相关概念介绍
在学习Hyperledger Fabric的过程中,初步对相关概念的了解。
267 0
Hyperledger Fabric相关概念介绍
|
JSON 区块链 数据格式
Hyperledger fabric部署链码(四)提交链码定义到channel
fabric部署chaincode-go(智能合约)系列之四