一, 2pc 两阶段提交.
1,事物询问,执行事物,将操作记录undo 和 redo.
2,各个 参与者都需要像协调者汇报情况,是否OK,如果不OK,那就中断.
3,执行事物提交.像所有参与者发出commit.
4,参与者执行之后回复ACK,完成事物.
5,中断事物,任何参与者像协调者反馈NO之后或者等待超时之后,协调者就会发送RollBack 请求 .
参与者在完成回滚之后会发送ACK,
优点,简单,实现难度低.
缺点,同步阻塞,单点问题,数据不一致,太过于保守.
二,3pc 三阶段提交
1,canCommit ,PreCommit,doCommit
2,询问各个参与者,是否可以顺利执行事物.然后进行与提交,记录redo 和undo ,返回结果给协调者.进行提交请求,
3,任何参与者返回NO或者超时,都会触发中断.但是这个协议是,如果没有收到doCommit也会继续提交事物,在doCommit 的时候如果超时将会继续提交.
白话:1,能不能干->预提交记录日志->提交事务.提交事物阶段如果没有收到协调者的明确反馈,就会继续提交事物.
三,paxos算法
1,proposer选取一个提案编号为m0,像Accepter 的某个超过半数的子集的成员发出请求.
2,如果Accepter收到任何一个提案,他不会通过任何编号比他批准过的编号小的提案.如果刚反回过,这返回之前返回的value
3,Proposer 生成一个提案,m0,max(value1,value2...valuen)如果没有值,则随机生成.
4,只要Accepter 没有批准过大于m0的提案,Accepter就必须批准这个提案.
5,将批准的提案通知learner.
四,zab算法描述
1,发现,同步,广播三个步骤.
2,http://www.cnblogs.com/softlin/p/4810759.html