LCN分布式事务框架解决分布式事务一致性问题
LCN分布式事务框架
框架介绍
LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。
核心步骤
- 创建事务组
是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 - 添加事务组
添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。 - 关闭事务组
是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。
事务控制原理
LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。
TxClient的代理连接池实现了javax.sql.DataSource
接口,并重写了close
方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。
对于代理连接池的优化
自动超时机制
任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能,返回本地连接对象,对于补偿事务的启动方将开启回滚连接对象,执行完业务以后马上回滚事务。
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分布式事务框架解决分布式事务一致性问题相关推荐
- 使用LCN框架解决分布式事物
使用LCN框架解决分布式事物 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构 ...
- 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...
- 分布式事务 - 如何解决分布式事务问题?
分布式事物 - 如何解决分布式事务问题? 面试题 分布式事务了解吗?你们是如何解决分布式事务问题的? 面试官心理分析 只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑, ...
- 基于数据库的事务消息解决分布式事务方案
转载请注明出处:http://www.cnblogs.com/lizo/p/8516502.html 概述 当单库已不能支撑当前业务的时候,我们往往都考虑进行分库(横向拆分或者纵向拆分).但分库有个无 ...
- 事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装
利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务 比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的 ...
- java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)
4 Dubbo快速入门 Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用.本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方.通过Dubbo来实现服务消费方远程 ...
- 分布式事务框架Seata的使用
1. 分布式事务入门 事务必须具有的四个特性分别是:原子性(atomicity).一致性(consistency).隔离性(isolation,又称独立性)以及持久性(durability).这就是事 ...
- 分布式事务:不过是在一致性、吞吐量和复杂度之间,做一个选择
这是一个开撕的话题,我经历过太多的关于分布式事务的需求:"有没有简单的方案,像使用数据库事务那样,解决分布式数据一致性的问题".特别是微服务架构流行的今天,一次交易需要跨越多个&q ...
- 分布式事务框架seata介绍
分布式事务框架seata介绍 一 . 事务特性(ACID) 1.原子性(A) 在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态.对于事务在执行中发生错误,所有的操作都会被回滚,整个事务 ...
最新文章
- C#图片压缩的实现方法
- BZOJ-1053-反素数ant
- ArcSDE数据库、文件地理数据库和个人地理数据库的区别
- [Day30] DBUtils和连接池
- MCTS顺利通过,下一步MCPD
- SQLAlchemy基本使用
- win10系统键盘失灵怎么解决
- ubuntu 怎么下载android源代码 2013,简记Ubuntu下载 Android源码(示例代码)
- 对于长沙互联网发展,一个外来两年Java程序员的所见所感所愿
- GBK编码和UTF-8编码区别各所占用字节数
- iPad2如何从iOS6降级到5.1.1
- adobe软件卸载不了怎么办?那就使用dobe官方清理工具吧!
- 解决IntelliJ IDEA Properties中Unused property提示
- 工作量评估--专家评估法实际操作心得
- The Independent JPEG Group‘s JPEG software
- iCollections for Mac(桌面文件整理软件)
- Linux创建用户和密码相关的命令useradd、groupadd、passwd和userdel应用
- ** ERROR (nifti_image_write_hdr_img2): cannot open output file
- 浏览器显示你的连接不是专用连接怎么解决?
- 修改linux终端命令行颜色
热门文章
- unity3d做会减少的血条_用Unity做血条或进度条常用脚本 - 纳金网
- 海思开机Logo的使用
- 安卓开发之Toolbar
- java 字符串 判断_Java中判断字符串是否相等的实现
- pycharm 突然无法连接远程服务器
- 堆叠之实战,两台交换机一根堆叠线如何做堆叠?三台交换机三根堆叠线呢?
- android:scaleType属性说明
- java内存结构学习的一种打开方式
- UCloud“安全屋”数据流通平台:隐私计算市场的“隐形冠军”
- 使用匿名binder实现client向server端的死亡通知