转于自己在公司的Blog:
http://pt.alibaba-inc.com/wp/experience_1264/distributed-transaction.html
关于Dubbo服务框架的分布式事务,虽然现在不急着做,但可以讨论一下。
我觉得事务的管理不应该属于Dubbo框架,
Dubbo只需实现可被事务管理即可,
像JDBC和JMS都是可被事务管理的分布式资源,
Dubbo只要实现相同的可被事务管理的行为,比如可以回滚,
其它事务的调度,都应该由专门的事务管理器实现。
在Java中,分布式事务主要的规范是JTA/XA,
其中:JTA是Java的事务管理器规范,
XA是工业标准的X/Open CAE规范,可被两阶段提交及回滚的事务资源定义,
比如某数据库实现了XA规范,则不管是JTA,还是MSDTC,都可以基于同样的行为对该数据库进行事务处理。
在JTA/XA中,主要有两个扩展点:
(1) TransactionManager
JTA事务管理器接口,实现该接口,即可完成对所有XA资源的事务调度,比如BEA的Tuxedo,JBossJTA等。
(2) XAResource
XA资源接口,实现该接口,即可被任意TransactionManager调度,比如:JDBC的XAConnection,JMS的XAMQ等。
而Dubbo的远程服务,也应该是一个XAResource,比如:XAInvoker和XAExporter,
Dubbo只需在第一次提交时,将请求发到服务提供方进行缓存和写盘,
在第二次提交时,再基于缓存调用服务的Impl实现,
当然一些健状性分支流程要考虑清楚。
JTA/XA的基本原理如下:
1. 用户启动一个事务:
transactionManager.begin();
2. 事务管理器在当前线程中初始化一个事务实例:
threadLocal.set(new TransactionImpl());
3. 用户调用JDBC或JMS或Dubbo请求,请求内部初始化一个XAResource实例:
XAResource xaResource = new XAResourceImpl(); // 比如:XAConnection
4. JDBC或JMS或Dubbo内部从当前线程获取事务:
Transaction transaction = transactionManager.getTransaction(); // 其内部为:threadLocal.get();
5. 将当前XAResource注册到事务中:
transaction.enlistResource(xaResource);
6. 用户提交一个事务:
transactionManager.commit(); // 其内部为:getTransaction().commit();
7. 事务for循环调用所有注册的XAResource的两阶段提交:
Xid xid = new XidImpl();
for (XAResource xaResource: xaResources) {
xaResource.prepare(xid);
xaResource.commit(xid, true);
xaResource.commit(xid, false);
}
8. 当然,还有一些异常流程,比如rollback和forget等。
举例:
TransactionManager transactionManager = ...; // 从JNDI进行lookup等方式获取
transactionManager.begin(); // 启动事务
try {
jdbcConn.executeUpdate(sql); // 执行SQL语句,DB写入binlog,但不更新表
jmsMQ.send(message); // 发送消息,MQ记录消息,但不进入队列
dubboService.invoke(parameters); // 调用远程服务,Provider缓存请求信息,但不执行
transactionManager.commit(); // 提交事务,数据库,消息队列,远程服务同时提交
} catch(Throwable t) {
transactionManager.rollback(); // 回滚事务,数据库,消息队列,远程服务同时回滚
}
- 大小: 37 KB
分享到:
相关推荐
本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...
分布式事务是一个绕不过去的挑战!微服务架构本质上就是分布式服务化架构,微服务架构的流行,让分布式事务问题日益突出!尤其是在订单业务、资金业务等系统核心业务流程中,一定要有可靠的分布式事务解决方案来保证...
微服务架构的分布式事务处理方案
java分布式事务demo
这篇文章将介绍什么是分布式事务,分布式事务解决什么问题,对 分布式事务实现的难点,解决思路,不同场景下方案的选择,通过图解的方式进行梳理、总结和比较。相信耐心看完这篇文章,谈到分布式事务,不再只是有“2...
最全分布式事务视频课程详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 视频课程大纲: 1.事务基本概念讲解(本地、分布式) 2.分布式事务理论(CAP、BASE) 3.分布式事务解决方案之2PC(xa、...
介绍分布式事务的定义、原则和实现原则,介绍使用Spring框架实现分布式事务的几种方式,包括使用JTA、Spring事务同步、链式事务等,并通过实战介绍其实现。除此以外还介绍了一些分布式事务相关的技术,如幂等性、...
深入理解分布式事务
这就涉及到到了分布式事务,用需要操作的资源位于多个资源服务器上,而应用需要保证对于多个资源服务器的数据的操作,要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。...
详细讲解了通过消息来解决分布式事务的问题
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
分布式事务ppt
自己封装redisson方法,同时通过注解的方式加入redis分布式事务锁,可靠。
分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 dts-core 、dts-schedule、 dts-server 两部分,dts-core是一个...
为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。 * 阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则...
实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。
微服务架构的分布式事务解决方案,完整31讲。,百度云资源 非加密,无密码,
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于...
1、详细介绍了Seata阿里分布式事务中间件; 2、对整个分布式事务解决方案原理进行了详细的分析,包括tcc、xa、saga等解决方案 3、IT老齐老师视频资料配套pdf;
基于若依项目改造的多模块分布式事务,使用了atomikos进行分布式事务的管理。