>[info] 官网: [https://www.txlcn.org/](https://www.txlcn.org/) > Github: [https://github.com/codingapi/tx-lcn](https://github.com/codingapi/tx-lcn) [TOC] ## 一、介绍 LCN通讯是基于TCP长连接的socket通讯,TxManager与事务控制方是基于netty框架完成的。该协议只描述参与Socket通讯的协议。 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。 LCN 核心采用3PC机制,采用强一致性方案,保证了事务的一致性。 ## 二、框架特点 * 兼容SpringCloud、Dubbo; * 兼容rpc降级熔断 * 使用简单,低依赖,代码完全开源; * 基于切面的强一致性事务框架; * 高可用,模块可以依赖Dubbo或SpringCloud的集群方式做集群化,TxManager也可以做集群化; * 支持本地事务和分布式事务共存; **缺点**:代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间;不适用于热点数据和异步场景。 ## 三、核心步骤 1. 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 2. 添加事务组 添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。 3. 关闭事务组 是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。 ![](https://img.kancloud.cn/1b/54/1b54715ae19e5b4d91509c4f91efdd2b_1003x634.png) ## 四、事务控制原理 TX-LCN由两大模块组成, TxClient、TxManager,TxClient作为模块的依赖框架,提供TX-LCN的标准支持,TxManager作为分布式事务的控制放。事务发起方或者参与反都由TxClient端来控制。 TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 ![](https://img.kancloud.cn/ce/2a/ce2a34219bf246d216bf55d7a6927ef8_820x805.png) **对于代理连接池的优化** * 自动超时机制 任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。 * 智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能,返回本地连接对象,对于补偿事务的启动方将开启回滚连接对象,执行完业务以后马上回滚事务。 * LCN连接重用机制 当模块在同一次事务下被重复执行时,连接资源会被重用,提高连接的使用率。