2PC 二阶段提交协议与3PC

本文深入探讨了分布式事务中的2PC(两阶段提交)和3PC(三阶段提交)协议。2PC在第一阶段,参与者执行本地事务但不提交,协调者根据参与者响应决定是否提交或回滚。然而,2PC存在同步阻塞、单点故障和数据不一致等问题。3PC在第一阶段增加了cancommit阶段,参与者在precommit阶段才执行本地事务,降低了资源占用,但仍面临类似的问题。3PC旨在解决2PC的不足,但并未完全消除风险。
摘要由CSDN通过智能技术生成

一,2PC 二阶段提交协议,介绍

如下单:涉及订单服务,库存服务,库存服务执行失败,协调者会告诉订单服务进行回滚。

概括为:两个角色:参与者,协调者,参与者将操作成败通知协调者,再有协调者决定是否提交操作,或终止操作。

第一阶段:准备阶段;多个事物,各自本地事物,不提交

事物协调者给每个参与者发送prepare消息,参与者要么返回执行失败,要么执行本地事物,写本地的redo 和 undo日志,但不提交。

详细分为三个阶段:

1.协调者问每个协调者是否可以提交,等待响应

2.参与者执行事物操作,并写入redo和undo日志,注意:若成功每个参与者已经执行了事物

订单服务,库存服务,各自执行自己的事物

3.参与者响应,参与者执行事物成功,返回同意消息,执行失败,返回终止消息

第二阶段:提交或回滚

如果协调者收到参与者的失败消息或者超时,则给每个参与者发送回滚消息,否则会发送提交消息,然后参与者根据协调者消息,提交或者回滚,最终完成事物。

图文分别演示完整过程,提交或回滚

二,缺点

1.同步阻塞。参与者是事物阻塞的,占用公共资源(数据库连接),第三方节点可能阻塞

2.单点故障。协调者故障,参与者一直阻塞下去,尤其第二阶段,参与者处于锁定事物资源状态中,无法继续完成事物

3.数据不一致。第二阶段中,发生局部网络异常或者发送commit请求中协调者故障。导致部分参与者执行成功,部分失败

三,3PC

1.can commit 

与2pc第一阶段很像,询问:协调者发送commit请求;响应:参与者可以提交返回YES响应,否则返回NO响应,不同的是2pc在第一阶段参与者执行了本地事物,这里并没有执行本地事物

2.pre commit

协调者根据参与者响应决定是否执行preCommit操作,都是返回YES,执行本地事物,写入redo undo log。

事物中断:协调者收到任意NO,或等待超时,执行事物中断

发送中断请求,协调者向所有参与者发送abort请求,参与者收到abort请求,执行事物中断,注意此时参与者并未执行本地事物。

3.do commit

 四,区别 

3pc多了第一阶段,参与者没有执行本地事物,在第二阶段才执行,没有占用资源。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值