首先要跟大家明确的一点是,21个超级节点是投票选举出来的,并不是系统在创立之初就已经确定好了的。那么相信大家也一定很好奇,这21个超级节点是通过什么方式产生?
NGK.IO对分布式超级节点使用了一个自创的选举算法DSNE,来保证选举能够在最短的时间内完成。因为NGK智能合约本身就是个P2P的信任机制,然后再参考现实世界的交际方法,最后再通过考察超级节点的总信任度来评选出超级节点由谁担任,同时,在计算信任度的过程中,系统会启动奖励或惩罚因子和时间衰减因子的机制。
另外,为了减轻在拥有大量节点的网络组进行超级节点的评选所带来的的网络负荷,普通节点会首先经历一波阈值过滤算法来进行筛选,然后从剩下的节点中组成超级节点组,最后从超级节点组中选出最优秀的一批来担任。
NGK的超级节点选举算法对目前的网络动态变化是有全方面的考虑的。在选举过程中,参与节点可以随时加入或者离开,也有可能出现随机的故障(可被修复),也有可能发生消息丢失或者延迟的情况;领导人选举服务包括组选举算法、故障检测和维护这三个模块,使用速度(选举服务占用的时间)、平均错误率和领导人可用性三个QOS指标来衡量选举服务的性能。
超级节点的选举会通过分布式最小生成树算法来实现对所有节点的筛选,最小生成树算法也由此直接变成了选举算法。分布式最小生成树(MST)算法,具有最优的通信复杂度和较好的时间复杂度,并在此基础上MST算法引入一些非常基本的思想和概念。
一个节点作为根节点启动算法,发送“follow-me”消息。收到“follow-me”消息的节点,如果消息传递变是它邻近边中的最小权重边,则够到MST树上。如果有的节点没有把它们自己勾到MST树上,就选择一个新的根,旧根“迁移”到新的根上,继续上述过程。
最坏情况下,算法需要(n/2-1)次根迁移时间的复杂度是(dn),消息复杂度是(2m+dn/2-1)。这里的参数n、m和d分别是网络组的节点数量、边数量和网络直径。
原文:https://www.cnblogs.com/ngkblockchain/p/13984655.html