4.2 超级账本中的Gossip协议

时间:2024-04-14 14:27:38

超级账本的Peer节点组成了一个P2P的网络,客户端SDK(Go、Java、Python、Node.js等不同 语言)会提交请求给Peer节点,Peer节点处理后会提交交易提案(Transaction Proposal)给背书节点(Endorser),然后进行背书签名(Endorsement),最后经过排序服务达成共识后广播给Peer节点,如图 4-1所示。Gossip模块负责连接排序服务和Peer节点上,实现从单个源节点到所有节点高效的数据分发,在后台实现不同节点间的状态同步,并且可以 处理拜占庭问题、动态的节点增加和网络分区。账本信息、状态信息、成员信息等都会通过Gossip协议进行分发。概括起来,Gossip协议主要完成的功 能和目标有以下几个。

1)在不需要所有节点都连接到排序服务获取账本区块数据的情况下,超级账本网络中所有节点还能有相同的账本数据、状态信息。

2)系统已经正常运行后,对于新加入到超级账本网络中的节点,可以不直接连接到排序服务就能从网络中其他节点处获取到账本数据、状态信息。

3)那些错过了批量更新的节点(比如由于网络中断或者临时的超负荷运行没有接收到数据),能够保证落后的节点获取到缺失的区块。

4)维护和管理成员信息,跟踪哪些成员是存活的,哪些是有故障的。

5)数据能快速地从单个源节点同步到所有的其他节点上,能够保证大量的数据可以在节点之间进行传输。

4.2 超级账本中的Gossip协议

图4-1 基于Gossip的通信路径

超级账本网络会通过主节点选举(Leader election)选择一些节点,通过调用Deliver()接口连接到排序服务,这些节点负责把接收到的批量区块(batch)广播给其他节点。每个组 织都会根据自己的需要选择一个节点来连接排序服务,再把批量区块分发给组织内的其他节点。后面会专门阐述主节点选举的过程。

基于Gossip的广播实现的过程是,一个Peer节点接收到消息以后,随机地选择k个节点,把消息发送给它们。 如果有节点没有响应,则同步更新发现模块的数据。另外,还有一个基于反熵(Anti-entropy)的状态同步过程,它会在不同节点间同步状态。它们周 期性地和其他节点比较信息,保持状态的同步。每个节点都会维护完整的成员信息,这样它们可以在发送信息的时候自行随机地选择节点。在这种模式下,不需要维 护固定的连接,因为它是非常健壮的,相对来说这也是非常容易实现的,同时还能处理节点故障和拜占庭问题。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1080

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();