侧边栏壁纸
博主头像
码森林博主等级

一起走进码森林,享受编程的乐趣,发现科技的魅力,创造智能的未来!

  • 累计撰写 146 篇文章
  • 累计创建 74 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

分布式事务 | 2PC 模型

码森林
2022-06-09 / 0 评论 / 0 点赞 / 438 阅读 / 678 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

2PC 模型

2PC 模型是指两阶段提交协议模型,整个事务分为 Prepare 阶段和 Commit 阶段。其中 2 指的是两个阶段,P 指的是准备(Prepare),C 指的是提交(Commit)。

执行流程

先来看下 2PC 模型事务执行成功的流程:

分布式事务-2PC事务执行成功流程1
  • Prepare 阶段:由事务管理器向各个参与全局事务的资源管理器发送 Prepare 消息,各资源管理器收到消息后,将事务写入本地的 Redo Log 和 Undo Log 中,并向事务管理器返回事务执行成功的状态。
  • Commit 阶段:在收到事务执行成功的消息后,由事务管理器向各个参与全局事务的资源管理器发送 R 消息,各资源管理器收到消息后,提交本地事务,并将提交成功的消息返回给事务管理器,同时释放本地锁定的资源。

再来看 2PC 模型事务执行失败的流程:

分布式事务-2PC事务执行失败流程
  • Prepare 阶段:由事务管理器向各个参与全局事务的资源管理器发送 Prepare 消息,各资源管理器收到消息后,将事务写入本地的 Redo Log 和 Undo Log 时失败,会向事务管理器发送事务执行失败的消息。
  • Commit 阶段:在收到事务执行失败的消息后,事务管理器会向在 Prepare 阶段执行事务成功的资源管理器发送 Rollback 消息,对应的资源管理器收到 RollBack 消息后回滚本地事务,并将回滚成功的消息返回给事务管理器。

存在的问题

  • 同步阻塞问题:事务的执行过程中,所有参与事务的节点都会对其占用的公共资源进行加锁,导致其他访问该公共资源的进程或者线程阻塞。
  • 单点故障问题:如果事务管理器发生故障,则参与的资源管理器可能会一直阻塞。
  • 数据不一致问题:如果在 Commit 阶段,由于网络或者部分资源管理器发生故障,导致部分资源管理器没有接受到事务管理器发送的 Commit 消息,会导致数据不一致的问题。
  • 无法解决的问题:如果在 Commit 阶段,事务管理器发送 Commit 消息后宕机,并且唯一接收到这条 Commit 消息的资源管理器也发生了宕机,则无法确认事务是否已经提交。
0

评论区