LCN分布式介绍

什么是LCN

B站课程
LCN官网地址
CodingAPI
LCN的GitHub地址

LCN v1.0的框架思想依旧采用了之前的mq分布式事务设计思想,框架分为三阶段:
lock (锁定)、confirm (确认)、notify (通知)。因此LCN的名称是这样得来的。
●v1.0设计原理 - LCN的第一个版本
●v2.0设计原理 - 替换了通讯框架
●v2.1设计原理 - 简化了操作步骤
●v2.2设计原理 - 增加了事务补偿
●v2.3设计原理 - 合并增加和修改事务组,简化分布式启动模块业务处理,优化模块二次调用
●v3.0设计原理 - 将事务控制权转移给代理连接池

LCN与其他分布式事务的区别

2pc、3pc原理
tcc机制
paxos算法
事务控制原理
alisql数据库
阿里的X-Paxos的应用实践

目前可以做到的分布式事务数据库框架类型有: 2PC、 3PC、TCC、Paxos算法、分布式数据库
2PC、3PC其实可以理解为一类, 而且2PC有隐患因此才诞生了3PC。但是3PC也存在隐患。
TCC机制,也存在幂等性操作问题,开发使用复杂。
LCN机制是原理是取长补短,即采用了3PC的原理,又结合TCC的补偿机制。
Paxos算法 / 分布式数据库:Paxos算法促生了一些分布式数据库,但是目前比较成熟的还比较少,对现有的数据库兼容性不好,可参考alisql数据库。

LCN分布式事务的架构设计

事务协调器(TxManager) 、事务发起者、事务参与方
在这里插入图片描述
事务组:由同一次事务下的各个事务单元组成的事务组合,叫做事务组。

事务的7个传播行为

LCN原理介绍

// A模块为事务发起方
A{
    a1(){
        B.b1();
        a2();
    }
    a2(){ }
}
//B模块为事务参与方
B{
    b1(){
        b2();
    }
    b2(){ }
}

调用关系:A的a1方法是启动方法

执行顺序:A.a1() -> B.b1() -> B.b2() -> A.a2()

A的a1方法启动时会向事务协调器请求创建一个事务组,模块经过rpc远程调用会传递一个隐形参数。
当B模块被调用时,B模块会进行“添加事务组”(这一块变成后置的了,在B的业务执行完再向TM添加事务组,告诉TM我们B模块的这个事务跟A模块的事务在同一个事务组下)。
当B模块的方法执行结束,再执行a2时,此时进行了“假关闭”,即数据库处理完事务进行关闭操作时,LCN控制了这个关闭的操作,让它等待,没有关闭。
如果后续a2方法执行出现异常,则通知TM,TM会查看这一个事务组下有多少参与方,通知这些参与方让其进行事务回滚。

LCN劫持连接池计划

在这里插入图片描述
B模块执行完业务之后需要关闭连接对象,这时LCN通过代理连接池来做了假关闭的动作。
没有这个代理连接池的话,业务系统关闭连接把连接放回到连接池;
有了这个代理连接池,业务系统会对代理连接池发起请求进行关闭,代理连接池做假关闭,即由代理连接池进行关闭操作,但没有把这个连接放回到连接池。代理连接池进行关闭这个连接时会有个自动等待的任务:等待TM下发指令是要提交还是要回滚。这里还有个超时的机制,超时会自动去处理本次连接的请求。

说明:
如果是非LCN分布式事务的操作,代理连接池是不工作的。
无论AB两模块在同一个分布式事务中如何多次反复互相调用,只要在同一个事务组下,一个模块的连接只有一条,事务的控制也是在一个控制下。

LCN源码地址

源码地址
Dubbo的demo地址
SpringCloud的demo地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值