两阶段提交与三阶段提交

197 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

两阶段提交与三阶段提交

上篇文章中我们说到两阶段提交2pc,两阶段提交还是有很多缺点的,它可能因为网络问题导致数据不一致,比如协调者发送的提交事务的请求由于网络问题只有部分参与者能接收到,这样部分参与者提交了事务而另一部分参与者没有提交就造成了数据的不一致,第二个问题就是协调者如果挂掉,参与者既没有提交也没有回滚,第三个问题就是同时在执行的时候参与节点的服务都是阻塞的,不能对外提供服务

三阶段提交

那么什么是三阶段提交,三阶段提交能否能解决这些问题呢?

三阶段提交分为CanCommit阶段,PreCommit阶段和doCommit阶段。第一个阶段是检查自身状态是否满足了事务操作的条件,一般可能是首先获取到这个分布式事务的锁,第二个阶段就是开始事务,但是没有提交,并返回给协调者结果,第三个阶段就是对事务的提交或回滚。

这就是三阶段提交的大致内容,那么三阶段提交是否解决了两阶段提交产生的问题呢?三阶段提交参与者也有超时机制,在preCommit的时候,如果收不到协调者的消息会执行中断事务,在doCommit阶段如果迟迟收不到协调者的消息就会进行事务提交,而数据的一致性问题和协调者的单点故障问题依然存在

总结

两阶段提交和三阶段提交都会存在一定的问题,三阶段提交相对二阶段提交多了参与者的超时机制,但剩余问题并没有得到解决,比如数据的一致性和协调者的单点故障的问题。