分布式事务背景

       显然单体应用下本地事务在微服务的时代下不可避免的成为问题,事务的ACID特性在分布式环境下无法得到保证,当下微服务必然面临服务间调用带来的数据一致性问题,尤其在金融领域要求非常高!

分布式事务思路与主流解决方案

参考文章:分布式事务解决思路

上述文章对当前流行的几种解决思路进行了陈述,大家可以学习一下。

       目前这段时间,稍微研究学习了下分布式事务解决方案。暂且以tx-lcn这个框架进行一些学习,其中主要是它的三种模式,LCN模式 TCC模式 TXC模式。下面记录下,使用的过程以及一些注意事项。

TX-LCN框架的学习实践

TX-LCN框架相关:
github:https://github.com/codingapi/tx-lcn
官方网址:codingapi.com
框架作者出的一些学习讲解视频:讲解学习视频

通过对上述资料的学习,会有比较深刻的认识,包括框架原理,几种模式的介绍,TM配置,TC依赖客户端开发,样例工程等比较详细,这里不赘述官网内容。

这是我的dubbo demo工程可以参考:https://gitee.com/kevin1992/opensource-learn.git

实践中问题记录

0.tm服务可以直接install tx-lcn的tm模块,修改application.properties,tm的启动依赖redis

1.tx-lcn版本为5.0.2,支持的dubbo版本为2.6.5,再往上2.7.x就不支持了,否则运行会报错RpcContext setAttachments出错!

2.dubbo 2.6.x版本maven依赖如下,groupId与2.7.x不同,2.7.x为org.apache.dubbo:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.5</version>
</dependency>

并且需要,2.7.x不需要也可以启动:

<dependency>
    <groupId>com.alibaba.spring</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring-context-support.version}</version>
</dependency>

3.txlcn-tm中断,重启tm服务后,微服务未自动注册发现,待研究!
4.LCN的模式实质是代理数据库连接,占用资源时间较长,直至tm通知完成提交结束为止释放;
5.尝试dubbo负载均衡导致的问题,官方提供的方案是 重写了四种负载策略,谁注册事务组,就继续来调谁。
例如:

@Reference(timeout = 30000, loadbalance = "txlcn_random")
private DictApi dictApi;

TX-LCN未来发展

       目前的5.0.2版本也已经是一年前的版本了,支持的dubbo在2.6.5,spring cloud应该也是在1.5.x,所以比较新的应用还是要等框架的持续发展,否则是需要自己调整的。不过,作为学习分布式事务解决的方案是非常值得的,解决的思路也非常清晰。我也会持续关注TX-LCN,学习其中的精髓。

       LCN的模式还是相对简单,并且代码侵入几乎为零,适合中小型的项目。TCC和TXC的模式后续实践补充。

       LCN的6.0版本也在开发中,dev6.0的分支大家可以切出来看一下,这是实现原理
我也会持续关注tx-lcn发展!

 

posted on 2020-03-23 16:16  菜码农先生  阅读(1266)  评论(0编辑  收藏  举报