分布式事务(3) LCN
一、简介
LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。
LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TXC模式
TX-LCN的核心控制流程
TX-LCN 中有事务组的概念,并发请求时,首先获取全局事务id,各参与者加入事务组。
1 LCN模式
LCN模式是通过代理数据库 Connection 的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。
LCN 特点:
- 该模式对代码的嵌入性为低。
- 该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。
- 该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。
- 该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间。
2 TCC模式
//尝试方法
function try(){
//记录日志文件 undo redo
todo save A 转出了 100 元
todo save B 转入了 100 元
//执行转账
update amount set balacne = balacne-100 where id = 1
update amount set balacne = balacne+100 where id = 2
}
//确认方法
function confirm(){
//清理日志
clean save A 转出了 100 元
clean save B 转出了 100 元
}
//取消方法
function cancle(){
//加载日志
load log A
load log B
//退钱
update amount set balacne = balacne+100 where id = 1
update amount set balacne = balacne-100 where id = 2
}
特点:
- 该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。
- 该模式对有无本地事务控制都可以支持使用面广。
- 数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。
3 TXC模式
TXC模式 逆向sql 不常用,忽略
二 总结
- LCN 模式因代理数据库连接,强依赖数据库事务
- TCC 模式 适合参与者没有数据库事务的场景,比如参与者需要上传文件服务器,或参与者操作 redis 。但开发业务复杂
- 软件架构没有 银弹,适合自己业务的就是最好的
参考 LCN 官网