Gossip协议

1、概念

        Gossip 协议也叫 Epidemic 协议 (流行病协议)。原本用于分布式数据库中节点同步数据使用, 后被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等。

        Gossip 协议利用一种随机的方式将信息传播到整个网络中,并在一定时间内使得系统内的所有节点数据一致。Gossip 其实是一种去中心化思路的分布式协议,解决状态在集群中的传播状态一致性。

        Gossip 算法又被称为反熵(Anti-Entropy),最早是在 1987 年发表在 ACM 上的论文 《Epidemic Algorithms for Replicated Database Maintenance》中被提出,特点是:在一个有界网络中,每个节点都随机地与其它节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。

        Gossip 算法源自流行病学的研究,经过不断的发展演化,作为一种分布式一致性协议而得到广泛应用,如 Cassandra、Akka、Redis 都有用到。

2、原理

        Gossip协议的消息传播主要有两种:反熵(Anti-Entropy)和谣言传播(Rumor-Mongering)。

2.1 反熵传播

        节点相对固定,节点数量不多,以固定概率传播所有的数据。

        是以固定的概率传播所有的数据。所有参与节点只有两种状态:Suspective(病原)、 Infective(感染)。过程是种子节点会把所有的数据都跟其他节点共享,以便消除节点之间数据的任何不一致,它可以保证最终、完全的一致缺点是消息数量非常庞大且无限制;通常只用于新加入节点的数据初始化

2.2 谣言传播

        节点动态变化,节点数量较多,仅传播新到达的数据。

        是以固定的概率仅传播新到达的数据。所有参与节点有三种状态:Suspective(病原)、 Infective(感染)Removed(愈除)。过程是消息只包含最新update,谣言消息在某个时间点之后会被标记为 removed,并且不再被传播缺点是系统有一定的概率会不一致,通常用于节点间数据增量同步

3、通信方式

节点间的交互主要有三种方式:推、拉和推/拉

节点A

key value version
Tom 10 10
Tina 20 11
Bob 30 12

节点B

key value version
Tom 8 9
Tina 30 12
Bob 5 10

3.1 推送模式(push)

         节点A随机选择联系节点B,并向其发送自己的信息,节点B在收到信息后比较(version)/更新自己的数据。

        更新后的B节点,红色的为变更数据:

key value version
Tom 10 10
Tina 30 12
Bob 30 12

 3.2 拉取模式(pull)

        节点A随机选择联系节点B,从对方获取信息,节点A在收到信息后比较/更新自己的数据。

        更新后的A节点,红色的为变更数据:

key value version
Tom 10 10
Tina 30 12
Bob 30 12

3.3 推/拉模式(push/pull)

        节点A向选择的节点B发送信息,同时从对方获取信息,节点A和节点B在收到信息后各自比较/更新自己的数据。 

        更新后的A节点,红色的为变更数据:

key value version
Tom 10 10
Tina 30 12
Bob 30 12

        更新后的B节点,红色的为变更数据: 

key value version
Tom 10 10
Tina 30 12
Bob 30 12

4、优缺点 

4.1 优点

  • 可扩展性(Scalable): Gossip协议是可扩展的,一般需要 O(logN) 轮就可以将信息传播到所有的节点,其中N代表节点的个数。每个节点仅发送固定数量的消息,并且与网络中节点数目无关。在数据传送时,节点并不会等待消息的Ack,所以消息传送失败也没有关系,因为可以通过其他节点将消息传递给之前传送失败的节点。允许节点的任意增加和减少,新增节点的数据最终会与其他节点一致。
  • 容错(Fault-tolerance): 网络中任何节点的重启或者宕机都不会影响 Gossip 消息的传播,具有天然的分布式系统容错特性。
  • 健壮性(Robust): Gossip协议是去中心化的协议,集群中的所有节点都是对等的,没有特殊的节点,所以任何节点出现问题都不会阻止其他节点继续发送消息。任何节点都可以随时加入或离开,而不会影响系统的整体服务质量。
  • 最终一致性(Convergent consistency): Gossip协议实现信息指数级的快速传播,因此在有新信息需要传播时,消息可以快速地发送到全局节点,在有限的时间内能够做到所有节点都拥有最新的数据。

4.2 缺点

  • 消息延迟:节点随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网,不可避免的造成消息延迟。
  • 消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,不可避免地引起同一节点消息多次接收,增加消息处理压力。

你可能感兴趣的:(微服务,分布式)