分布式事务
分布式事务解决的是多个服务操作数据的一致性问题。
1.XA规范
- XA规范主要定义了全局事务管理器(Transaction Manager)和局部资源管理器(Resource Manager)之间的接口。
- XA接口是双向的系统接口,在事务管理器以及多个资源管理器之间形成通信桥梁。
- XA引入的事务管理器相当于“协调者”的角色。
- 事务管理器控制着全局事务,管理事务生命周期,协调资源。
- 资源管理器负责控制和管理实际资源(如数据库或JMS队列)。
- Oracle,DB2,postgreSQL等都提供对XA的支持。
2.JTA
- Java平台上的事务规范JTA(Java Transaction API)定义了对XA事务的支持。实际上JTA是基于XA架构建模的。
- JTA中事务管理器抽象为
javax.transaction.TransactionManager
接口,并通过底层事务服务JTS(Java Transaction Service)实现。 - 和很多其他的Java规范一样,JTA仅仅定义了接口,具体实现则是由供应商(如J2EEE厂商)负责提供。
- 目前JTA的实现有以下几种:
- J2EE容器提供的JTA实现JBoss。
- 独立的JTA实现:JOTM(Java Open Transaction Manager),Atomikos。这些实现可以应用在不使用J2EE应用服务器的环境中。
3.TCC机制
事务管理模块在服务A,服务B执行完毕后尝试执行DB事务,之后如果全局事务决定提交,则逐个调用A和B的confirm逻辑;如果全局事务决定回滚,则逐个调用A和B的cancel逻辑。
知名的分布式事务管理器主要有Atomikos(支持XA和TCC两种机制),bitronix(仅支持XA机制),narayana(仅支持XA机制)。
对Dubbo提供开箱即用支持的分布式事务管理器有:ByteJTA(基于XA机制),ByteTCC(基于TCC机制)。