微服务分布式事务解决方案之TX-LCN

分布式事务解决方案,无外乎以下几种方式:

  • 两阶段提交(2PC)
  • 补偿事务(TCC)
  • 本地消息表(异步确保)
  • MQ 事务消息
  • Sagas 事务模型

本文不做原理的实现,推荐具体的能落地的实现方案之一TX-LCN 分布式事务框架。

一、介绍

LCN通讯是基于TCP长连接的socket通讯,TxManager与事务控制方是基于netty框架完成的。该协议只描述参与Socket通讯的协议。

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

LCN 核心采用3PC机制,采用强一致性方案,保证了事务的一致性。

二、框架特点

  • 兼容SpringCloud、Dubbo;
  • 兼容rpc降级熔断
  • 使用简单,低依赖,代码完全开源;
  • 基于切面的强一致性事务框架;
  • 高可用,模块可以依赖Dubbo或SpringCloud的集群方式做集群化,TxManager也可以做集群化;
  • 支持本地事务和分布式事务共存;

缺点:代理的连接需要随事务发起方一并释放连接,增加了连接占用的时间;不适用于热点数据和异步场景。

三、核心步骤

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

TX-LCN分布式事务架构

四、事务控制原理

TX-LCN由两大模块组成, TxClient、TxManager,TxClient作为模块的依赖框架,提供TX-LCN的标准支持,TxManager作为分布式事务的控制放。事务发起方或者参与反都由TxClient端来控制。

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

微服务分布式事务解决方案之TX-LCN

分布式事务调用流程

对于代理连接池的优化

  • 自动超时机制
  • 任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。
  • 智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能,返回本地连接对象,对于补偿事务的启动方将开启回滚连接对象,执行完业务以后马上回滚事务。
  • LCN连接重用机制 当模块在同一次事务下被重复执行时,连接资源会被重用,提高连接的使用率。


分享到:


相關文章: