概述
两阶段提交(Two-phase Commit,2PC),通过引入事务协调者(Coordinator)来协调多个参与者的事务行为,并最终决定这些参与者的事务是否要真正执行。
运行过程
-
准备阶段:事务协调者询问参与者事务是否执行成功,参与者返回事务执行结果,此时事务并未提交。
-
提交阶段:若所有参与者事务都执行成功,则事务协调者通知参与者事务提交事务;否则,事务协调者通知参与者回滚事务。
XA接口规范协议
XA接口规范协议是一个分布式事务协议,它的基础是两阶段提交协议(2PC)。
XA中大致分为两部分:事务管理器和本地资源管理器。
本地资源管理器往往由数据库实现,几乎所有商业OLTP(联机事务处理)数据库都支持XA协议,实现了XA接口。
-
本地资源管理器往往由数据库实现,几乎所有商业OLTP(联机事务处理)数据库都支持XA协议,实现了XA接口。
-
事务管理器(即事务协调者Coordinator)作为全局的调度者,负责各个本地资源的提交和回滚;事务管理器一般由应用框架实现,如Java的Atomikos TransactionsEssentials
总结
- 缺点:
- 同步阻塞:所有事务参与者在等待其他参与者响应的时候都处于同步阻塞的状态,无法进行其他操作,即资源锁定时间太长。
- 单点问题:协调者在2PC中起到非常大的作用,若发生故障将会造成严重影响。特别是在第二阶段发生故障,所有参与者会一直处于等待状态,无法进行其他操作。
- 一致性问题:在第二阶段,若协调者只发送了部分Commit消息,此时网络发生异常,那么只有部分事务参与者接收到Commit消息,也就是说只有部分参与者提交了事务,那么会使系统数据不一致。
- 容错问题:任意一个节点失败则会导致整个事务失败,容错机制较低。
- 可用性:牺牲了可用性,对性能影响较大,不适合高并发的场景。
- 优点: 使用分布式事务的成本较低。在一致性上选择了尽量向实时一致性靠拢。