有Basic paxos以及其变种Fast Paxos和Mutil Paxos,Raft,ZAB,2PC(存在中心节点),3PC(存在中心节点)
2PC–二阶段提交
协调者和参与者
协调者能看到所有的参与者的事务执行情况。
第一阶段:
协调者向参与者发送任务事务,并且等待参与者的回应。
参与者收到事务后,执行事务,写入undo与redo,并且向协调者返回执行结果。
第二阶段:
成功执行:
协调者如果收到所有的参与者的执行成功,将会向所有参与者发送commit指令,参与者收到commit后,会执行事务提交,并且释放执行过程中的资源,并且向协调者发送ack,协调者收到所有ack,代表事务执行成功。
中断事务:
存在参与者返回no,或者超时,那么就会中断事务。
协调者会向参与者发送回滚请求,参与者收到回滚请求后,用undo执行事务回滚,并且释放执行期间的资源。参与者回滚完成后发送ack,协调者收到所有ack代表事务中断。
2PC是强一致性
缺点:同步阻塞(参与者要互相阻塞等待),协调者的单点问题。
如果只有部分参与者收到commit,那么没收到的不提交,会造成数据不一致。
太过保守,只靠超时机制中断,没有容错,一个节点失败都会导致事务失败。
3PC----三阶段提交
第一阶段:CanCommit
协调者向参与者发送事务内容的canComiit请求,询问是否可以执行事务提交,并且等待响应,如果参与者可以执行会回复yes,并进入预备状态。
第二阶段:PreCommit
1.如果canCommit回复的是yes,就会执行事务预执行。
(1)发送预请求提交
协调者发送PreCommit请求,并且进入PreCommit阶段。
(2)事务预提交
接收者收到PreCommit请求后,会执行事务操作,并将Undo和Redo信息记录到日志中。
(3)参与者向协调者反馈响应
如果成功执行返回ack响应。同时等待最终命令。
2.如果回复的是no,就会中断事务。
第三阶段:doCommit进行真正的事务提交
协调者向参与者发送doCommit,参与者收到doCommit后会事务提交,释放资源,然后返回ack。
当有参与者预提交返回了no,协调者会中断事务,向参与者发送abso信息,执行事务回滚。
三阶段提交比二阶段多了一个能否提交的询问的阶段,但是仍然需要阻塞。
二阶段和三阶段都是有主节点(协调者),而Paxos算法是完全分布式的。