【Java高级工程师蜕变之路】057 分布式一致性协议之Gossip协议

Gossip协议

什么是Gossip协议

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

Gossip协议利用随机方式将信息传播到整个网络,并在一定时间内,使系统内所有节点的数据一致。

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

image-20220329233850817

Gossip协议的传播方式有两种:反熵传播和谣言传播

1、反熵传播

以固定概率传播随机数据。

所有参与节点只有两种状态:Suspective(病原)和Infective(感染)。过程是种子节点会把所有数据,都跟其他节点共享,以便消除节点之间的数据不一致,他可以保证节点的最终、完全一致性。

缺点是消息数量非常庞大,且无限制,通常用于新加入节点的数据初始化。

2、谣言传播

以固定概率只传播新到达的数据。所有参与节点有三种状态:Suspective(病原)、Infective(感染)、Removed(愈除)。

消息只包含最新update,谣言节点在某个消息之后被标记为removed,并且不再被传播。

缺点是系统有一定的概率会不一致,通常用于节点之间的增量同步。

通信方式

  1. push

    节点A将数据以及对应的版本(key,value,version)推送到B节点,B节点更新A节点中比自己新的数据。

    image-20220401214621955

  2. pull

    A仅将key,version推送给B,B将本地比A新的数据(key,value,version)推送给A,A更新本地数据。

    image-20220401215002274

  3. push/pull

    与pull类似,多了一步,A再将本地比B新的数据推送给B,B更新本地数据

优缺点

  1. 优点

    • 扩展性:允许节点的任意增加或者减少,新增节点的状态最终会与其他节点一致
    • 容错:任意节点的宕机和重启都不会影响Gossip消息的传播,具有天然的分布式系统容错性
    • 去中心化:无需中心节点,所有节点都是对等的,任意节点无需知道整个网络状况,只要网络联通,任意节点可把消息散播到全网
    • 最终一致性:Gossip协议实现消息的指数级传播,因此,在有新消息传播时,消息可以快速发送到全局节点,在有限时间内能够做到所有节点拥有最新数据
  2. 缺点

    • 消息延迟:节点随机向少数几个节点发送消息,消息最终通过多个轮次的散播而到达全网,不可避免造成消息延迟

    • 消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,不可避免引起同一节点消息被多次接收,增加消息处理压力

Gossip是一种去中心化的分布式协议,数据通过节点像病毒一样传播。

因为是指数级传播,所以传播速度非常快。

Gossip协议适用于 AP 场景的数据一致性处理,常见的应用有:P2P网络通信、Redis Cluster、Consul

posted @ 2022-05-04 22:36  灯塔下的守望者  阅读(401)  评论(0编辑  收藏  举报