XA是一个分布式事务协议,由Tuxedo提出。XA中大体分为两部分:事务管理器和本地资源管理器。其中本地资源管理器每每由数据库实现,好比Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器做为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理以下:java
做为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并经过底层事务服务(即JTS)实现。像不少其余的java规范同样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由如下几种:git
1.J2EE容器所提供的JTA实现(JBoss)
2.独立的JTA实现:如JOTM,Atomikos.这些实现能够应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。如Tomcat,Jetty以及普通的java应用。github
所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。数据库
XA通常由两阶段完成,称为two-phase commit(2PC)。api
阶段一为准备阶段,即全部的参与者准备执行事务并锁住须要的资源。参与者ready时,向transaction manager汇报本身已经准备好。服务器
阶段二为提交阶段。当transaction manager确认全部参与者都ready后,向全部参与者发送commit命令。架构
以下图所示:框架
XA的性能问题分布式
XA的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右。所以要尽可能避免XA事务,例如能够将数据写入本地,用高性能的消息系统分发数据。或使用数据库复制等技术。性能
只有在这些都没法实现,且性能不是瓶颈时才应该使用XA。
分布式事物问题,在互联网公司比较常见,例如“”分布式事物解决方案 可使用全局事物2pc(两段提交协议)、3pc(三段提交协议),消息中间件、tcc、gts、提供回滚接口、分布式数据库
2PC和3PC区别:https://blog.csdn.net/secretx/article/details/53322989
LCN 核心采用3PC+TCC补偿机制
LCN分布式事务框架v4.0 https://www.txlcn.org
"LCN并不生产事务,LCN只是本地事务的搬运工"
兼容SpringCloud、Dubbo
使用简单,低依赖,代码彻底开源
基于切面的强一致性事务框架
高可用,模块能够依赖Dubbo或SpringCloud的集群方式作集群化,TxManager也能够作集群化
支持本地事务和分布式事务共存
事务补偿机制,服务故障或挂机再启动时可恢复事务
参考网站 https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86
lcn框架原理
建立事务组 是指在事务发起方开始执行业务代码以前先调用TxManager建立事务组对象,而后拿到事务标示GroupId的过程。
添加事务组 添加事务组是指参与方在执行完业务方法之后,将该模块的事务信息添加通知给TxManager的操做。
关闭事务组 是指在发起方执行完业务代码之后,将发起方执行结果状态通知给TxManager的动做。当执行完关闭事务组的方法之后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。