2PC 模型
2PC 模型是指两阶段提交协议模型,整个事务分为 Prepare 阶段和 Commit 阶段。其中 2 指的是两个阶段,P 指的是准备(Prepare),C 指的是提交(Commit)。
执行流程
先来看下 2PC 模型事务执行成功的流程:
- Prepare 阶段:由事务管理器向各个参与全局事务的资源管理器发送 Prepare 消息,各资源管理器收到消息后,将事务写入本地的 Redo Log 和 Undo Log 中,并向事务管理器返回事务执行成功的状态。
- Commit 阶段:在收到事务执行成功的消息后,由事务管理器向各个参与全局事务的资源管理器发送 R 消息,各资源管理器收到消息后,提交本地事务,并将提交成功的消息返回给事务管理器,同时释放本地锁定的资源。
再来看 2PC 模型事务执行失败的流程:
- Prepare 阶段:由事务管理器向各个参与全局事务的资源管理器发送 Prepare 消息,各资源管理器收到消息后,将事务写入本地的 Redo Log 和 Undo Log 时失败,会向事务管理器发送事务执行失败的消息。
- Commit 阶段:在收到事务执行失败的消息后,事务管理器会向在 Prepare 阶段执行事务成功的资源管理器发送 Rollback 消息,对应的资源管理器收到 RollBack 消息后回滚本地事务,并将回滚成功的消息返回给事务管理器。
存在的问题
- 同步阻塞问题:事务的执行过程中,所有参与事务的节点都会对其占用的公共资源进行加锁,导致其他访问该公共资源的进程或者线程阻塞。
- 单点故障问题:如果事务管理器发生故障,则参与的资源管理器可能会一直阻塞。
- 数据不一致问题:如果在 Commit 阶段,由于网络或者部分资源管理器发生故障,导致部分资源管理器没有接受到事务管理器发送的 Commit 消息,会导致数据不一致的问题。
- 无法解决的问题:如果在 Commit 阶段,事务管理器发送 Commit 消息后宕机,并且唯一接收到这条 Commit 消息的资源管理器也发生了宕机,则无法确认事务是否已经提交。
评论区