当前位置:首页 » 区块链精品文章 » 正文

4.6 基于反熵的状态同步

1628 人参与  2018年10月15日 10:55  分类 : 区块链精品文章  评论

反熵(Anti-entropy)是指每个节点周期性地和邻居节点交换保存的数据,然后对比本地数据和邻居节点所保存的数据,检查是否有缺失或者过期的数据,然后更新本地节点的数据为最新的数据。

超级账本的反熵实现比较简单,每个节点定期(10s)检查本地账本的区块序列号和其他节点账本的序列号。若发现本 地的序列号比网络中其他节点账本的序列号小就在网络中广播一个GossipMessage_StateRequest消息,请求缺失序列号的区块。收到请 求的节点如果有对应序列号的区块,会在网络中广播一个GossipMessage_StateResponse消息,使其包含本地账本中请求序列号的区 块。这种方式是通过直接消息(directMessage)渠道进行的,节点接收到消息后会缓存起来,放到一个PayloadsBuffer的数据结构里 保存起来。

由于TCP/IP网络传输的特点,数据可能不是按序到达的,PayloadsBuffer会在内部保存一个索引, 记录等待提交账本的下一个区块的序列号next。如果接收到的区块序列号小于next,说明是过期的区块,直接丢弃。如果序列号大于 next,PayloadsBuffer把收到的数据放到序列号对应的缓冲区数组里。只要收到的数据和已提交区块序列号连续了,就会把连续的数据区块提交 到账本里,然后删除缓冲区中已提交的数据区块,同时更新索引next。

另外一个更新状态数据的过程是在主节点从排序服务中获取到区块以后,会创建一个类型为 GossipMessage_DataMsg的数据消息广播给其他节点,其他节点接收到区块后同样也会和PayloadsBuffer中的next进行比 较,进行同样的处理。和直接消息方式不同的地方是,从排序服务获取到的GossipMessage_DataMsg消息只包含一个区块,直接消息里可能会 包含多个缺失的区块。


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

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

区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!