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


原文链接:Understanding Hyperledger Fabric — Gossip

汇智网翻译整理,转载请标明出处