原创 PlatON
本篇内容为分组共识下的P2P连接方案,针对目前Giskard协议演进成分组共识的一种设计方案,本期为第一部分。
| 背景
基于扩容的驱动下,引入了新的共识机制「分组共识」,将所有共识节点划分成多个组,组内交互后再组间达成共识。由于扩容后共识节点的数量庞大,原先所有共识节点全部直连的方式已不再适用,因为本身资源有限并且消息量的激增,引起资源消耗过大,效率低下,因此需要一个新的互连方案做支撑。
| P2P网络
P2P(Peer-to-Peer)网络是一个分布式点对点网络,网络中的结点是对等的,既是资源提供者也是资源检索者,属于建立在公共互联网之上的覆盖层网络(overlay network)。
可以将整个网络视为一个图,G=(V,E),其中V称为对等结点的集合,E称为对等结点间连接的边的集合,网络中的所有对等连接形成一个图,理想情况下,只存在一个连通分量,即每个结点都存在可达路径,具备连通性,消息最终能到达目的地。
因此连接机制需要构建好覆盖层网络,维护好各结点间的邻接关系,保持整个网络的连通性。
| 基本目标
- 每个分组间及分组内快速形成一个连通图:保证共识消息传播的效率
- 各节点间的通信不造成消息泛滥、增大网络压力和降低传播效率
- 分组中的角色,在共识过程中的变更不影响连接的结构
- 切换共识轮时,新共识节点正常加入网络拓扑结构
- 共识节点的网络拓扑支持共识节点数的动态伸缩
- 少量连接的异常,不影响整体共识的进程
| 分组网络拓扑结构
首先将网络中的节点划分为共识节点和普通节点,共识节点负责区块的生产和验证,因此优先保证共识节点间形成一个高效的网络拓扑结构。所有共识节点经过分组后,相当于拆分成多个小网络,为保证各组内成员(GM)间快速通信,并且同其它组达成共识,各节点建立连接的原则为:
- 优先挑选本组内部分节点建立连接,组内形成一个连通图
- 在所有分组中挑选部分分组,对其分组内的部分节点建立连接,各组形成一个连通图
- 共识节点再保留一定连接数的资格,供普通节点建立连接,最终整个网络形成一个完整的大的连通图
根据分组共识的规则,组内通信达成一致是首要保证,其次是组间。显然在如此庞大的共识节点群中,直连所有节点是不可取的,因此需要一种规则去组织节点间的邻接关系。
那么该问题可进行拆分细化,分成两步,做两级保证:
组内保证
组内节点间连通,并且在异常情况下,部分连接失效的情况下节点任然存在可达路径。通信消息在组间能迅速传播,由此保证组内消息传播的可靠性。
组间保证
组间的保证由组内所有成员共同维护,整个组内至少一个成员与其它组连接了,那么消息就能传播出去,同理消息也能传播至组内,因此组间连通的要求就变得简单了,只需一条消息传入组内即可,由「组内保证」可知消息传播的可靠性,能传至各成员。
由此可见,组内通信成为关键问题,节点的连接数需要在可靠和效率中达到平衡。并且需要预留部分连接数用作预建连接(后文详解),因此实际可用的连接数是非常有限的。
本文转载自https://mp.weixin.qq.com/s/o0aSqvTyE2xwbBhQIivB2A