近期阿里開源了Fescar分布式事務中間件, 值得期待.
分布式事務是指一個事務會涉及到到多個應用接口調用, 底層數據表涉及到多個, 但數據庫可以是一個或多個, 它是傳統單數據庫事務在廣度上的延伸.
事務並發控制, 在OLTP關系型數據庫中, 事務並發控制往往是指事務的隔離性, 在本文中, 指的是應用層的並發事務控制, 常用的實現是樂觀鎖控制.
需要說明的是, 樂觀鎖解決的是事務並發控制, 它並不能解決分布式事務控制.
業界的分布式事務控制技術
Fescar 的情況
在單體應用中, 后台DB往往只有一個, 所以使用數據庫事務即可. 在微服務環境下, 一個事務可能會涉及到多個微服務, DB connection 不是一個, DB 也可能不是一個, 分布式事務就是一個大問題, 目前的解決方案對比:
0. 接口內部實現本地事務, 接口之間不支持分布式事務, 然后輔以定期對賬機制進行修正.
1. 目前的XA實現, 代碼無侵入, 但對於並發和性能影響較大.
2. TCC實現, 代碼有侵入, 改造難度較大, 但性能較好, 時效性很好
3. 基於消息, 引入了消息中間件, 方案較復雜.
=================================
參考
=================================
從銀行轉賬失敗到分布式事務:總結與思考
https://www.cnblogs.com/xybaby/p/7465816.html
easy transaction 框架作者的文章:“若干分布式事務框架”與“我的偏見”( 測試/分析)
https://www.cnblogs.com/skyesx/p/10041923.html
https://github.com/QNJR-GROUP/EasyTransaction
如何選擇分布式事務形態(TCC,SAGA,2PC,基於消息最終一致性等等)
https://www.cnblogs.com/skyesx/p/9697817.html
各個開源框架的特性(框架支持/可靠日志存儲介質)
https://blog.csdn.net/yongyou890410/article/details/82719062
Spring Cloud的分布式事務框架壓測第一輪
http://springcloud.cn/view/374
拜托,面試請不要再問我TCC分布式事務的實現原理!
https://juejin.im/post/5bf201f7f265da610f63528a
分布式事務解決方案
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的最終一致性解決方案
https://segmentfault.com/a/1190000012762869
微服務架構下分布式事務解決方案——阿里GTS
https://www.cnblogs.com/jiangyu666/p/8522547.html
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