分布式一致性协议
1. Gossip 协议
- Gossip 协议也叫 Epidemic 协议 (流行病协议)。原本用于分布式数据库中节点同步数据使用,
后被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等。 - 从 gossip 单词就可以看到,其中文意思是八卦、流言等意思,我们可以想象下绯闻的传播(或者流
行病的传播);gossip 协议的工作原理就类似于这个。gossip 协议利用一种随机的方式将信息传播到整
个网络中,并在一定时间内使得系统内的所有节点数据一致。Gossip 其实是一种去中心化思路的分布式
协议,解决状态在集群中的传播和状态一致性的保证两个问题。
1.1 Gossip原理
- Gossip 协议的消息传播方式有两种:反熵传播 和 谣言传播。
1. 反熵传播
是以固定的概率传播所有的数据。所有参与节点只有两种状态:Suspective(病原)、
Infective(感染)。过程是种子节点会把所有的数据都跟其他节点共享,以便消除节点之间数据的任
何不一致,它可以保证最终、完全的一致。缺点是消息数量非常庞大,且无限制;通常只用于新加
入节点的数据初始化。
2. 谣言传播
是以固定的概率仅传播新到达的数据。所有参与节点有三种状态:Suspective(病原)、
Infective(感染)、Removed(愈除)。过程是消息只包含最新 update,谣言消息在某个时间点之后会
被标记为 removed,并且不再被传播。缺点是系统有一定的概率会不一致,通常用于节点间数据
增量同步。
1.2 通信方式
Gossip 协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节
点之间存在三种通信方式:推送模式、拉取模式、推/拉模式。
1.2.1 Push
节点 A 将数据 (key,value,version) 及对应的版本号推送给 B 节点,B 节点更新 A 中比自己新的数
据
1.2.2 Pull
A 仅将数据 key, version 推送给 B,B 将本地比 A 新的数据(Key, value, version)推送给 A,A 更
新本地!
1.2.3 Push/Pull
与 Pull 类似,只是多了一步,A 再将本地比 B 新的数据推送给 B,B 则更新本地
优缺点
综上所述,我们可以得出 Gossip 是一种去中心化的分布式协议,数据通过节点像病毒一样逐个传
播。因为是指数级传播,整体传播速度非常快。
- 优点
扩展性:允许节点的任意增加和减少,新增节点的状态 最终会与其他节点一致
容错:任意节点的宕机和重启都不会影响 Gossip 消息的传播,具有天然的分布式系统容错特
性
去中心化:无需中心节点,所有节点都是对等的,任意节点无需知道整个网络状况,只要网络
连通,任意节点可把消息散播到全网
最终一致性:Gossip 协议实现信息指数级的快速传播,因此在有新信息需要传播时,消息可
以快速地发送到全局节点,在有限的时间内能够做到所有节点都拥有最新的数据。
- 缺点
消息延迟:节点随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网;
不可避免的造成消息延迟。
消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤;不可避
免的引起同一节点消息多次接收,增加消息处理压力
Gossip 协议由于以上的优缺点,所以适合于 AP 场景的数据一致性处理,常见应用有:P2P 网络通信、
Redis Cluster、Consul。
Paxos协议
Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算
法,是目前公认的解决分布式一致性问题最有效的算法之一。
Paxos由 莱斯利·兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公
开,最初的描述使用希腊的一个小岛Paxos,描述了Paxos小岛中通过决议的流程,并以此命名这个算
法,但是这个描述理解起来比较有挑战性。后来在2001年,莱斯利·兰伯特重新发表了朴实的算法描述版
本《Paxos Made Simple》 自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性。
Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题,如Chubby、Megastore
以及Spanner等。开源的ZooKeeper,以及MySQL 5.7推出的用来取代传统的主从复制的MySQL Group
Replication等纷纷采用Paxos算法解决分布式一致性问题。然而,Paxos的最大特点就是难,不仅难以
理解,更难以实现。
Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它
的算法都是残次品。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?