近期阿里开源了Fescar分布式事务中间件, 值得期待. 

分布式事务是指一个事务会涉及到到多个应用接口调用, 底层数据表涉及到多个, 但数据库可以是一个或多个, 它是传统单数据库事务在广度上的延伸. 

事务并发控制, 在OLTP关系型数据库中, 事务并发控制往往是指事务的隔离性, 在本文中, 指的是应用层的并发事务控制, 常用的实现是乐观锁控制.

分布式事务和事务并发控制_Java

需要说明的是, 乐观锁解决的是事务并发控制, 它并不能解决分布式事务控制. 


业界的分布式事务控制技术

分布式事务和事务并发控制_SpringBoot_02




Fescar 的情况

分布式事务和事务并发控制_分布式事务_03


在单体应用中, 后台DB往往只有一个, 所以使用数据库事务即可. 在微服务环境下, 一个事务可能会涉及到多个微服务, DB connection 不是一个, DB 也可能不是一个, 分布式事务就是一个大问题, 目前的解决方案对比:

0. 接口内部实现本地事务, 接口之间不支持分布式事务, 然后辅以定期对账机制进行修正.

1. 目前的XA实现, 代码无侵入, 但对于并发和性能影响较大.

2. TCC实现, 代码有侵入, 改造难度较大, 但性能较好, 时效性很好

3. 基于消息, 引入了消息中间件, 方案较复杂.


=================================

参考

=================================

从银行转账失败到分布式事务:总结与思考

easy transaction 框架作者的文章:“若干分布式事务框架”与“我的偏见”( 测试/分析)

https://github.com/QNJR-GROUP/EasyTransaction

如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)

各个开源框架的特性(框架支持/可靠日志存储介质)

Spring Cloud的分布式事务框架压测第一轮

http://springcloud.cn/view/374

拜托,面试请不要再问我TCC分布式事务的实现原理!

分布式事务解决方案

https://github.com/clsaa/Distributed-Transaction-Notes

分布式事务解决方案与适用场景分析

https://www.jianshu.com/p/9e2670641119

关于开源分布式事务中间件Fescar

https://yq.aliyun.com/articles/688001

https://github.com/alibaba/fescar/wiki/Home_Chinese

4.0 atomikos JTA/XA全局事务

http://www.tianshouzhi.com/api/tutorials/distributed_transaction/386

6.0 柔性事务 :TCC两阶段补偿型

http://www.tianshouzhi.com/api/tutorials/distributed_transaction/388

Spring Cloud分布式事务终极解决方案探讨

本文推荐的方式是, 基于RabbitMQ的最终一致性解决方案

 微服务架构下分布式事务解决方案——阿里GTS


https://zhuanlan.zhihu.com/p/41446128

Sharding-Sphere 也正在支持分布式事务,

Apache ServiceComb-pack (基于Saga和TCC协议)的最终一致性解决方案

https://github.com/apache/servicecomb-pack/blob/master/docs/design_zh.md

https://github.com/apache/servicecomb-pack/blob/master/docs/user_guide_zh.md