Gossip
Gossip 协议是计算机点对点通信的一个过程,基于病毒传播方式。一些分布式系统使用点对点Gossip 协议以保证数据被传播到群里的所有成员。
- 比特币也是使用了Gossip协议来传播交易和区块信息
过程
- 由种子节点发起,当一个种子节点有状态需要更新到网络中其他节点时,它会随机选择周围的几个节点散播信息
- 收到消息的节点也会重复该过程,每次向未发送过且非发送节点传播消息,直到最终网络中所有节点都收到了信息
结果
- 理论上最终所有节点都会收到信息,因此是一个最终一致性协议
相关属性:
- 每个节点传播信息的周期
- 选择k个邻接节点传播信息(fan-out)
优点:
- 扩展性,网络节点可任意增加或减少,最终状态一致
- 容错,任何节点的宕机和重启不会影响信息的传播
- 去中心化,不要求任何中心节点,所有节点对等,不需要回到网络状况,只需要网络连通
- 一致性收敛,指数性传播,不一致很快会收敛到一致,传播速度为logN
- 简单,容易理解和实现
缺点:
- 信息延迟,由于节点只会随机向几个节点发送信息,需要多次散播才到达全网,因此不适用于对实时性要求高的系统中
- 消息冗余,存在同样的信息重复传播给同一节点的情况,造成了消息的冗余,同时也增加了收到消息并处理的节点的压力
两种类型:
- 反熵
- SI模型(Suspective-Infective),也叫简单蔓延
- 谣言传播
- SIR模型(Suspective-Infective-Removed),也叫复杂蔓延
类型 | 模型 | 节点状态 | more |
---|---|---|---|
反熵(anit-entropy) | SI 模型 | Susceptible、Infectious | 意为减少系统中节点的混乱/不相似 |
谣言传播(rumor-mongering) | SIR模型 | Susceptible、Infectious、Removed | 系统中消息的冗余情况理应有所缓解 |
节点间的三种通信方式
- push:节点A将数据推送给B,B更新A中比自己新的数据
- pull:A仅将必要的数据推送给B,B将比A新的数据推送给A更新
- push/pull:pull之后,A再将比B新的数据推送给B更新
从上到下,虽然周期内消息数增加了,但从整体上看,push/pull收敛速度最快
复杂度分析:
- pull:
- push: