paxos协议简介

Posted 好好学习Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paxos协议简介相关的知识,希望对你有一定的参考价值。

什么是paxos协议?

Paxos用于解决分布式系统中一致性问题。

分布式一致性算法(Consensus Algorithm)是一个分布式计算领域的基础性问题,其最基本的功能是为了在多个进程之间对某个(某些)值达成一致(强一致);简单来说就是确定一个值,一旦被写入就不可改变。

paxos用来实现多节点写入来完成一件事情,例如mysql主从也是一种方案,但这种方案有个致命的缺陷,如果主库挂了会直接影响业务,导致业务不可写,从而影响整个系统的高可用性。

paxos协议是只是一个协议,不是具体的一套解决方案。目的是解决多节点写入问题。

 

paxos的几个基本概念

一、两个操作

1.Proposal Value:提议的值;

2.Proposal Number:提议编号,可理解为提议版本号,要求不能冲突。

 

二、三个角色

1.Proposer:提议发起者。

Proposer可以有多个,Proposer提出议案(value)。

所谓 value,可以是任何操作,比如“设置某个变量的值为value”。不同的Proposer可以提出不同的value,例如某个Proposer提议“将变量X设置为1”,另一个Proposer提议“将变量X设置为2”,但对同一轮Paxos过程,最多只有一个value被批准。

2.Acceptor:提议接受者。

Acceptor有N个,Proposer提出的value必须获得超过半数(N/2+1)的Acceptor批准后才能通过。Acceptor之间完全对等独立。

3.Learner:提议学习者。

上面提到只要超过半数accpetor通过即可获得通过,那么learner角色的目的就是把通过的确定性取值同步给其他未确定的Acceptor。

 

三、协议过程

一句话说明就是:

proposer将发起提案(value)给所有accpetor,超过半数accpetor获得批准后,proposer将提案写入accpetor内,最终所有accpetor获得一致性的确定性取值,且后续不允许再修改。

协议分为两大阶段,每个阶段又分为A/B两小步骤:

1.准备阶段(占坑阶段)

1) 第一阶段A:Proposer选择一个提议编号n,向所有的Acceptor广播Prepare(n)请求。

2) 第一阶段B:Acceptor接收到Prepare(n)请求,若提议编号n比之前接收的Prepare请求都要大,则承诺将不会接收提议编号比n小的提议,并且带上之前Accept的提议中编号小于n的最大的提议,否则不予理会。

2.接受阶段(提交阶段)

1) 第二阶段A:整个协议最为关键的点:Proposer得到了Acceptor响应:

① 如果未超过半数accpetor响应,直接转为提议失败;

② 如果超过多数Acceptor的承诺,又分为不同情况:

a. 如果所有Acceptor都未接收过值(都为null),那么向所有的Acceptor发起自己的值和提议编号n,记住,一定是所有Acceptor都没接受过值;

b. 如果有部分Acceptor接收过值,那么从所有接受过的值中选择对应的提议编号最大的作为提议的值,提议编号仍然为n。但此时Proposer就不能提议自己的值,只能信任Acceptor通过的值,维护一但获得确定性取值就不能更改原则。

2) 第二阶段B:Acceptor接收到提议后,如果该提议版本号不等于自身保存记录的版本号(第一阶段记录的),不接受该请求,相等则写入本地。

 

过程推导

可以参考: Paxos算法原理与推导

可以参考的资料

论文《Paxos Made Simple》

论文《The Part-Time Parliament》

英文版维基百科的Paxos

中文版维基百科的Paxos

书籍《从Paxos到ZooKeeper》

 


以上是关于paxos协议简介的主要内容,如果未能解决你的问题,请参考以下文章

Paxos 协议简单介绍

《分布式一致性协议raft简介》

初探一致性协议 Paxos 算法

[Paxos三部曲之一] 使用Basic-Paxos协议的日志同步与恢复

BAT 面试题宝库附详尽答案解析图解分布式一致性协议 Paxos 算法

四,分布式事务一致性协议paxos通俗理解