分布式一致性协议Gossip

  Gossip是一种分布式一致性协议,在 Cassandra、Akka、Redis 都有用到,也是P2P网络的核心技术。Gossip是一种去中心化、容错而又最终一致性的算法。

Gossip协议设计思路

  Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。

      

  Gossip演示图

 

   这里一共有 16 个节点,节点 1 为初始被感染节点,通过 Gossip 过程,最终所有节点都被感染。

Gossip 的优点

  1. 扩展性

   网络可以允许节点的任意增加和减少,新增加的节点的状态最终会与其他节点一致。

  2. 容错

   网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播,Gossip 协议具有天然的分布式系统容错特性。

  3. 去中心化

    Gossip 协议不要求任何中心节点,所有节点都可以是对等的,任何一个节点无需知道整个网络状况,只要网络是连通的,任意一个节点就可以把消息散播到全网。

  4. 一致性收敛

    Gossip 协议中的消息会以一传十、十传百一样的指数级速度在网络中快速传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。

  5. 简单

    Gossip 协议的过程极其简单,实现起来几乎没有太多复杂性。

Gossip的缺陷

  分布式网络中,没有一种完美的解决方案,Gossip 协议跟其他协议一样,也有一些不可避免的缺陷,主要是两个:

  1. 消息的延迟

    由于 Gossip 协议中,节点只会随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的,因此使用 Gossip 协议会造成不可避免的消息延迟。不适合用在对实时性要求较高的场景下。

  2. 消息冗余

   Gossip 协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免的存在消息重复发送给同一节点的情况,造成了消息的冗余,同时也增加了收到消息的节点的处理压力。而且,由于是定期发送,因此,即使收到了消息的节点还会反复收到重复消息,加重了消息的冗余。

参考  

  https://zhuanlan.zhihu.com/p/41228196

原文地址:https://www.cnblogs.com/songgj/p/10762556.html