近期阿里开源了Fescar分布式事务中间件, 值得期待.
分布式事务是指一个事务会涉及到到多个应用接口调用, 底层数据表涉及到多个, 但数据库可以是一个或多个, 它是传统单数据库事务在广度上的延伸.
事务并发控制, 在OLTP关系型数据库中, 事务并发控制往往是指事务的隔离性, 在本文中, 指的是应用层的并发事务控制, 常用的实现是乐观锁控制.
需要说明的是, 乐观锁解决的是事务并发控制, 它并不能解决分布式事务控制.
业界的分布式事务控制技术
Fescar 的情况
在单体应用中, 后台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