1 gossip描述
gossip是一种去中心化思路的分布式协议,解决状态在集群中的传播和状态一致性的保证两个问题。
Gossip protocol 也叫 Epidemic Protocol (流行病协议);别名:流言算法、疫情传播算法;
详细背景描述,可以参看知乎的这篇文章: P2P 网络核心技术:Gossip 协议;
2 gossip状态传播
gossip的同步状态过程类似于流言的传播形式,如上图所示;
被感染节点更新数据后,会随机选择k个邻接节点向他们发送更新的数据,后者再将其传递到它们的所选择的节点。依次类推,直到所有节点都被“感染”;
3 gossip状态一致性保证
gossip协议通过在消息体中引入版本号,节点只接收版本号更新的数据!通过版本号的比对实现数据在全集群达到一致。
4 gossip 通信模式
在gossip协议下,两个节点之间存在三种通信方式:
- push: 节点a将数据(key,value,version)及对应的版本号推送给b节点,b节点更新节点中比自己新的数据;
- pull: a 仅将数据key,version推送给b,b将本地比a新的数据(Key,value,version)推送给a,a更新本地;
- push/pull : 除pull操作外,a 再次将本地比b新的数据推送给b,b更新本地;
三种通信方式中 push通信一次,pull更新两次, push/pull更新三次,但是push/pull收敛速度更快!
下图是gossip协议实现的伪代码:
5 gossip优缺点
优点:
- 扩展性:允许节点任意增加减少,保证状态与其他节点一致;
- 容错性:网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播;
- 去中心化:所有节点关系对等;
- 一致性收敛:时间收敛在O(log(N))
- 实现简单;
缺点:
- 消息延迟
- 消息冗余
本文参考
P2P 网络核心技术:Gossip 协议