参与者:负责投票网络
协调者:负责发起询问和接受答复spa
1.询问阶段事务
是否能执行事务提交操做。若是参与者可以执行事务的提交,先执行事务操做,而后返回YES,若是没有成功执行事务操做,就返回NOit
2.提交阶段请求
执行commit或者rollback。数据
第二阶段协调者和参与者都挂了,挂了的这个参与者在挂以前已经执行了操做,可是因为他挂了,没有人知道他执行了什么操做,会致使数据不一致状况co
还有不少其余缺点:阻塞、脑裂(网络分区)问题等,3PC的出现就是为了解决这些问题。阻塞
参与者、协调者超时
1.询问阶段(CanCommit)commit
询问全部参与者是否可能够执行事务操做,并不在本阶段执行事务操做。
2.预准备阶段(PreCommit)
当协调者在第一阶段收到全部的参与者都返回YES时,第二阶段执行事务操做。
3.提交阶段(DoCommit)
第三阶段执行commit或者rollback。
在doCommit阶段,若是参与者没法及时接收到来自协调者的doCommit或者rebort请求时,会在等待超时以后,会继续进行事务的提交。这样会致使数据不一致。
1.将2PC的一阶段拆分为了两个阶段
2.引入超时机制。