什么是Gossip协议?
网友回复
Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。
Gossip Protocol利用一种随机的方式将信息散播到整个网络中。
Gossip是分布式系统中被广泛使用的协议,其主要用于实现分布式节点或者进程之间的信息交换。Gossip协议同时满足应用层多播协议所要求的低负载,高可靠和可扩展性的要求。由于其简单而易于实现,当前很多系统(例如Amazon S3,Usenet NNTP等)选择基于Gossip协议以实现应用层多播的功能。
我们知道,很多知名的 P2P 网络或区块链项目,比如 IPFS,Ethereum 等,都使用了 Kadmelia 算法,而大名鼎鼎的 Bitcoin 则是使用了 Gossip 协议来传播交易和区块信息。 实际上,只要仔细分析一下场景就知道,Ethereum 使用 DHT 算法并不是很合理,因为它使用节点保存整个链数据,不像 IPFS 那样分片保存数据,因此 Ethereum 真正适合的协议应该像 Bitcoin 那样,是 Gossip 协议。 这里先简单介绍一下 Gossip 协议的执行过程: Gossip 过程是由种子节点发起,当一个种子节点有状态需要更新到网络中的其他节点时,它会随机的选择周围几个节点散播消息,收到消息的节点也会重复该过程,直至最终网络中所有的节点都收到了消息。这个过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。 Gossip 传播过程演示 现在,我们通过一个具体的实例来深入体会一下 Gossip 传播的完整过程 为了表述清楚,我们先做一些前提设定 1、Gossip 是周期性的散播消息,把周期限定为 1 秒 2、被感染节点随机选择 k 个邻接节点(fan-out)散播消息,这里把 fan-out 设置为 3,每次最多往 3 个节点散播。 3、每次散播消息都选择尚未发送过的节点进行散播 4、收到消息的节点不再往发送节点散播,比如 A -> B,那么 B 进行散播的时候,不再发给 A。 注意:Gossip 过程是异步的,也就是说发消息的节点不会关注对方是否收到,即不等待响应;不管对方有没有收到,它都会每隔 1 秒向周围节点发消息。异步是它的优点,而消息冗余则是它的缺点。 这里一共有 16 个节点,节点 1 为初始被感染节点,通过 Gossi...
点击查看剩余70%