作为「索引同步」系列的最后一篇文章,本篇「三分钟入门Neo3」将介绍新索引同步机制的实施逻辑,以及测试的初步结果。
该提议最先由COZ开发者Ixje提出并获得社区认可。随后,核心开发者对于该新同步机制的实施进行了深入的探讨。目前的初步实施方案会基于待定节点的运行状况和安全性机制,将新的同步过程将合并到Neo3代码库中。
同步管理器
同步管理器的创建促进了新的同步逻辑,负责管理与区块同步有关的任务,例如监测其他节点的区块高度变化。如果观察到区块高度不同,将分配同步任务开启同步过程。
每个任务最多可以处理50个区块,包括一个特定的区块索引标记开始与结束。这些索引将明确那些需请求其他节点的区块数据。接收到新的区块数据后,节点会验证并保留它,并将更改部分告知同步管理器,完成当前的同步任务。
在实施过程中,若监测到无效区块,区块索引将通知同步管理器,它可用于确定已发送无效区块的节点。此时,同步管理器将创建一个新任务来请求新的区块数据,故障节点将被替换。
该机制确保了节点不会保留无效区块,并在网络运行过程中有效地监测了节点的运行状况。
neo-python维护者Ixje提供了这些属性的示例,包括根据有效负载大小,计算节点传送数据所需的时间;协助负载平衡、节点的平均请求时间;以及超时计数器、监测太久无响应的失联节点。
测试结果
实施新的同步机制后,相比Neo2采用的区块头连接方法,NGD上海 高级工程师 杨晓云分享了新同步机制的测试结果。
在具有21,000以上个区块的单个共识节点网络中,未安装StatesDumper插件的Neo2节点大约花费了23毫秒来同步每个区块。启用该插件后,该插件会转储状态数据(例如存储修改)进行调试,增加到每个区块约花费36毫秒。
实施了新索引同步的Neo3节点,同步时间明显减少了。没有使用StatesDumper插件的Neo3节点,每个区块块同步大约花费4.2毫秒,完成同步的时间不到五分之一。启用该插件后,每个区块大约花费4.7毫秒,与Neo2相比,同步时间减少了7倍以上。
测试结果表明,这些变动可以显著提升网络效率。通过改进节点运行状况等指标,有望大大提高Neo3上区块同步的速度和用户体验。
「索引同步」系列正式完结,敬请期待「三分钟入门Neo3」的下一个新系列。