两阶段提交与三阶段提交
两阶段提交与三阶段提交
两阶段提交
上篇文章中我们说到两阶段提交 2pc,两阶段提交还是有很多缺点的,它可能因为网络问题导致数据不一致,比如协调者发送的提交事务的请求由于网络问题只有部分参与者能接收到,这样部分参与者提交了事务而另一部分参与者没有提交就造成了数据的不一致,第二个问题就是协调者如果挂掉,参与者既没有提交也没有回滚,第三个问题就是同时在执行的时候参与节点的服务都是阻塞的,不能对外提供服务
三阶段提交
那么什么是三阶段提交,三阶段提交能否能解决这些问题呢?
三阶段提交分为 CanCommit 阶段,PreCommit 阶段和 doCommit 阶段。第一个阶段是检查自身状态是否满足了事务操作的条件,一般可能是首先获取到这个分布式事务的锁,第二个阶段就是开始事务,但是没有提交,并返回给协调者结果,第三个阶段就是对事务的提交或回滚。
这就是三阶段提交的大致内容,那么三阶段提交是否解决了两阶段提交产生的问题呢?三阶段提交参与者也有超时机制,在 preCommit 的时候,如果收不到协调者的消息会执行中断事务,在 doCommit 阶段如果迟迟收不到协调者的消息就会进行事务提交,而数据的一致性问题和协调者的单点故障问题依然存在
总结
两阶段提交和三阶段提交都会存在一定的问题,三阶段提交相对二阶段提交多了参与者的超时机制,但剩余问题并没有得到解决,比如数据的一致性和协调者的单点故障的问题。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
关注
盼盼小课堂
,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/700459d55a2dc2c0d12e1aa99】。文章转载请联系作者。
评论