​​​​​​​用大白话解释区块链分类账本Hyperledger Fabric 


Hyperledger Fabric是一个分布式区块链网络,其中多个组件自己保留的共享分类帐复制副本,即所有交易的历史记录。当新交易发生时,它们必须通过网络发布,使分类帐的所有复制副本同步到一致的数据。

在较高的层次上,该流程如下所示:

1. 新的交易被提交给排序者(orderer,也称排序服务)。
2. 排序者在区块链上创建一个新区块(包含新的交易)。
3. 排序者将新块发布交给某个对等节点peer。

最后一步,提交是采取goosip协议。即使在成员相对较少的区块链网络中,仍然可能有大量的对等节点peer。例如,大量使用IoT(物联网)设备的网络可能需要许多对等节点将设备连接到网络。此外,有时有些对等节点可能具有间歇性连接 - 某些对等节点可能无法一直从排序者那里获得访问。对于排序者来说,必须向每个对等节点提交新块数据会增加不必要的压力,在某些情况下甚至可能无法完成。

在Hyperledger Fabric中实际发生的情况是,排序者只向组织中的某个对等节点递交新块 - 也就是leader peer领导对等节点。通过一个称为goosip的过程,对等节点之间自己完成了复制副本的传播:

1. 一个对等节点有需要分发给所有其他对等体的消息。例如,领导对等节点有区块链的新块。

2.该对等节点将消息发送到预定数量的(随机选择的)其他对等体。

3. 这些对等体中的每一个将消息转发给预定数量的其他对等体。

4. 依此类推,直到每个同伴都收到了消息。

上面的过程称为广播,Fabric的gossip系统使用这种策略来向所有对等体分发多种消息。

Goosip会员
Goosip协议的关键组成部分是:每个对等体将消息转发给网络中其他对等体时是随机选择的。这意味着每个对等体都知道网络中的哪些对等体,因此可以在它们中进行选择。

在Fabric中,每个对等体定期广播一条消息,表示它仍处于活动状态并连接着网络。每个对等体都维护着自己的网络中所有对等体的列表 - 那些“活着”的对等体和那些“死”的对等体。

1. 当对等体A收到来自对等体B的“活着”的消息时,它将对等体B标记为“有效”。对于对等体A来说,对等体B是网络的一部分。

2. 如果过了一段时间,对等体A没有收到来自对等体B 的“活着”消息,它将对等体B标记为“死亡”。对于对等体A来说,对等体B不再是网络的一部分。

为了防止对等方B实际上已经死亡,对等体A会定期尝试连接死的对等体,看看他们是否真的还活着,因为其他问题如网络问题或故障可能会阻止对等体B的“活着”消息到达对等体A.当对等体A能直接与对等体B联系时,它可以再次确认对等体B确实仍然存在。

引导
上述过程仅在这种情况有效:一个对等体有其他对等体的列表时,对等体需要向其它发送“活着”消有这样。因此,每个体都有通过这样一组引导程序到启动到区块链网络。

拜占庭容错
对等方都标记其“活着”消息,这意味着坏人不能通过创建消息来欺骗网络,它所能做的就是不转发同伴的“活着”消息。只要其他同伴仍然转发“活着”消息,个别不转发并不是一个很大的威胁。

数据传播Goosip
如前所述,数据传播的基础很简单。每个对等体将新数据转发给它知道的随机选择的对等子集。这个过程称为广播,它是一种基于推送的方式,通过网络传输信息。

但是,如果对等体与网络断开连接并在以后重新连接,则它将错过广播过程。为了赶上网络的其余部分,它需要一个基于拉取的机制来请求它丢失的数据。

在Hyperledger Fabric中,对等体定期相互交换成员资格数据(对等体列表,活动和死亡)和分类帐数据(交易块)。这允许对等体保持最新,即使它们错过了“活着”消息或新交易块的广播。

结论
Hyperledger Fabric使用对等体之间的Goosip作为容错和可扩展机制,以保持区块链分类账的所有副本同步。它减少了排序者分发的负担,只需要为每个组织的某个对等体提供新块即可,并且它允许对等体在断开连接后“赶上”当前状态。