区块链技术之P2P网络(二)

Gossip Protocol

        Gossip protocol 也叫 Epidemic Protocol (流行病协议)。Gossip protocol在1987年8月由施乐-帕洛阿尔托研究中心发表ACM上的论文

《Epidemic Algorithms for Replicated Database Maintenance》中被提出。原本用于分布式数据库中节点同步数据使用,后被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等。

        Gossip Protocol和DHT(Distributed Hash Table)一样是P2P网络中的通信协议。

Gossip和P2P的区别

  • 每个节点都存全量的数据,本地检索
  • 每个节点从Peer拉取数据,达到和Peer数据一致
  • 节点收到或产生新数据的时候,会转发给Peer,最终经过Multi-hop之后到达全网

Gossip 的完整过程

为了表述清楚,我们先做一些前提设定

  1. Gossip 是周期性的散播消息,把周期限定为 1 秒
  2. 被感染节点随机选择 k 个邻接节点(fan-out)散播消息,这里把 fan-out 设置为 3,每次最多往 3 个节点散播。
  3. 每次散播消息都选择尚未发送过的节点进行散播
  4. 收到消息的节点不再往发送节点散播,比如 A -> B,那么 B 进行散播的时候,不再发给 A。

        注意:Gossip 过程是异步的,发消息的节点不会关注对方是否收到,即不等待响应;不管对方有没有收到,它都会每隔 1 秒向周围节点发消息。异步是它的优点,而消息冗余则是它的缺点。

优点

  • 享有P2P网络抗单点故障的优点
  • 相比DHT更不容易受到网络阻隔(partition)

缺点

  • Multi-hop造成消息的延迟。这也是区块链挖矿、浏览器经常需要解决的问题
  • 重复接收相同消息,造成了消息的冗余,也增加了收到消息的节点的处理压力

改进方向1:消息延迟

        1. 增加Peer数量

需要解决的问题:Peer数量不够,节点则容易失去同步

解决:

  • 在网络中设置一些固定的节点,与大量的Peer进行连接
  • 其他节点Peer数量不够的时候,从这些固定节点获取Peer列表

        2. 应对网络峰值

需要解决的问题:节点收到新数据后立刻转发给所有Peer,Peer多的情况下会造成瞬间的网络拥堵

解决:分批有序进行广播

        a. Diffusion:广播时候对各个Peer加随机的延时

        b. Fan-out:每秒随机选几个Peer发出消息

        3.应对数据不一致

需要解决的问题:网络中两个节点同时发出消息,网络中会对这两个消息顺序暂时无法达成一致

解决:Avalanche,多轮询问随机Peer并与其中多数Peer的数据保持一致

  • 以网络带宽为代价,换取更快达成一致
  • 网络层面而非共识层面的解决方案,矿工仍倾向于不遵守该机制而选择对其有利的数据

 

改进方向2:消息隐私性

需要解决的问题:当一个节点连上足够多的Peer后,就能知晓消息的生产者是哪个Peer

解决:

(1)改变消息的起点,例如Dandelion Protocol

  • 消息在前几Hop只发给一个Peer,之后开始Gossip
  • 消息发起者的地址不再暴露,增强隐私性

(2)改变消息的终点,例如Nym,异构网络,加入mix节点,即带加密功能的消息池

总结

  1. Gossip Protocol具有抗单点故障、抗网络阻隔的优点,适用于区块链场景
  2. Gossip Protocol中Multi-hop带来的延迟需要进一步改进,尤其在挖矿场景下

猜你喜欢

转载自blog.csdn.net/qq_40213907/article/details/127194424