分布式事务方案——基于两阶段提交的 XA事务
在这篇文章中深入理解分布式事务中的两阶段提交(2PC),什么是2PC,2PC原理是怎样?2PC有没有什么问题?解决方案?无法解决的情况?
我们详细介绍了什么是两阶段提交,接下来,让我们来看看基于两阶段提交实现的 XA 事务
什么是XA事务?
XA事务是由X/Open组织提出的分布式事务处理规范,主要定义了事务管理器(TM)和资源管理器(RM)之间的接口。XA事务通过两阶段提交协议(2PC)来确保分布式系统中的数据一致性。
本地资源管理器,往往由数据库实现,主流的关系型数据库产品比如 Oracle、MySQL都实现了 XA 接口
事务管理器作为全局的调度者,负责各个本地资源的提交和回滚
还有一个是应用程序(AP),定义事务的边界,指定全局事务中的操作
XA最主要的作用是定义了事务管理器和资源管理器的交互接口
在这里一个 AP需要操作多个 RM 的资源,AP 通过 TM 来声明一个全局事务,然后操作不同的 RM 上的资源,最后通知 TM 来提交或者回滚全局事务
XA 事务还允许不同数据库之间的分布式事务,如一台服务器是 MySQL ,另一台是 Oracle,只要参与全局事务中的每个节点都支持 XA 事务就行。
实现原理
XA 本质上就是借助两阶段提交协议来实现 分布式事务的,原理如下:
接下来分别看看 XA 事务成功和失败的情况:
结论
XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁。基于两阶段提交的分布式事务在提交事务时需要在多个节点之间进行协调,最大限度延后了提交事务的时间点,客观上延长事务的执行时间,这会导致事务在访问共享资源时发生冲突和死锁的概率增高,在实际应用中需要根据具体场景进行权衡和选择。