二阶段提交
协调者和参与者
1> 协调者发送prepare的消息给所有参与者
2> 协调者收到所有参与者的ready消息
3> 协调者通知参与者提交事务
一般情况下,两阶段提交机制都能较好的运行,当在事务进行过程中,有参与者宕机时,他重启以后,可以通过询问其他参与者或者协调者,从而知道这个事务到底提交了没有。
问题: 当协调者在发出commit消息后宕机了,而唯一收到这条命令的一个参与者也宕机了, 这个时候这
个事务就处于一个未知的状态,没有人知道这个事务到底是提交了还是未提交,从而需要数据库管理员的介入,防止数据库进入一个不一致的状态。
三阶段提交
增加2个改动点
也就是说,除了引入超时机制之外,3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有CanCommit
、PreCommit
、DoCommit
三个阶段。
http://www.hollischuang.com/archives/681
、引入超时机制。同时在协调者和参与者中都引入超时机制。2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。