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三部曲之一] 使用Basic-Paxos协议的日志同步与恢复