二阶段提交的事务正常提交的完整流程如下图:
二阶段提交事务回滚的完整流程如下图:
两阶段提交(2PC)
二阶段提交协议(Two-phase Commit,即 2PC)是常用的分布式事务解决方案,即将事务的提交过程分为两个阶段来进行处理。
两个阶段分别为:
1、准备阶段:由事务的协调者发起询问参与者是否可以提交事务,但是这一阶段并未提交事务
(1)、协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复
(2)、各参与者执行事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)
(3)、如参与者执行成功,给协调者反馈同意,否则反馈中止
2、提交阶段:由事务的协调者根据返回的结果,要求每个数据库提交或回滚数据。
参与的角色:
1、事务协调者(事务管理器):事务的发起者
2、事务参与者(资源管理器):事务的执行者
mysql的事务就是通过「日志系统」来完成两阶段提交的。
2PC可作用于:
1、单机集中式系统:由事务管理器协调多个资源管理器;
2、分布式系统:由一个全局的事务管理器协调各个子系统的局部事务管理器完成两阶段提交
可能会存在哪些问题?
1、单点故障:一旦事务管理器出现故障,整个系统不可用
2、数据不一致:在阶段二,如果事务管理器只发送了部分 commit 消息,此时网络发生异常,那么只有部分参与者接收到 commit 消息,
也就是说只有部分参与者提交了事务,使得系统数据不一致。
3、响应时间较长:整个消息链路是串行的,要等待响应结果,不适合高并发的场景
4、不确定性:当事务管理器发送 commit 之后,并且此时只有一个参与者收到了 commit,那么当该参与者与事务管理器同时宕机之后,
重新选举的事务管理器无法确定该条消息是否提交成功。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。