LCN框架介绍

一、简介

LCN 并不生产事务,LCN 只是本地事务的协调工;
LCN 命名缩写:锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify)

二、执行原理

如图,微服务 A,微服务 B,TxManager 事务协调器,都需要去 Eureka 中注册服务;Eureka 是用于 TxManager 与其他服务之间的相互服务发现;redis 是用于存放我们事务 组的信息以及补偿的信息;微服务 A 与微服务 B 都需要去配置上我TxClient 的包架构
在这里插入图片描述

三、执行步骤

3.1、创建事务组

事务组是指的我们在整个事务过程中把各个节点(微服务)单元的事务信息存储在一 个固定单元里。但这个信息并不是代表是事务信息,而是只是作为一个模块的标示信息。
创建事务组是指在事务发起方开始执行业务代码之前先调用 TxManager 创建事务组 对象,然后拿到事务标示 GroupId 的过程。

3.2、添加事务组

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

3.3、关闭事务组

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

3.4、执行流程图

在这里插入图片描述

四、事务协调机制

如图:假设服务已经执行到关闭事务组的过程,那么接下来作为一个模块执行通知给 TxManager,然后告诉他本次事务已经完成。那么如图中 Txmanager 下一个动作就是通过事 务组的 id,获取到本次事务组的事务信息;然后查看一下对应有那几个模块参与,然后如果 是有 A/B/C 三个模块;那么对应的对三个模块做通知、提交、回滚。
提交的时候是提交给谁呢?
提交给了 TxClient 模块。然后 TxCliient 模块下有一个连接池,就是框架自定 义的一个连接池(如图 DB 连接池);这个连接池其实就是在没有通知事务之前一直占有着 这次事务的连接资源,就是没有释放。但是他在切面里面执行了 close 方法。在执行 close 的时候。如果需要(TxManager)分布式事务框架的连接。他被叫做“假关闭”,也就是没有 关闭,只是在执行了一次关闭方法。实际的资源是没有释放的。这个资源是掌握在 LCN 的 连接池里的;
当 TxManager 通知提交或事务回滚的时候呢?
TxManager 会通知我们的 TxClient 端。然后 TxClient 会去执行相应的提交或回滚。提交 或回滚之后再去关闭连接。这就是 LCN 的事务协调机制。说白了就是代理 DataSource 的机 制;相当于是拦截了一下连接池,控制了连接池的事务提交。
在这里插入图片描述

五、事务补偿机制

5.1、什么是补偿事务机制

LCN 的补偿事务原理是模拟上次失败事务的请求,然后传递给 TxClient 模块然后再次 执行该次请求事务;
简单的说:lcn 事务补偿是指在服务挂机和网络抖动情况下 txManager 无法通知事务单 元时。(通知不到也就两种原因服务挂了和网络出问题)在这种情况下 TxManager 会做一 个标示;然后返回给发起方。告诉他本次事务有存在没有通知到的情况。
那么如果是接收到这个信息之后呢,发起方就会做一个标示,标示本次事务是需要补偿 事务的。这就是事务补偿机制。

5.2、为什么需要事务补偿

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

5.3、补偿机制的触发条件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值