为什么有三阶段提交事务
因为2阶段提交存在单点故障,同步阻塞,网络脑裂等问题,所以在两阶段的基础上做了改良,并提出了3
阶段提交的概念
2阶段提交和3阶段提交的区别
3阶段在2阶段的基础上做了2个改进点∶
1.增加了起时机制,同时为协授者和参与者都引入题时机制。
2.在2阶段的第1和第2中间插入Lee一个提交准备(PreCommitl)阶段。插入的这个阶段能保证最后提交之前,各个节点的状态都是一致的.
所谓的三个阶段分别是∶执行,询问,最后真正缓交。
第一阶段∶CanCommit
第二阶段∶PreCommit
第三阶段∶Do Commit
3阶段提交
1.询问CanCommit阶段
3pc的CanCommit阶段和2pc的准备阶段是一样的。协调者向参与参者发canCommit请求,参与者如果可以提交返ok,否则放回no
2.锁资源 prepared commit 阶段
在第1阶段,如果所有参与者都返回了ok,就进入了prepared Commit 阶段prepared commit阶段∶协调者向所有参与者发送prepared请求。然后等待所有参与者的返回。
如果所有参与者都返回ack,那就直接进入doCommit新介段,如果有一个参与者没有返同ack,那就发送rollback请求。
3.真正提交,doCommit阶段
协调者向所有参与者,发送docommit, 所有参与者都提交事务。
3阶段提交的宕机和网络脑裂问题
1.第一二阶段,如果出现了参与者或 协作者放障或网络骇裂问题。
解决方案∶和2pc的处理方法一样,所有参与者将rolback(因为还未进入第三阶段,所有参与者都不会接收到提交或回滚的命令,当前事务是无法继续提交的,故只能回滚。)
2.第三阶段,如果出现参与者域协调者故障或网络脑裂问题。
解决方案∶统一提交,因为前面第一二都OK了,所以系统有很大信心,成功提交的几率很大。
3阶段结论∶
三阶段提交其实没根本性解决问题,它仅仅是引入了perpared commit阶段,无法解决单点故障或网络脑裂问题,仅仅是多做了一次校验而已,治标不治本,无法彻底解决分布式一致性问题。