开源分布式事务中间件 Fescar 自1月10日上线v0.1版本以来,受到了开发者们的极大关注(watch299,star3604,fork799,社区讨论的issue79,数据统计于1月23日10:12),可见,天下苦分布式事务久矣。java
为此,咱们收集了你们在社区(Github)和社群(钉钉群&微信群)关注的核心问题,总结以下,并给出回复。数据库
Q1:Fescar 的发展经历了哪些历程?和阿里云全局事务服务GTS之间是什么关系?服务器
A1:阿里巴巴是国内最先一批进行应用分布式(微服务化)改造的企业,因此很早就遇到微服务架构下的分布式事务问题。微信
TXC/GTS/Fescar一脉相承,为解决微服务架构下的分布式事务问题交出了一份不同凡响的答卷。网络
Q2:Fescar 有哪些适用场景?架构
A2:Fescar 的愿景是让分布式事务的使用像如今本地事务的使用同样简单、高效,最终的目标是但愿能够适用于全部的分布式事务场景。目前,核心的 AT 模式适用于构建于支持本地 ACID 事务的关系型数据库。非关系型数据库类资源的管理,经过 MT 模式来支持。AT 模式与 MT 模式彻底兼容,因此能够在同一个分布式事务中,同时管理两类资源。并发
Q3:目前有已经有一些其余的分布式事务开源方案,Fescar 和他们之间有哪些区别?和JTA支持分布式事务有哪些区别?框架
A3:既有的分布式事务解决方案按照对业务侵入性分为两类,即:对业务无侵入的和对业务有侵入的。分布式
都属于这一类。这些方案的具体机制在这里不作展开,网上这方面的论述文章很是多。总之,这些方案都要求在应用的业务层面把分布式事务技术约束考虑到设计中,一般每个服务都须要设计实现正向和反向的幂等接口。这样的设计约束,每每会致使很高的研发和维护成本。微服务
不能否认,侵入业务的分布式事务方案都通过大量实践验证,能有效解决问题,在各行种业的业务应用系统中起着重要做用。但回到原点来思考,这些方案的采用实际上都是迫于无奈。
回到问题:
与基于消息的最终一致、TCC、Saga等业务逻辑侵入方案的不一样在于,Fescar 的设计初衷就是保持对业务的非侵入性,不要求业务层面按照分布式事务的特定场景来设计正向和反向的两套(甚至多套)业务逻辑。这方面的差异就不展开了。
与 XA 的区别在于,设计了一套不一样与 XA 的两阶段协议,在保持对业务不侵入的前提下,保证良好的性能,也避免了对底层数据库协议支持的要求。能够看做是一套轻量级的XA 机制。具体的差异以下:
XA方案的 RM 其实是在数据库层,RM本质上就是数据库自身(经过提供支持 XA 的驱动程序来供应用使用)。
而 Fescar 的RM 是以二方包的形式做为中间件层部署在应用程序这一侧的,不依赖与数据库自己对协议的支持,固然也不须要数据库支持XA 协议。这点对于微服务化的架构来讲是很是重要的:应用层不须要为本地事务和分布式事务两类不一样场景来适配两套不一样的数据库驱动。
这个设计,剥离了分布式事务方案对数据库在协议支持上的要求。
不管 Phase2 的决议是commit 仍是 rollback,事务性资源的锁都要保持到Phase2 完成才释放。
再看 Fescar 的2PC 过程。
分支事务中数据的 本地锁 由本地事务管理,在分支事务 Phase1 结束时释放。
同时,随着本地事务结束,链接 也得以释放。
分支事务中数据的 全局锁 在事务协调器侧管理,在决议 Phase2 全局提交时,全局锁立刻
能够释放。只有在决议全局回滚的状况下,全局锁 才被持有至分支的 Phase2 结束。
这个设计,极大地减小了分支事务对资源(数据和链接)的锁定时间,给总体并发和吞吐的提高提供了基础。
Q4:Fescar 支持 Dubbo 的哪些版本?
A4:全部版本。
Q5:Fescar 支持 Spring Cloud么?
A5:Fescar 与微服务框架的接口点在于,须要把事务的惟一标识 XID(一个字符串)经过微服务框架的服务调用间调用的机制中,透明地传递,并经过 Fescar 的 API 来绑定(或解绑)到应用的线程上下文中。(机制能够参考内置的对 Dubbo 支持的实现 com.alibaba.fescar.dubbo.TransactionPropagationFilter)因此,本质上这个问题不是支不支持 Spring Cloud,而是如何支持 Spring Cloud 中选用的服务调用机制。目前正在和 Spring Cloud Alibaba 的同窗合做,准备在v0.5.x版本(或更早)发布对 Spring Cloud默认的支持。同时,很是欢迎社区的朋友参与进来,贡献包括 Spring Cloud 在内的各种微服务框架的支持。
Q6:Fescar 是否支持本地跨库多数据源?除了关系型数据库,是否还支持NoSQL数据库?
A6:本地跨多数据源一样是支持的,在 Fescar 的架构中,同一个服务中的多个数据源与跨服务的多个数据源,没有本质区别。AT 模式目前仅限于对关系型数据库的支持(自己具有ACID 事务支持),后面会发布出来的 MT 模式能够支持 NoSQL 这类自己不具有本地事务支持的资源。
Q7:Fescar 如今开源的是AT模式,MT模式暂时不支持,何时会开源?
A7:当前 0.1.0 版本只是把 Fescar 最核心的 AT 模式的最小集发布出来,一方面是按开源的规划和架构的重构进展,另外一方面也是但愿经过最小集版本,让用户和开发者社区更容易理解到咱们核心的设计思路,让更多人比较容易地参与进来建设,而不是彻底由阿里巴巴主导,仅仅把咱们的整套方案开源出来给你们用而已。阿里巴巴在分布式事务上的技术积累,咱们会经过 Fescar 项目毫无保留地贡献给社区,全部功能特性都会按规划和社区的反馈陆续开源出来。MT 按初步的计划,会在 0.5.x 版本发布。
Q8:Fescar 何时提供HA cluster,单节点的server的瓶颈如何处理?
A8:按初步的计划,HA Cluster 会在 0.5.x 版本发布,解决单机部署的单点问题。
Q9:因网络中断、网张闪断、节点宕机和超时等引发的异常,Fescar会提供相应的补偿措施么?
A9:这些异常状况的处理是分布式事务解决方案的基本要求,Fescar 一样也是提供了整套方案来处理各种异常场景。这方面的具体机制会在 HA Cluster 版本发布时,给出全面的分析介绍。
Q10:Fescar框架中,如何监控分布式事务?
A10:监控是很是重要的一起内容。TXC 和 GTS 的监控在阿里巴巴内部使用了不少基础设施的辅助。而在开源版本中,咱们尚未一个现成的监控方案。大致上,监控的基础是两个方面:一方面是日志,经过日志的采集和处理,能够造成一个完整的事务链路,这些数据对于业务层面的分析和调优是重要的参考依据。另外一方面是 API,Fescar 会提供一套管控 API,用于对运行时事务的管理。咱们后续会把这两方面的数据格式、部署形态及接口整理出来,但愿和社区来共建监控这个重要的方面。
Q11:Fescar 的roadmap 有了么?
A11:目前最新的roadmap以下: v0.1.0
固然,项目迭代演进的过程,咱们最重视的是社区的声音,路线图会和社区充分交流及时进行调整。
Q12:Fescar 官网何时上线?
A12:Fescar 官方域名已经注册,官网将采用静态开源站点搭建工具Docsite「传送门」进行搭建,logo 已经设计并将于近期公布。
Q13:如何加入 Fescar 社区,进行贡献,已经摩拳擦掌了。
A13:咱们很是欢迎你们经过各类形式参与到咱们项目的建设中,包括但不限于:
具体的参与方法能够参见咱们项目中的CONTRIBUTING 指引,或与 @eternaltingting@163.com 联系。实际上,咱们并不拘泥于贡献的形式,开发者提出的每个 issue,不管是Bug Report、改进建议或者甚至是问题咨询都表明着对项目的关注和帮助。但愿 Fescar 项目和社区一块儿健康成长,成为分布式事务领域一个优秀的解决方案。
本文做者:煊檍,社区昵称sharajava,Fescar 开源项目发起人,阿里巴巴中件间 TXC/GTS 研发团队负责人,曾多年从事 WebLogic 核心研发工做,长期专一于中间件,在分布式事务领域的技术实践较丰富。
欢迎关注阿里巴巴中间件官方微博