精华内容
下载资源
问答
  • [分布式事务]LCN分布式事务.pptx
  • LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。 核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示Group....

    || 我不生产事务,我只是事务的搬运工!

    官方网站 :  www.txlcn.org

    code详见:  github.com/codingapi/tx-lcn

    框架介绍

    LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。

    核心步骤

    1. 创建事务组
      是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。
    2. 添加事务组
      添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。
    3. 关闭事务组
      是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。

    事务控制原理

    LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。

    TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。

    对于代理连接池的优化

    1. 自动超时机制
      任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。

    2. 智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能,返回本地连接对象,对于补偿事务的启动方将开启回滚连接对象,执行完业务以后马上回滚事务。

    3. LCN连接重用机制 当模块在同一次事务下被重复执行时,连接资源会被重用,提高连接的使用率。

    事务补偿机制

    为什么需要事务补偿?

    事务补偿是指在执行某个业务方法时,本应该执行成功的操作却因为服务器挂机或者网络抖动等问题导致事务没有正常提交,此种场景就需要通过补偿来完成事务,从而达到事务的一致性。

    补偿机制的触发条件?

    当执行关闭事务组步骤时,若发起方接受到失败的状态后将会把该次事务识别为待补偿事务,然后发起方将该次事务数据异步通知给TxManager。TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。

    补偿事务机制?
    LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次执行该次请求事务。

    模拟场景演示

    若存在事务发起方、参与方A、参与方B。调用关系图如下

    那么他们正常执行业务的时序图为:

    若参与方B出现异常,那么他们的业务时序图为:

    若他们的调用关系是这样的情况

    此时发生参与方B出现异常时他们的时序图为:

     

    展开全文
  • LCN分布式事务框架框架介绍LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。核心步骤创建事务组是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,...

    LCN分布式事务框架

    框架介绍

    LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。

    核心步骤

    1. 创建事务组
      是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。
    2. 添加事务组
      添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。
    3. 关闭事务组
      是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。

    事务控制原理

    LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。

    TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。

    对于代理连接池的优化

    1. 自动超时机制
      任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。

    2. 智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能,返回本地连接对象,对于补偿事务的启动方将开启回滚连接对象,执行完业务以后马上回滚事务。

    3. LCN连接重用机制 当模块在同一次事务下被重复执行时,连接资源会被重用,提高连接的使用率。

    事务补偿机制

    为什么需要事务补偿?

    事务补偿是指在执行某个业务方法时,本应该执行成功的操作却因为服务器挂机或者网络抖动等问题导致事务没有正常提交,此种场景就需要通过补偿来完成事务,从而达到事务的一致性。

    补偿机制的触发条件?

    当执行关闭事务组步骤时,若发起方接受到失败的状态后将会把该次事务识别为待补偿事务,然后发起方将该次事务数据异步通知给TxManager。TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。

    补偿事务机制?
    LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次执行该次请求事务。

    模拟场景演示

    若存在事务发起方、参与方A、参与方B。调用关系图如下

    那么他们正常执行业务的时序图为:

    若参与方B出现异常,那么他们的业务时序图为:

    若他们的调用关系是这样的情况

    此时发生参与方B出现异常时他们的时序图为:


    LCN框架原理及使用参考:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86

    展开全文
  • 该资源包含LCN分布式介绍PPT、教学视频、项目整合demo等资源,对于想了解LCN框架的用户非常有用。
  • lcn分布式事务搭建.rar

    2021-07-16 13:46:03
    springcloud处理分布式事务的方案(lcn),三个微服务源代码、数据库sql脚本
  • 1. 简介 ...LCN框架从5.0开始兼容了LCN、TCC、TXC三种事务模式,为了和LCN框架区分,从5.0开始把LCN框架更名为:TX-LCN分布式事务框架。 2. TX-LCN原理 TX-LCN由两大模块组成,TxClient、TxManager。

    1. 简介

    LCN框架在2017年6月发布第一个版本,目前最新已经达到5.0版本。

    LCN早期设计时,1.0版本和2.0版本设计步骤如下:

    1. 锁定事务单元(Lock)
    2. 确认事务模块状态(Confirm)
    3. 通知事务(Notify)

    取各自首字母后名称为LCN。

    LCN框架从5.0开始兼容了LCN、TCC、TXC三种事务模式,为了和LCN框架区分,从5.0开始把LCN框架更名为:TX-LCN分布式事务框架。

    2. TX-LCN原理

    TX-LCN由两大模块组成,TxClient、TxManager。

    TxClient作为模块的依赖框架,提供了TX-LCN的标准支持,事务发起方和参与方都属于TxClient。TxManager作为分布式事务的控制方,控制整个事务。

    2.1 原理中核心内容

    1) 创建事务组

    是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标识GroupId的过程。

    2) 加入事务组

    添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息通知给TxManager的操作。

    3) 通知事务组

    是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager,TxManager将根据事务最终状态和事务组的信息来通知相应的参与模块提交或回滚事务,并返回结果给事务发起方。

    3. TX-LCN事务模式

    Tx-LCN 5.0开始支持三种事务模式,分别是:LCN、TCC、TXC模式。

    每种模式在实际使用时有着自己对应的注解。

    • LCN:@LcnTransaction
    • TCC:@TccTransaction
    • TXC:@TxcTransaction

    3.1. LCN模式

    3.1.1. 原理介绍

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

    3.1.2 模式特点

    1. 该模式对代码的嵌入性低。
    2. 该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。
    3. 该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。
    4. 该模式缺陷在于代理的连接需要随事务发起方一同释放连接,增加了连接占用的时间。

    总结:LCN模式适合能用JDBC连接的所有支持事务的数据库

    3.2. TCC事务模式

    3.2.1 原理介绍

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

    3.2.2 代码说明

    每个TCC事务处理方法可以额外包含confirmXxx和cancelXxx的方法(),出现失败问题,需要在cancel中通过业务逻辑把改变的数据还原回来。

    confirmXxx和cancelXxx 两个方法会由TxManager进行统一协调调用。

    confirmXxx和cancelXxx也可以在@TccTransaction注解中通过属性明确指定。

    @TccTransaction
    public String demo(){
        // 正常的service方法,也是Try尝试执行执行
    }
    
    public void confirmDemo(){
        // 当demo方法没有出现异常时执行的方法
        // 方法名称必须叫做confirm+代理方法首字母
    }
    
    public void cancelDemo(){
        // 当demo方法出现异常时执行的方法
        // 方法名称必须叫做cancel+代理方法首字母
    }

    3.2.3 模式特点

    1. 该模式对代码的嵌入性高,要求每个业务需要写二个以上步骤的操作。
    2. 该模式对有无本地事务控制都可以支持,使用面更广。
    3. 数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。

    总结:Tcc模式应用于所有不支持XA事务的软件。例如:redis,mongodb等

    4. TXC事务模式

    4.1 原理介绍

    TXC模式命名来源于淘宝,实现原理是在执行SQL之前,先查询SQL的影响数据,然后保存执行的SQL信息和创建锁。当需要回滚的时候就采用这些记录数据回滚数据库,目前锁实现依赖redis分布式锁控制。(在使用lcn时必须要配置redis参数)

    4.2 模式特点

    1. 该模式同样对代码的嵌入性低。
    2. 该模式仅限于对支持SQL方式的模块支持。
    3. 该模式由于每次执行SQL之前需要先查询影响数据,因此相比LCN模式消耗资源与时间要多。
    4. 该模式不会占用数据库的连接资源。

    总结:只能用在支持SQL的数据库。对资源消耗较多。建议使用LCN模式

    5. XA的两阶段提交方案(数据库支持分布式事务,为什么还用TX-LCN)

    5.1. 什么是XA协议

    XA协议由Oracle Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。

    XA就是X/Open DTP定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA接口函数由数据库厂商提供。

    X/Open组织(即现在的Open Group)定义了分布式事务处理模型。X/Open DTP模型(1994)包括应用程序(AP)、事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)四部分。一般,常见的事务管理器(TM)是交易中间件,常见的资源管理器(RM)是数据库,常见的通信资源管理器(CRM)是消息中间件。

    5.2. XA协议的一阶段提交

    如果在程序中开启了事务,那么在应用程序发出提交/回滚请求后,数据库执行操作,而后将成功/失败返回给应用程序,程序继续执行。

    一阶段提交协议相对简单。优点也很直观,它不用再与其他的对象交互,节省了判断步骤和时间,所以在性能上是在阶段提交协议中最好的。但缺点也很明显:数据库确认执行事务的时间较长,出问题的可能性就随之增大。如果有多个数据源,一阶段提交协议无法协调他们之间的关系。

    5.3 XA协议的二阶段提交

    在一阶段协议的基础上,有了二阶段协议,二阶段协议的好处是添加了一个管理者角色。

    很明显,二阶段协议通过将两层变为三层,增加了中间的管理者角色,从而协调多个数据源之间的关系,二阶段提交协议分为两个阶段。

    应用程序调用了事务管理器的提交方法,此后第一阶段分为两个步骤:

    • ① 事务管理器通知参与该事务的各个资源管理器,通知他们开始准备事务。
    • ② 资源管理器接收到消息后开始准备阶段,写好事务日志并执行事务,但不提交,然后将是否就绪的消息返回给事务管理器(此时已经将事务的大部分事情做完,以后的内容耗时极小)。

    第二阶段也分为两个步骤:

    • ① 事务管理器在接受各个消息后,开始分析,如果有任意其一失败,则发送回滚命令,否则发送提交命令。
    • ② 各个资源管理器接收到命令后,执行(耗时很少),并将提交消息返回给事务管理器。

    事务管理器接受消息后,事务结束,应用程序继续执行。

    为什么要分两步执行?一是因为分两步,就有了事务管理器统一管理的机会;二是尽可能晚地提交事务,让事务在提交前尽可能地完成所有能完成的工作,这样,最后的提交阶段将是耗时极短,耗时极短意味着操作失败的可能性也就降低。

    同时,二阶段提交协议为了保证事务的一致性,不管是事务管理器还是各个资源管理器,每执行一步操作,都会记录日志,为出现故障后的恢复准备依据。

    缺点:

    1. 二阶段提交协议的存在的弊端是阻塞,因为事务管理器要收集各个资源管理器的响应消息,如果其中一个或多个一直不返回消息,则事务管理器一直等待,应用程序也被阻塞,甚至可能永久阻塞。
    2. 两阶段提交理论的一个广泛工业应用是XA协议。目前几乎所有收费的商业数据库都支持XA协议。XA协议已在业界成熟运行数十年,但目前它在互联网海量流量的应用场景中,吞吐量这个瓶颈变得十分致命,因此很少被用到。
    展开全文
  • 工作流事务说明--tx-lcn分布式事务配置事务初始化配置方法事务注解 配置事务 初始化配置 @Configuration @AllArgsConstructor public class ActivitiConfig { private final DataSource dataSource; private ...

    工作流事务说明--tx-lcn分布式事务

    配置事务

    初始化配置

    @Configuration
    @AllArgsConstructor
    public class ActivitiConfig {
    
    	private final DataSource dataSource;
    
    	private final PlatformTransactionManager transactionManager;
    
    	@Bean
    	public SpringProcessEngineConfiguration getProcessEngineConfiguration() {
    		SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
    		// 流程图字体设置
    		config.setActivityFontName("宋体");
    		config.setAnnotationFontName("宋体");
    		config.setLabelFontName("黑体");
    
    		config.setDataSource(dataSource);
    		config.setTransactionManager(transactionManager);//配置事务管理类
    		config.setDatabaseType("mysql");//数据库类型
    		config.setDatabaseSchemaUpdate("true");
    		config.setEventListeners(Arrays.asList(new ProcessEventListener()));
    		return config;
    	}
    
    	@Bean
    	@Primary
    	public TaskExecutor primaryTaskExecutor() {
    		return new ThreadPoolTaskExecutor();
    	}
    
    }
    

    方法事务注解

    	@PostMapping("/startProcess")
    	@ApiOperation(value = "创建审批", notes = "创建审批")
    	@TxTransaction(isStart = false)
    	@Transactional
    	public R startProcess(@RequestBody BusinessDto dto) throws Exception {
    		commonBusinessService.saveStartProcess(dto);
    		return R.ok(true);
    	}
    
    

    这里必须加入@Transactional和@TxTransaction两个注解,只加分布式事务@TxTransaction注解会导致其他分布式服务事务回滚,但工作流事务却没有回滚

    展开全文
  • lcn 分布式事务管理器

    2019-05-08 17:16:30
    lcn 分布式事务https://github.com/codingapi/springcloud-lcn-demo/tree/master/jpa-demo/springcloud-jpa-demo1 lcn 分布式事务文档:https://txlcn.org/zh-cn/docs/start.html
  • TX-LCN分布式事务

    2019-07-05 15:34:30
    LCN分布式事务框架的核心功能是对本地事务的协调控制,框架本身并不创建事务,只是对本地事务做协调控制 因此该框架与其他第三方的框架兼容性强,支持所有的关系型数据库事务,支持多数据源,支持与第三方数据库...
  • springboot + dubbo + LCN分布式事务 demo
  • LCN分布式事务

    2020-05-12 11:39:03
    1.什么是分布式事务分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点上。 例子:电商系统的订单系统和库存系统 图包含了库存和订单两个独立的...
  • LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果 GITHUB地址: https://github.com/codingapi/tx-lcn 官方网址 https://www.txlcn.org 核心步骤 创建事务组 是指在...
  • 目录 1.前序 2.过程 2.1 TX-LCN框架介绍 2.2 环境搭建 2.2.1 开发环境 ...现如今,分布式框架纵横的大潮下,对于分布式的相关应用和技术的了解和使用也是必不可少的。最显著的几个技术点,我...
  • lcn分布式事务具体实现思路是服务器A创建事务,构建事务信息并将事务信息发送到事务处理器,处理过程可能用到服务器B、C,会将事务组Id传给B、C,B、C业务处理完成后将事务信息加入到对应的事务组,并且创建一个...
  • 提供TX-LCN的标准支持,TxManager作为分布式事务的控制放。事务发起方或者参与反都由TxClient端来控制。 (简单来说就是单独部署一套TxManager模块来实现事务管理,TxClient就是我们自己的服务系统)
  • TX-LCN分布式事务框架

    2020-03-16 16:45:57
    TX-LCN分布式事务框架
  • LCN分布式事务(Java)

    2021-07-16 14:07:11
    分布式事务LCN搭建一、分布式事务1.1、业务场景二、准备工作(windows环境)2.1、windows版redis2.2、一个搭建好的微服务项目三、搭建lcn分布式事务3.1、搭建lcn服务端3.1.1、启动类3.1.2、pom3.1.3、配置文件(注册...
  • Lcn分布式事务

    2021-05-18 20:57:34
    搭建事务协调者tx-Manager 创建tx-manager工程,并引入lcn的依赖 <dependencies> <dependency> <groupId>com.codingapi.txlcn</groupId> <artifactId>txlcn-tm</artifactId>...
  • tx-manager.rar(lcn 分布式事务管理协调器)、用于管理事务
  • LCN 分布式事务框架

    2018-09-19 14:09:07
    LCN 分布式事务框架@TOC https://github.com/codingapi/tx-lcn 记录一下学习lcn的地址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuck487/article/details/79937066... LCN分布式事务官网:http://www.txlcn.org/ springcloud的demo:https://github.com/codingapi...
  • LCN分布式事务框架

    千次阅读 2020-04-23 12:34:00
    LCN是国产开源的分布式事务处理框架。LCN即:lock(锁定事务单元)、confirm(确认事务模块状态)、notify(通知事务)。 官网:http://www.txlcn.org/zh-cn/ 2.首先介绍3.0与4.0之前的差异 2.1.地址 2.2.添加升级...
  • Spring Cloud LCN 分布式事务

    千次阅读 2018-09-07 23:19:35
    由于不在一个进程内,不是一个数据库连接,当服务编排,各子系统协同完成业务时,需要保证所有协作子系统要么都成功,要么都失败,这即满足在分布式环境下,多个系统的操作原子性的分布式事务。大型分布式应用由于...
  • 1、地址:2、4.0添加升级如下功能:(1)3.0虽然有事务补偿机制,但4.0在此基础上不仅添加事务补偿机制的策性,还添加了管理的后台可以看到补偿的数据;同时也添加了一个回调地址,可以在补偿之前可以最先知道这次...
  • 简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。 事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 1.2 事务分类 一般而言,常将事务分为如下几种类型的事务: 本地事务...
  • AOP实现LCN分布式事务手动回滚

    千次阅读 2018-08-07 15:22:18
    由于项目用了较为完善的异常处理机制,导致微服务在抛出异常时,立即被@ExpectionHandler捕捉掉了,造成LCN分布式事务无法捕捉到异常而无法回滚的情况。在查看LCN原理的时候,偶然发现可以获取LCN管理事务的事务组...
  • LCN并不生产事务LCN只是本地事务的协调工 TX-LCN定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。
  • TX-LCN分布式事务原理介绍

    万次阅读 2018-04-02 15:14:58
    框架介绍LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果核心步骤创建事务组是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,040
精华内容 816
关键字:

lcn分布式事务中的事务是什么