XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。
今天看了mysql管网的一篇文章,感觉写的很好,以前对xa事物理解的一知半解,现在感觉清晰很多,对于mysql而言,XA使每个mysql服务器充当着全局事物中的xa事物的资源管理器的角色,连接到mysql服务器的客户端应用程序充当事物管理器。
使用全局事物的应用程序涉及一个或者多个资源管理器和事物管理器:
资源管理器(RM):资源管理器提供对事物性资源的访问。数据库其实就是一种资源管理器,必需提交或者回滚有RM管理的事物。
事物管理器(TM):主要协调作为全局事物中的部分事物。它作为RMS中每个事物的协调者。
执行全局事物的过程采用两阶段提交(2PC),全局事物是发生在分支执行的操作之后的:
第一阶段:所有分支的操作都准备好了,由TM告知每个分支准备提交,此时,作为全局事物中的每个RM记录着在稳定存储中的动作(也就是说记录着准备好的这个动作)。
第二阶段:TM会告诉RMS是否提交或回滚,如果所有分支表明准备好能够提交时,RMS会被告知提交,如果任何一个RM表明没有准备好或者不能提交,则进行全部回滚。
现在对分布事物的解决方案有很多种方式,对每种解决方案的实现有很多种方式,次处采用Atomikos的开源类事物管理器作为Demo。
加载依赖:
配置事物管理器(推荐使用springboot,这里未使用):
添加事物注解:
全局事物管理器作为协调者在整个两阶段提交过程中扮演着举足轻重的作用,一旦协调者所在服务器宕机,那么就会影响整个数据库集群的正常运行。比如在第二阶段中,如果协调者因为故障不能正常发送事务提交或回滚通知,那么参与者们将一直处于阻塞状态,整个数据库集群将无法提供服务。
所以,在大多数的分布式环境中并不会采用这种实现方式去处理分布式事物,相比更多的可能会采用mq+本地持久化的方式去处理。
领取专属 10元无门槛券
私享最新 技术干货