分布式一致性算法:由数学证明推导出Paxos

简介: # 序 Basic-Paxos是分布式一致性算法的元祖算法之一,现代的分布式一致性算法基本都是Basic-Paxos算法的优化、改进或简化。 由于过于晦涩难懂,Basic-Paxos也是最难理解的算法之一,然而有理由相信,直接从数学证明推导出Basic-Paxos算法是理解它最便捷的方法。 #

Basic-Paxos是分布式一致性算法的元祖算法之一,现代的分布式一致性算法基本都是Basic-Paxos算法的优化、改进或简化。
由于过于晦涩难懂,Basic-Paxos也是最难理解的算法之一,然而有理由相信,直接从数学证明推导出Basic-Paxos算法是理解它最便捷的方法。

单提案表决:单轮投票一致性

定义1

设分布式节点总集合,定义集合 ,且中任意两个成员的交集不为空,则称的法定集(或称多数派)。

定义2

定义为单轮投票的全部要素的集合,为参加投票的法定集合的集合,为本轮投票的编号,为本轮提出的决议

约束α

轮投票中,每个节点只能支持一个提案

约束β

轮投票中,只有被法定集合接受的提案才被确认为本轮决议

断言A

在同时满足约束α和约束β的情况下,一轮投票中不可能同时有两个不同的提案被表决通过

断言A的证明(反证法)

假设法定集合通过了提案,法定集合通过了提案,且,由于任意两个法定集合之间存在交集,那么必定存在节点,且N同时支持提案,这违反了约束α,因此断言A成立。

多提案带来的问题

约束α和约束β定义了单轮投票一致性约束,能够保证单轮投票产生唯一合法决议。但多个不同的提案需要多轮表决来决出唯一合法决议

多提案表决:多轮投票一致性

定义3

定义R的最大通过决议表征在R轮投票之前通过的所有决议中比R轮编号小的编号最大的一轮表决所通过的表决结果,如过它不存在则定义为

约束γ

在任一轮投票中,如果,则设可以任意选定;如果,则设

断言B(弱一致性):

理想状态下(每轮投票按编号顺序产生并按序表决),在同时满足约束α、约束β和约束γ的情况下,则多轮投票后总能保证一致性

断言B的证明(反证法):

在理想状态下(每轮投票按编号顺序产生并按序表决),假设经过轮投票后,存在新的一轮投票,使得
如果,则任意自定义决议,根据约束γ,,这将导出,与假设矛盾。
如果,则,根据约束γ,,这将导出,仍与假设矛盾。

因此断言B得证。

时序导致的问题

多轮投票表决中,即使每轮投票按序产生,也不能保证最终形成决议的顺序与编号顺序一致(现实模型中的网络传输因素或系统设计因素),这将导致断言B导出的弱一致性不成立。

非理想状态下断言B的证伪:

在非理想状态下,假定存在以下表决序列,如果轮投票产生了决议,根据约束γ,
但由于的决议产生于决议发生之前,此时并不存在的表决结果,于是值此时被任意表决。
因此约束γ被破坏,断言B不成立。

多轮投票强一致性

约束δ

如果轮投票之前,存在轮投票,轮投票已经产生了表决结果,且轮投票的编号大于,则轮投票的任何决议都不被接受(轮表决被放弃并无效化)

断言C(强一致性):

在同时满足约束α、约束β、约束γ和约束δ的情况下,多轮投票后总能保持决议一致性。

断言C的证明:

假设在非理想条件下,存在下列乱序表决,根据约束δ,的表决将被无效化,等效于将从表决序列中丢弃,因此原表决序列化简为
于是被转换为理想状态下的多轮投票一致性问题,根据断言B,一致性成立,因此断言C成立。

两阶段原型导出

断言D

在支持多提案表决的一致性框架(强一致性和弱一致性)内,每一轮投票都必须遵循两阶段模型,其目的是:

第一阶段:

获取的值

第二阶段:

得出本轮决议

断言D的证明:

根据约束γ和约束δ,断言D自动成立

Basic-Paxos算法的自然导出

首先定义角色Proposers和Acceptors。Proposers提出提案,提案信息包括提案编号和提议的value(提案的内容);Acceptor收到提案后可以接受(accept)提案,若提案获得多数Acceptors的接受,则称该提案被批准(chosen)。

两阶段协议表决:

Prepare阶段

  • Proposer选择一个提案号n,向大于半数的Acceptor发送Prepare消息;
  • 如果Acceptor还没有承若过不接受编号小于m(m>n)的提案,则承诺不再接受编号小于n的提案,并返回它已经接受的编号小于n的提案中编号最大的提案。

Accept阶段

  • Proposer接受到所有Acceptor对Prepare请求的回应后,提出编号为n值为v的提案。值v是Acceptor接受到的所有编号小于n的提案中编号最大的提案的值。如果没有Acceptor接受过编号小于n的提案,则值v可由Proposer自己决定。提出提案后,向所有的Acceptor发送Accept消息,以期Acceptor接受提案。
  • 如果Acceptor没有向其它的Prepare请求承诺过不再接受编号小于m(m>n)的提案,则接受编号为n的提案。
相关文章
|
13天前
|
存储 缓存 负载均衡
一致性哈希:解决分布式难题的神奇密钥
一致哈希是一种特殊的哈希算法,用于分布式系统中实现数据的高效、均衡分布。它通过将节点和数据映射到一个虚拟环上,确保在节点增减时只需重定位少量数据,从而提供良好的负载均衡、高扩展性和容错性。相比传统取模方法,一致性哈希能显著减少数据迁移成本,广泛应用于分布式缓存、存储、数据库及微服务架构中,有效提升系统的稳定性和性能。
61 1
|
5月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
2月前
|
算法 关系型数据库 MySQL
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
在分布式系统中,确保每个节点生成的 ID 唯一且高效至关重要。Snowflake 算法由 Twitter 开发,通过 64 位 long 型数字生成全局唯一 ID,包括 1 位标识位、41 位时间戳、10 位机器 ID 和 12 位序列号。该算法具备全局唯一性、递增性、高可用性和高性能,适用于高并发场景,如电商促销时的大量订单生成。本文介绍了使用 Go 语言的 `bwmarrin/snowflake` 和 `sony/sonyflake` 库实现 Snowflake 算法的方法。
59 1
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
|
25天前
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
36 1
|
2月前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
2月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
3月前
|
算法
基于粒子群算法的分布式电源配电网重构优化matlab仿真
本研究利用粒子群算法(PSO)优化分布式电源配电网重构,通过Matlab仿真验证优化效果,对比重构前后的节点电压、网损、负荷均衡度、电压偏离及线路传输功率,并记录开关状态变化。PSO算法通过迭代更新粒子位置寻找最优解,旨在最小化网络损耗并提升供电可靠性。仿真结果显示优化后各项指标均有显著改善。
|
3月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
51 2
|
3月前
|
消息中间件 缓存 算法
分布式系列第一弹:分布式一致性!
分布式系列第一弹:分布式一致性!
|
3月前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!

热门文章

最新文章