Paxos算法

Paxos算法

1.概念

Paxos算法是一个在可能出现非拜占庭故障的分布式系统中,指导多个节点就某个值达成一致,从而保证系统一致性的共识算法。

Paxos算法解决的问题就是在分布式系统中如何就某个值(决议)达成一致。

共识算法的三个性质:

  • 终止性:所有正确的进程最终都会认同某个值。
  • 协定性:所有正确的进程最终认同的值是同一个值。
  • 完整性:如果正确的进程都提议同一个值 v v v,那么任何正确进程最终认同的值一定是 v v v

继而,可以从上述性质中提炼出两个属性:

  • 安全性:所有正确的进程最终都会认同同一个值。
  • 活性:系统最终会认同某一个值。

提案:包含提案编号和提案值。
提案者:提出议案。
接受者:参与决议提案。
学习者:不参与决议,学习被批准的提案。

一旦某个值被批准,未来的提案就必须提案该值。

2.流程

Round One

  • 1.1
    提案者向超过半数接受者发出一个 P r e p a r e Prepare Prepare议案,只包含提案编号 n n n
  • 1.2
    接受者收到议案后。
          ~~~~~      若提案编号 n > n> n>之前收到过的最大提案值 n ′ n' n,则返回 P r o m i s e Promise Promise响应,包含之前接受的最大提案编号 n ′ ′ n'' n′′和对应的提案值 v ′ ′ v'' v′′。若之前没接受任何提案,则返回 N i l Nil Nil
          ~~~~~      否则,返回 R e j e c t Reject Reject

Round Two

  • 2.1
    若提案者收到超过半数的 P r o m i s e Promise Promise响应,则继续向接收者发送 A c c e p t ( n , v ′ ′ ′ ) Accept(n,v''') Accept(n,v′′′)请求,包含提案编号 n n n以及 P r o m i s e Promise Promise中最大的提案编号 n ′ ′ ′ n''' n′′′对应的提案值 v ′ ′ ′ v''' v′′′。如果 P r o m i s e Promise Promise中都是 N i l Nil Nil,则 v ′ ′ ′ v''' v′′′可以任意指定。
  • 2.2
    接受者收到 A c c e p t ( n , v ′ ′ ′ ) Accept(n,v''') Accept(n,v′′′)请求后,若 n ≥ n\geq n该接受者收到过的最大提案值,则该接受者采纳该提案。

若超过半数的接受者采纳提案,则该提案被批准。

3.活锁问题

在第一个提议者发来 A c c e p t Accept Accept请求之前,第二个提议者发来 P r e p a r e Prepare Prepare信息,并导致接收者收到的最大编号更新,继而使第一个提议者发来的 A c c e p t Accept Accept请求被拒绝(因为第二个提议者的 P r e p a r e Prepare Prepare提案使接受者的最大编号更新,从而比第一个提案者发的Accept中的编号更大)。反复如此,接收者会陷入不断更新其最大编号的循环中,陷入活锁状态。
在这里插入图片描述
解决方法:
1.若提议者发现Accept消息没有被接受,则等待一个随机事件再重新发送Prepare,让出机会,减少一直互相抢占的可能性。
2.选取一个主proposer,只有主proposer才能提出提案。



4.符号模型描述Paxos算法

提案者和接受者为进程 P i P_i Pi

进程 P i P_i Pi的第x个事件为 e i x e_i^x eix

进程 P i P_i Pi到进程 P j P_j Pj的信道为 C i j C_{ij} Cij

进程 P i P_i Pi发给进程 P j P_j Pj的消息为 M i j M_{ij} Mij

Round One

1.1

e i → m s g e j e_i \rightarrow _{msg} e_j eimsgej

∀ P j ∈ A \forall P_j\in A PjA,提案者 P i P_i Pi通过信道 C i j C_{ij} Cij发送 M i j = P r e p a r e   P r o p o s a l ( N , N i l ) M_{ij}=Prepare~Proposal(N,Nil) Mij=Prepare Proposal(N,Nil),其中 A A A为超过半数的接受者集合。

1.2

e j → m s g e i e_j \rightarrow _{msg} e_i ejmsgei

∀ P j ∈ A \forall P_j\in A PjA P j P_j Pj接收到 P r e p a r e   P r o p o s a l ( N , N i l ) Prepare~Proposal(N,Nil) Prepare Proposal(N,Nil)后。若 N ≥ N ′ N\geq N' NN,则 P j P_j Pj通过信道 C j i C_{ji} Cji返回 M j i = P r o m i s e ( N ′ ′ , V ′ ′ ) M_{ji}=Promise(N'',V'') Mji=Promise(N′′,V′′)。否则 R e j e c t Reject Reject。其中 N ′ N' N P j P_j Pj收到过的最大提案编号, N ′ N' N P j P_j Pj接受的最大提案编号, V ′ ′ V'' V′′为对应的提案值。若 P j P_j Pj未接受过任何提案,则 P r o m i s e = N i l Promise=Nil Promise=Nil

Round Two

2.1

e i → m s g e j e_i \rightarrow _{msg} e_j eimsgej

∀ P j ∈ A \forall P_j\in A PjA,提案者 P i P_i Pi通过信道 C i j C_{ij} Cij发送 M i j = A c c e p t   M e s s a g e ( N , V ′ ′ ′ ) M_{ij}=Accept~Message(N,V''') Mij=Accept Message(N,V′′′),其中 A A A为超过半数的接受者集合, V ′ ′ ′ V''' V′′′提案者 P i P_i Pi收到的所有 P r o m i s e Promise Promise中最大编号对应的提案值,若 P r o m i s e Promise Promise均为 N i l Nil Nil,则可以任意指定 V ′ ′ ′ V''' V′′′

2.2

e j → m s g e i e_j \rightarrow _{msg} e_i ejmsgei

∀ P j ∈ A \forall P_j\in A PjA P j P_j Pj接收到 A c c e p t   M e s s a g e ( N , V ′ ′ ′ ) Accept~Message(N,V''') Accept Message(N,V′′′)后,若 N ≥ N ′ N\geq N' NN,则 P j P_j Pj接受该提案,否则 R e j e c t Reject Reject。其中 N ′ N' N P j P_j Pj收到过的最大提案编号。

最终,若 ∀ P j ∈ A \forall P_j\in A PjA,均有 P j P_j Pj接受了该提案,则该提案被批准。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Paxos算法是一种基于消息传递的一致性算法,具有以下几个特点: 1. 高容错性:Paxos算法可以在存在故障的情况下保证系统的一致性。即使在网络故障或节点故障的情况下,算法仍然能够保证系统能够达成一致的共识。 2. 可扩展性:Paxos算法可以适用于大规模的分布式系统。它支持在系统中增加或减少节点数量,并且能够处理节点之间的通信延迟。 3. 高效性:Paxos算法通过多轮的消息传递来达成共识,但它在正常情况下只需要进行少量的消息传递就能够完成。这使得算法在性能上表现出色。 4. 基于提案的决策:Paxos算法通过提案的方式来进行决策。在算法的执行过程中,各个节点会提出自己的提案,并通过一系列的消息传递来进行投票和最终决策。只有获得大多数节点的同意的提案才会被接受。 5. 可靠性:Paxos算法能够保证系统的可靠性,即使在节点故障或网络故障的情况下,算法仍然能够继续正常运行,并且能够在恢复后达成一致的共识。 综上所述,Paxos算法具有高容错性、可扩展性、高效性、基于提案的决策和可靠性等特点。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Paxos算法](https://blog.csdn.net/zouke314/article/details/120503984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Paxos算法总结](https://blog.csdn.net/u012414189/article/details/90084684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值