1 gossip描述

gossip是一种去中心化思路的分布式协议,解决状态在集群中的传播和状态一致性的保证两个问题。

Gossip protocol 也叫 Epidemic Protocol (流行病协议);别名:流言算法、疫情传播算法;

详细背景描述,可以参看知乎的这篇文章: P2P 网络核心技术:Gossip 协议

2 gossip状态传播

gossip协议分析_分布式

gossip的同步状态过程类似于流言的传播形式,如上图所示;

被感染节点更新数据后,会随机选择k个邻接节点向他们发送更新的数据,后者再将其传递到它们的所选择的节点。依次类推,直到所有节点都被“感染”;

3 gossip状态一致性保证

gossip协议通过在消息体中引入版本号,节点只接收版本号更新的数据!通过版本号的比对实现数据在全集群达到一致。

4 gossip 通信模式

在gossip协议下,两个节点之间存在三种通信方式:

  1. push: 节点a将数据(key,value,version)及对应的版本号推送给b节点,b节点更新节点中比自己新的数据;
  2. pull: a 仅将数据key,version推送给b,b将本地比a新的数据(Key,value,version)推送给a,a更新本地;
  3. push/pull : 除pull操作外,a 再次将本地比b新的数据推送给b,b更新本地;

三种通信方式中 push通信一次,pull更新两次, push/pull更新三次,但是push/pull收敛速度更快!

下图是gossip协议实现的伪代码:

gossip协议分析_分布式_02

5 gossip优缺点

优点:

  • 扩展性:允许节点任意增加减少,保证状态与其他节点一致;
  • 容错性:网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播;
  • 去中心化:所有节点关系对等;
  • 一致性收敛:时间收敛在O(log(N))
  • 实现简单;

缺点:

  • 消息延迟
  • 消息冗余

本文参考

P2P 网络核心技术:Gossip 协议