分布式事务——《2PC、3PC》数据库层的分布式事务

背景

在微服务架构下。
有时事务并不能在同一台服务器内完成,还得调用其他服务的事务方法,这就是分布式事务

假如没有经过处理,那就不能保证ACID
比如原子性:
我的事务方法分别调用了A服务B服务的修改方法。

  1. 事务方法开始;
  2. A服务方法 执行成功 \textcolor{green}{执行成功} 执行成功;
  3. B服务方法 执行失败 \textcolor{red}{执行失败} 执行失败;
  4. 事务方法结束;
    事务方法结束后,B服务方法失败,但A服务方法没有回滚,显然 不满足原子性 \textcolor{red}{不满足原子性} 不满足原子性

这就微服务带来的问题之一。


2PC(Two-phase commit protocol)

二阶段提交,引入一个事务协调者来管理参与者(MYSQL)的提交回滚
二阶段顾名思义,有两个阶段:

  1. 准备阶段:
    • 协调者:向参与者发送准备命令,等待参与者的响应。
    • 参与者: 执行事务,返回响应。
  2. 提交/回滚阶段:
    • 协调者: 根据响应向参与者发送提交/回滚请求。
    • 参与者: 执行提交/回滚请求。
      缺点:
      假如网络问题 或 协调者出问题了,参与者事务都已经处理完了,但是无法收到协调者的提交命令,这就导致数据库相关的记录阻塞,其他事务也无法对相关记录进行修改。
      所以就引入的超时机制——3PC。

3PC(Two-phase commit protocol)

  1. 准备阶段:
    • 协调者:向参与者发送准备命令,等待参与者的响应。
    • 参与者: 返回响应, 表示可以执行事务。。
  2. 预提交阶段
    • 协调者: 向参与者发送预提交请求,进入预提交阶段。
    • 参与者:执行事务后返回ACK响应,同时等待最终指令。同时加入超时机制。
  3. 提交/回滚阶段
    • 协调者: 接收到所有参与者的ACK响应之后,根据响应向参与者发送提交/回滚请求。
    • 参与者: 执行提交/回滚请求。

注意: 2PC 和 3PC 都不能保证数据100%一致,因此一般都需要有定时扫描补偿机制

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码鹿的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值