您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
TX-LCN分布式事务Demo实战

 
   次浏览      
 2019-9-29
 
编辑推荐:

本文来自于博客园,本篇文章主要介绍了分布式事物实战的原理和事务模式,希望对您的学习有所帮助。

1.1. 原理介绍

1.1.1. 事务控制原理

TX-LCN由两大模块组成, TxClient、TxManager,TxClient作为模块的依赖框架, 提供TX-LCN的标准支持,TxManager作为分布式事务的控制放。事务发起方或者参与反都由TxClient端来控制。 (简单来说就是单独部署一套TxManager模块来实现事务管理,TxClient就是我们自己的服务系统) 原理图如下:

1.1.2. LCN事务模式

1.1.2.1. 原理介绍

LCN模式是通过代理Connection的方式实现对本地事务的操作, 然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作, 该代理的连接将由LCN连接池管理。

1.1.2.2. 模式特点

该模式对代码的嵌入性为低。

该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。

该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。

该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间

1.1.3. TCC事务模式

1.1.3.1. 原理介绍

TCC事务机制相对于传统事务机制(X/Open XA Two-Phase-Commit), 其特征在于它不依赖资源管理器(RM)对XA的支持,而是通过对(由业务系统提供的)业务逻辑的调度来实现分布式事务。 主要由三步操作,Try: 尝试执行业务、 Confirm:确认执行业务、 Cancel: 取消执行业务。

1.1.3.2. 模式特点

该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。

该模式对有无本地事务控制都可以支持使用面广。

数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。

1.1.4. TXC事务模式

1.1.4.1. 原理介绍

TXC模式命名来源于阿里云的GTS,实现原理是在执行SQL之前, 先查询SQL的影响数据保存起来然后再执行业务。当需要回滚的时候就采用这些记录数据回滚事务。

1.1.4.2. 模式特点

该模式同样对代码的嵌入性低。

该模式仅限于对支持SQL方式的模块支持。

该模式由于每次执行SQL之前需要先查询影响数据, 因此相比LCN模式消耗资源与时间要多。

该模式不会占用数据库的连接资源。

1.2. 快速开始

1.2.1. 吐槽

坑点一:不要相信官方网站上的的快速开始和示例,不知道是多久以前的了,我捣鼓了很久,下下来的代码缺斤少两的,打包了源代码也满足不了这示例代码的需求

坑点二:不要直接使用源代码的tx-manager,肯定仍旧缺少配置,或者和示例代码版本不一致

1.2.2. tx-manager

https://pan.baidu.com/s/1cLKAeE#list/path=%2Fshare link974324822- 625872931897976%2Ftx-manager&parentPath=%2Fsharelink974324822 -625872931897976

这个tx-manager直接从官方提供的网盘下载,我下的4.1版本的 修改配置文件,eureka和redis都整成自己的 直接java -jar tx-manager.jar 运行起来就可以了

1.2.3. SpringCloud Demo

https://github.com/codingapi/springcloud-lcn-demo

上述地址为4.0版本的demo,经试验可以使用

我用mybatis-demo这个包做的试验,里面两个module,分别修改 application.properties,只需要修改数据库mysql和eureka地址就行

当然数据库别忘了建,建个test库,新建下列表用于测试

USE test;

DROP TABLE IF EXISTS `t_test`;

CREATE TABLE `t_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

1.3. 使用总结

如果需要在自己的项目使用LCN只需要两步

引入pom

<lcn.last.version>4.1.0</lcn.last.version>

<dependency>
<groupId>com.codingapi</groupId>
<artifactId>transaction-springcloud </artifactId>
<version>${lcn.last.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.codingapi</groupId>
<artifactId>tx-plugins-db</artifactId>
<version>${lcn.last.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>

加一个注解,譬如

@Override
@TxTransaction(isStart = true)
@Transactional
public int save() {


int rs2 = demo2Client.save();

int rs1 = testMapper.save ("mybatis-hello-1");
// int rs22 = demo2Client.save();

// int v = 100/0;

return rs1+rs2;
}

加上 @TxTransaction(isStart = true) 表示事务开始,在走完整个流程以前,事务都会由tx-manager来协调

1.4. 4.0与5.0版本

5.0刚出来没多久,也就1月份开始大量提交,并已经交由codingApi团队开发维护, 对5.0的使用,或许还要经历些时间的磨练

对上述这个注解,在4.0我找到原代码是这样的

/**
* Created by lorne on 2017/6/26.
*/
@Target({ElementType.METHOD, Element Type.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TxTransaction {


/**
* 是否LCN事务发起方
* @return true 是:是发起方 false 否:是参与方
*/
boolean isStart() default false;


/**
* 回滚异常
* @return
*/
Class<? extends Throwable>[] rollbackFor () default {};


/**
* 不回滚异常
* @return
*/
Class<? extends Throwable>[] noRollbackFor () default {};

}

在5.0我同样找到了源代码,是这样的

/**
* Created by lorne on 2017/6/26.
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TxTransaction {


/**
* 事务模式 transaction type
*
* @return lcn, tcc, txc
* @see Transactions
*/
String type() default Transactions.LCN;

/**
* 分布式事务传播行为
*
* @return 传播行为
* @see DTXPropagation
*/
DTXPropagation propagation() default DTXPropagation.REQUIRED;
}

很明显,注解使用和实现都完全变了,4.0和5.0明显不能兼容了。

通过新版本的一堆注解也可以看出来,4.0版本只支持LCN模式,想要尝试TCC和TXC的, 把5.0的Demo去跑通吧

   
次浏览       
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践