分布式一致性协议——Gossip

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

什么是Gossip 协议?

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

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

gossip 单词就可以看到,其中文意思是八卦、流言等意思,我们可以想象下绯闻的传播(或者流行病的传播);gossip 协议的工作原理就类似于这个。

Gossip原理

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

1. 反熵传播

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

2. 谣言传播

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

通信方式

Gossip 协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节点之间存在三种通信方式推送模式拉取模式推/拉模式 。这三种方式广泛应用与各大分布式数据一致性的协议和实现中。

1. Push 推送方式

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

2. Pull 拉取方式

A仅将数据 key, version 推送给B,注意没有value哦,A推送给B时B将本地比A 新的数据(Key, value, version)推送给A,A 更新本地,这一步相当于A在主动拉取B的值。

3. Push/Pull 推拉相结合

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

优缺点

A 优点

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

B 缺点

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

总结

Gossip 协议综合于以上的优缺点,所以适合于AP场景的数据一致性处理,常见应用有:P2P 网络通信、 Redis ClusterConsul

猜你喜欢

转载自juejin.im/post/7130864100875173919