目录
1 2PC和3PC
1.1 2PC
大家不要将两阶段提交想的复杂,事实上,这个协议很简单,prepare阶段参与者只是执行事务,但不提交,此时已能知道能否成功执行,并将此状态反馈给协调者。协调者收到都成功,则通知所有参与者commit。若只要有一个反馈失败,则通知所有参与者rollback。协调者在commit阶段发出commit或rollback通知后就不管了。
1.2 3PC
3PC主要解决的单点故障问题,并减少阻塞
-
引入超时机制。同时在协调者和参与者中都引入超时机制。
-
在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的
2 Paxos算法
2.1算法原理
Paxos要实现的目标的是:
T1.一次选举必须要选定一个议案(不能出现所有议案都被拒绝的情况)
T2.一次选举必须只选定一个议案(不能出现两个议案有不同的值,却都被选定的情况)
Paxos算法的必须要能满足:
P1:一个Acceptor必须接受它收到的第一个议案。
P2:如果一个值为v的议案被选定了,那么被选定的更大编号的议案,它的值必须也是v。
为满足P2:
要求提出议案符合P2c:
在所有Acceptor中,任意选取半数以上的Acceptor集合,我们称这个集合为S。Proposal新提出的议案(简称Pnew)必须符合下面两个条件之一:
1)如果S中所有Acceptor都没有接受过议案的话,那么Pnew的编号保证唯一性和递增即可,Pnew的值可以是任意值。
2)如果S中有一个或多个Acceptor曾经接受过议案的话,要先找出其中编号最大的那个议案,假设它的编号为N,值为V。那么Pnew的编号必须大于N,Pnew的值必须等于V。
2.2算法执行过程