java分布式事物cp和ap java分布式事务实现_github

JTA是Java Transaction API简称 ,即Java事务管理器,主要管理本地事务。本地事务是只同一个数据库源中,多次数据库连接之间的事务,使得这多个数据表操作遵循ACID。

 分布式事务四种解决方案希望对需要解决分布式事务的人,提供点小小帮助:
1.基于消息队列最终一致性:https://github.com/yu199195/myth
2.TCC型解决方案:https://github.com/yu199195/happylifeplat-tcc
3.二阶段提交强一致性:https://github.com/yu199195/happylifeplat-transaction
4.LCN:https://github.com/codingapi/tx-lcn
欢迎大家star,fork代码,提供你的优秀代码,或者架构设计提出改进建议! 

什么是XA接口

XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理如下:

java分布式事物cp和ap java分布式事务实现_java分布式事物cp和ap_02

什么是Jta

作为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(即JTS)实现。像很多其他的java规范一样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由以下几种:

1.J2EE容器所提供的JTA实现(JBoss)
2.独立的JTA实现:如JOTM,Atomikos.这些实现可以应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。如Tomcat,Jetty以及普通的java应用。

如果想让JTA管理多台数据库操作的分布式事务,需要XA支持,Open Group设计的X / Open分布式事务处理定义了一种标准通信架构。允许多个应用程序共享多个资源管理器提供的资源,并允许其工作协调到全局事务中。该XA接口使资源管理者参加事务,执行2PC(两个阶段提交),并在发生故障之后恢复。

 

2PC(两段提交)含义:首先, 事务协调员向每个服务器询问一遍,要求每个数据库都进行precommit的操作和是否可能实现 commit. 如果所有数据库都同意commit ,第二段开始。第二段:事务协调员要求每个数据库commit数据. 如果任何数据库否决commit, 那么所有数据库将被要求回滚。当事务对某个数据库锁定时,这个数据库或列就不可用,或者响应时间很慢。牺牲可用性了。

 

JTA + XA能够实现分布式事务2PC 。

 

Spring提供了JTA介入方式,但是没有提供JTA实现,目前JTA实现: Java Open Transaction Manager (JOTM), JBoss TS, Bitronix Transaction Manager (BTM), 和 Atomikos。