分布式事务背景
显然单体应用下本地事务在微服务的时代下不可避免的成为问题,事务的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发展!