写点什么

LCN 基本原理

发布于: 19 小时前

一、 分布式事务简介


本质上来说,分布式事务就是为了保证不同数据库的数据一致性。


二、分布式事务的理论依据

2.1 CAP 原理

CAP 原理是指的是在一个分布式系统中、Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

2.2 BASE 理论

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于 CAP 定理逐步演化而来的。BASE 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

三、 常见解决方案

1 基于 XA 协议的两阶段提交

分布式事务通常采用 2PC 协议,全称 Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数据一致性的问题。分布式事务通过 2PC 协议将提交分成两个阶段:

1. prepare

2. commit/rollback

阶段一为准备(prepare)阶段。即所有的参与者准备执行事务并锁住需要的资源。参与者 ready 时,向 transaction manager 报告已准备就绪。

阶段二为提交阶段(commit)。当 transaction manager 确认所有参与者都 ready 后,向所有参与者发送 commit 命令。

2 消息事务+最终一致性

所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功并且对外发消息成功,要么两者都失败

分布式事务,本质上是对多个数据库的事务进行统一控制,按照控制力度可以分为:不控制、部分控制和完全控制。不控制就是不引入分布式事务,部分控制就是各 种变种的两阶段提交,包括上面提到的消息事务+最终一致性、TCC 模式,而完全控制就是完全实现两阶段提交。部分控制的好处是并发量和性能很好,缺点是数 据一致性减弱了,完全控制则是牺牲了性能,保障了一致性,具体用哪种方式,最终还是取决于业务场景。


四、 LCN 简介

1 简介

LCN 框架在 2017 年 6 月份发布第一个版本,从开始的 1.0,已经发展到了 5.0 版本。LCN 名称是各取如下单词首字母得来的。锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify) 。

5.0 以后由于框架兼容了 LCN、TCC、TXC 三种事务模式,为了避免区分 LCN 模式,特此将 LCN 分布式事务改名为 TX-LCN 分布式事务框架。

LCN 并不生产事务,LCN 只是本地事务的协调工

TX-LCN 定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。

官方网站:http://www.txlcn.org/zh-cn/

2 TX-LCN 的三种模式

2.1 LCN 模式:

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

LCN 模式特点

该模式对代码的嵌入性为低。

该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。

该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。

该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间。

2.2 TCC 事务模式

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

TCC 特点

该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。

该模式对有无本地事务控制都可以支持使用面广。

数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。

2.3 TXC 事务模式

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

TXC 特点

该模式同样对代码的嵌入性低。

该模式仅限于对支持 SQL 方式的模块支持。

该模式由于每次执行 SQL 之前需要先查询影响数据,因此相比 LCN 模式消耗资源与时间要多。

该模式不会占用数据库的连接资源。

四、 LCN 原理

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

1 核心执行步骤

1.1 创建事务组

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

1.2 加入事务组

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

1.3 通知事务组

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


五、 LCN 环境搭建

1 结构图

微服务 A,微服务 B,TxManager 事务协调器,都需要去 Eureka 中注册服务。Eureka 是用于 TxManager 与其他服务之间的相互服务发现。redis 是用于存放我们事务组的信息以及补偿的信息。然后微服务 A 与微服务 B 他们都需要去配置上我们 TxClient 的包架构(代码的包架构);来支持我们的 LCN 框架,以及他们的数据库。

2 搭建 TX-LCN 事务调节器

2.1 POM 文件

2.2 配置文件

TX-LCN 事务调节器工程不能使用 yml 配置文件,在启动的时候加载不到,此问题是 TX-LCN 源码导致。后续版本可能会有修复。

application.properties

2.3 启动类

2.4 访问事务调节器管理平台

访问地址为:http://localhost:9090/

即访问当前应用。登录密码为配置文件中的 tx-lcn.manager.admin-key。

用户头像

一眼看透本质的人...... 2020.07.17 加入

花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运。

评论

发布
暂无评论
LCN基本原理