Paxos问题指分布式系统中存在故障fault,但不存在恶意corrupt节点场景(消息可能丢失但不会造假)下的共识达成(Consensus)问题。
Paxos是第一个被证明的共识算法,原理基于两阶段提交并进行扩展。算法中将节点分为三种类型:
倡议者proposer:提交一个提案,等待大家批准为结案,往往是客户端担任。
接受者acceptor:负责对提案进行投票,往往服务器担任。提议超过半数的接受者投票及被选中。
学习者learner:被告知提案结果,并与之统一,不参与投票过程。客户端和服务端都可担任。
每个节点在协议中可以担任多个角色。
Paxos的特点:
一个或多个节点可以提出提议
系统针对所有提案中的某个提案必须达成一致
最多只能对一个确定的提案达成一致
只要超过半数的节点存活且可互相通信,整个系统一定能达成一致状态
总结Paxos两阶段提交
两个阶段分别是准备(prepare)和提交(commit)。准备阶段解决大家对哪个提案进行投票的问题,提交阶段解决确认最终值的问题。
简单来说,提案者发出提案后,收到一些反馈,有两种结果,一种结果是自己的提案被大多数节点接受了,另外一种是没被接受,没被接受就过会再试试。提案者收到来自大多数的接受反馈,也不能认为这就是最终确认。因为这些接收者并不知道自己刚反馈的提案就是全局的绝对大多数。所以,引入新的一轮再确认阶段是必须的,提案者在判断这个提案可能被大多数接受的情况下,发起一轮新的确认提案。这就进入了提交阶段。提交阶段的提案发送出去,其他阶段进行提案值比较,返回最大的,所以提案者收到返回消息不带新的提案,说明锁定成功,如果有新的提案内容,进行提案值最大比较,然后替换更大的值。如果没有收到足够多的回复,则需要再次发出请求。
一旦多数接受了共同的提案值,则形成决议,称为最终确认的提案。
两个阶段分别是准备(prepare)和提交(commit)。准备阶段解决大家对哪个提案进行投票的问题,提交阶段解决确认最终值的问题。
简单来说,提案者发出提案后,收到一些反馈,有两种结果,一种结果是自己的提案被大多数节点接受了,另外一种是没被接受,没被接受就过会再试试。
提案者收到来自大多数的接受反馈,也不能认为这就是最终确认。因为这些接收者并不知道自己刚反馈的提案就是全局的绝对大多数。所以,引入新的一轮再确认阶段是必须的,提案者在判断这个提案可能被大多数接受的情况下,发起一轮新的确认提案。这就进入了提交阶段。提交阶段的提案发送出去,其他阶段进行提案值比较,返回最大的,所以提案者收到返回消息不带新的提案,说明锁定成功,如果有新的提案内容,进行提案值最大比较,然后替换更大的值。如果没有收到足够多的回复,则需要再次发出请求。
一旦多数接受了共同的提案值,则形成决议,称为最终确认的提案。