分布式一致性协议之Gossip

Gossip协议,也称为流行病协议,是一种基于六度分隔理论的去中心化分布式协议,适用于大规模分布式系统中的数据同步。它通过节点间的随机消息传播实现信息的最终一致性,具有良好的扩展性和容错性。

背景

Gossip协议也叫 Epidemic协议(流行病协议),是基于流行病传播方式的节点或者进程之间信息交换的协议。Gossip 协议在1987年8月由施乐公司帕洛阿尔托研究中心研究员艾伦·德默斯(Alan Demers)发表在ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance》中被提出,原文内容可参考http://bitsavers.trailing-edge.com/pdf/xerox/parc/techReports/CSL-89-1_Epidemic_Algorithms_for_Replicated_Database_Maintenance.pdf

Gossip协议是基于 六度分隔理论(Six Degrees of Separation) 哲学的体现,简单的来说,一个人通过6个中间人可以认识世界任何人。基于六度分隔理论,任何信息的传播其实非常迅速,而且网络交互次数不会很多。
Gossip协议是一种去中心化的分布式协议,数据通过节点像病毒一样逐个传播。因为是指数级传播,整体传播速度非常快,很像现在的新冠一样。

原理

Gossip协议通常以随机的对等选择形式实现,即以给定的频率,每台计算机随机选择另一台计算机,并共享任何消息。定义十分简单,所以实现方式非常多,可能有几百种Gossip协议变种。
Paxos、Raft、ZAB 等分布式算法经常会被称作是“强一致性”的分布式共识协议,因为从整体上对系统外部看来是不会有不一致的情况的。Gossip属于“最终一致性”的协议,因此在系统中某个时间内外部可能会看到不一致的状态。

以下为一种比较原始的Gossip协议实现的执行过程、消息类型、通讯方式,Gossip协议执行过程:

  1. 种子节点周期性的散播消息 【假定把周期限定为 1 秒】。
  2. 被感染节点随机选择N个邻接节点散播消息【假定fan-out(扇出)设置为6,每次最多往6个节点散播】。
  3. 节点只接收消息不反馈结果。
  4. 每次散播消息都选择尚未发送过的节点进行散播。
  5. 收到消息的节点回传散播:A -> B,那么B进行散播的时候,不再发给 A。
    在这里插入图片描述
    Goosip 协议的信息传播和扩散通常需要由种子节点发起。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个“最终一致性”协议。
    Gossip协议是一个多主协议,所有写操作可以由不同节点发起,并且同步给其他副本。Gossip内组成的网络节点都是对等节点,是非结构化网络。

消息类型

Gossip 协议的消息传播方式有两种:

  • Anti-Entropy(反熵传播)
    以固定的概率传播所有的数据
    每个节点周期性地随机选择其他节点,然后通过互相交换自己的所有数据来消除两者之间的差异。
    反熵传播方法每次节点两两交换自己的所有数据会带来非常大的通信负担,因此不会频繁使用,通常只用于新加入节点的数据初始化

  • Rumor-Mongering(谣言传播)
    以固定的概率仅传播新到达的数据
    谣言传播过程是消息只包含最新 update,谣言消息在某个时间点之后会被标记为removed,并且不再被传播。
    缺点是系统有一定的概率会不一致,通常用于节点间数据增量同步

通讯方式

Gossip 协议最终目的是将数据分发到网络中的每一个节点。
Gossip网络中两个节点之间存在三种通信方式:Push、Pull 以及 Push&Pull:

  • Push: 发起信息交换的节点 A 随机选择联系节点 B,并向其发送自己的信息,节点 B 在收到信息后更新比自己新的数据,一般拥有新信息的节点才会作为发起节点。
  • Pull:发起信息交换的节点 A 随机选择联系节点 B,并从对方获取信息。一般无新信息的节点才会作为发起节点。
  • Push/Pull:发起信息交换的节点 A 向选择的节点 B 发送信息,同时从对方获取数据,用于更新自己的本地数据。

如果把两个节点数据同步一次定义为一个周期,则在一个周期内,Push 需通信 1 次,Pull 需 2 次,Push/Pull 则需 3 次。虽然消息数增加了,但从效果上来讲,Push/Pull 最好,理论上一个周期内可以使两个节点完全一致。

优点

  • 可扩展性:允许节点的任意增加和减少,新增节点的状态最终会与其他节点一致。
  • 容错性:网络中任何节点的重启或者宕机都不会影响 Gossip 协议的运行,具有天然的分布式系统容错特性。
  • 健壮性:Gossip 协议是去中心化的协议,所以集群中的所有节点都是对等的,没有特殊的节点,所以任何节点出现问题都不会阻止其他节点继续发送消息。任何节点都可以随时加入或离开,而不会影响系统的整体服务质量。
  • 最终一致性:谣言传播可以是指数级的快速传播,因此新信息传播时,消息可以快速地发送到全局节点,在有限的时间内能够做到所有节点都拥有最新的数据。

缺点

  • 消息延迟:节点随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网,不可避免的造成消息延迟。
  • 消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此不可避免地引起同一节点多次接收同一消息,增加消息处理的压力。一次通信会对网路带宽、CUP资源造成很大的负载,而这些负载又受限于通信频率,该频率又影响着算法收敛的速度。
  • 拜占庭问题:如果有一个恶意传播消息的节点,Gossip协议的分布式系统就会出问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值