原创 PlatON
本篇内容为分组共识下的P2P连接方案,针对目前Giskard协议演进成分组共识的一种设计方案,本期为第三部分。
| 组间网络拓扑结构
组间关系的组织同样可视作「环」,以邻居的概念维护组间的连接关系,组间的关系实际由组内的每个成员共同构成。
lg(连接的组数)=2
ln(外组内连接数)=2
外组的选择
设,oga(外组数)=3,节点自身在组内的下标=index,oneGroup=index%oga, twoGroup=oneGroup+ceil(oga/2)
这样,组间就形成了一个规则的网络拓扑结构,根据每个节点所直连的不同组,最终每个组能尽量覆盖到足够多的其它组,从而形成一个高效的传播链路。
- 组数较少时,组内前几个节点基本覆盖到全部外组,也就是由组内的前几个节点即可一次传播,将消息传至全部组。
- 组数较多时,通过跳连的方式, 保证一个组内能尽量与足够多的外组直连,以20个组为例,组内5个节点即可直连10个组,这5个节点一次消息的传播就能到达一半的组。
- 组内节点与外组连接时,至少连接外组中的两个成员,保证与该组是连通的,避免一个连接的不可靠。
外组组内节点的选择
每个节点由自身在组内的下标去对应对方组下标的节点开始(如果对方组的节点小于当前节点的下标,则计算targetIndex=index%对方组节点数,从对方组的targetIndex开始),连接ln个邻居节点,保证一个节点对一个外组拥有足够的连接量。由此可见,如果每个节点按此规则建立完整连接表,一个组对外的连接就能保证足够的广泛,有利于消息传播,并且整组足够多的连接量保证与其他组的连通性。
结论
在选择连接的组时,首先选择自身的邻居组,然后再选择一个远距离的组(以环为例则为正对面的组) 形成一个扇形,既可保证组间连通又可扩大传播路径,而在数量的选择上,组数和所选组的节点数,都至少需要两个来维持关联关系。
表格数据,以4个组,每组25个节点,对外选择2个组为例:
第一列:表示节点对单个其它组发起的连接数
第二列:表示节点对组外的其它组总的连接数,也就是主动发起的对外连接和被动对外连接的总量
通过调整外组内的发起连接数,再结合节点的组内连接数,将至少保留20个空闲的共识节点连接数,以供备用,包括切换共识节点时提供预建连接。
| 切换共识节点
在整个共识节点间的网络拓扑构建好后,将面临的一个问题是,每个共识轮都会有部分节点被替换出去,涉及的连接都将变动。而在分组替换节点的规则中,采用了FIFO规则,去尽量避免打乱整体的结构,新进来的节点形成一个小组,以循序渐进的步骤加入到整个共识组中去。
首先新小组在自身组内构建组内网络拓扑,然后再与其它组建立组间连接,这些动作将在新小组正式担任共识节点前的预留时间内去发起,而对于未被替换的节点,这样所带来的结构调整也将降低。
|连接稳定性
理想情况下,所有节点都按以上规则顺利构建好完整的连接表,但对于P2P网络来说,其中的任何成员都能随时退出加入,并且在公共网络中可能因为网络稳定性等因素,连接出现异常。实际过程中,连接可能存在不断减少的情况,导致整个网络拓扑结构特性的退化,这时候应该需要一种监测机制的存在,在不断退化到某个临界点时,重新选择某些节点建立连接,维持一定的连接量。
通过设置一种监控重连机制,去维护连接表的数量处于一个合理的区间,避免节点间的不连通性。
本文转载自https://mp.weixin.qq.com/s/JWpSVlyQMhN2UQB2XWrPPw