关于开源分布式事务中间件Fescar,我们总结了开发者关心的13个问题
開(kāi)源分布式事務(wù)中間件 Fescar 自1月10日上線v0.1版本以來(lái),受到了開(kāi)發(fā)者們的極大關(guān)注(watch249,star3005,fork649,社區(qū)討論的issue58,數(shù)據(jù)統(tǒng)計(jì)于1月17日14:00),可見(jiàn),天下苦分布式事務(wù)久矣。
為此,我們收集了大家在社區(qū)(Github)和社群(釘釘群&微信群)關(guān)注的核心問(wèn)題,總結(jié)如下,并給出回復(fù)。
Q1:Fescar 的發(fā)展經(jīng)歷了哪些歷程?和阿里云全局事務(wù)服務(wù)GTS之間是什么關(guān)系?
A1:阿里巴巴是國(guó)內(nèi)最早一批進(jìn)行應(yīng)用分布式(微服務(wù)化)改造的企業(yè),所以很早就遇到微服務(wù)架構(gòu)下的分布式事務(wù)問(wèn)題。
- 2014 年
阿里巴巴中間件團(tuán)隊(duì)發(fā)布TXC(Taobao Transaction Constructor),為集團(tuán)內(nèi)應(yīng)用提供分布式事務(wù)服務(wù)。
- 2016 年
TXC 經(jīng)過(guò)產(chǎn)品化改造,以GTS(Global TransactionService)的身份上線阿里云,成為當(dāng)時(shí)業(yè)界唯一一款云上分布式事務(wù)產(chǎn)品,以阿里云公有云或?qū)S性平鉀Q方案的形式,交付給眾多外部客戶。
- 2019 年
基于 TXC 和 GTS 的技術(shù)積累,阿里巴巴中間件團(tuán)隊(duì)發(fā)起了開(kāi)源項(xiàng)目Fescar(Fast & EaSy Commit And Rollback, FESCAR),和社區(qū)一起建設(shè)這個(gè)分布式事務(wù)解決方案。
TXC/GTS/Fescar一脈相承,為解決微服務(wù)架構(gòu)下的分布式事務(wù)問(wèn)題交出了一份與眾不同的答卷。
Q2:Fescar 有哪些適用場(chǎng)景?
A2:Fescar 的愿景是讓分布式事務(wù)的使用像現(xiàn)在本地事務(wù)的使用一樣簡(jiǎn)單、高效,最終的目標(biāo)是希望可以適用于所有的分布式事務(wù)場(chǎng)景。目前,核心的 AT 模式適用于構(gòu)建于支持本地 ACID 事務(wù)的關(guān)系型數(shù)據(jù)庫(kù)。非關(guān)系型數(shù)據(jù)庫(kù)類資源的管理,通過(guò) MT 模式來(lái)支持。AT 模式與 MT 模式完全兼容,所以可以在同一個(gè)分布式事務(wù)中,同時(shí)管理兩類資源。
Q3:目前有已經(jīng)有一些其他的分布式事務(wù)開(kāi)源方案,Fescar 和他們之間有哪些區(qū)別?和JTA支持分布式事務(wù)有哪些區(qū)別?
A3:既有的分布式事務(wù)解決方案按照對(duì)業(yè)務(wù)侵入性分為兩類,即:對(duì)業(yè)務(wù)無(wú)侵入的和對(duì)業(yè)務(wù)有侵入的。
- 業(yè)務(wù)無(wú)侵入的方案
既有的主流分布式事務(wù)解決方案中,對(duì)業(yè)務(wù)無(wú)侵入的只有基于 XA 的方案(注:問(wèn)題中提到的 JTA 是XA 方案的 Java 版本),但應(yīng)用XA 方案存在 3 個(gè)方面的問(wèn)題:
1、要求數(shù)據(jù)庫(kù)提供對(duì) XA 的支持。如果遇到不支持 XA(或支持得不好,比如 MySQL 5.7 以前的版本)的數(shù)據(jù)庫(kù),則不能使用。
2、受協(xié)議本身的約束,事務(wù)資源(數(shù)據(jù)記錄、數(shù)據(jù)庫(kù)連接)的鎖定周期長(zhǎng)。長(zhǎng)周期的資源鎖定從業(yè)務(wù)層面來(lái)看,往往是不必要的,而因?yàn)槭聞?wù)資源的管理器是數(shù)據(jù)庫(kù)本身,應(yīng)用層無(wú)法插手。這樣形成的局面就是,基于 XA 的應(yīng)用往往性能會(huì)比較差,而且很難優(yōu)化。
3、已經(jīng)落地的基于 XA 的分布式解決方案,都依托于重量級(jí)的應(yīng)用服務(wù)器(Tuxedo/WebLogic/WebSphere 等),這是不適用于微服務(wù)架構(gòu)的。
- 侵入業(yè)務(wù)的方案
實(shí)際上,最初分布式事務(wù)只有 XA 這個(gè)唯一方案。XA 是完備的,但在實(shí)踐過(guò)程中,由于種種原因(包含但不限于上面提到的3 點(diǎn))往往不得不放棄,轉(zhuǎn)而從業(yè)務(wù)層面著手來(lái)解決分布式事務(wù)問(wèn)題。比如:
- 基于可靠消息的最終一致性方案
- TCC
- Saga
都屬于這一類。這些方案的具體機(jī)制在這里不做展開(kāi),網(wǎng)上這方面的論述文章非常多。總之,這些方案都要求在應(yīng)用的業(yè)務(wù)層面把分布式事務(wù)技術(shù)約束考慮到設(shè)計(jì)中,通常每一個(gè)服務(wù)都需要設(shè)計(jì)實(shí)現(xiàn)正向和反向的冪等接口。這樣的設(shè)計(jì)約束,往往會(huì)導(dǎo)致很高的研發(fā)和維護(hù)成本。
不可否認(rèn),侵入業(yè)務(wù)的分布式事務(wù)方案都經(jīng)過(guò)大量實(shí)踐驗(yàn)證,能有效解決問(wèn)題,在各行種業(yè)的業(yè)務(wù)應(yīng)用系統(tǒng)中起著重要作用。但回到原點(diǎn)來(lái)思考,這些方案的采用實(shí)際上都是迫于無(wú)奈。
回到問(wèn)題:
與基于消息的最終一致、TCC、Saga等業(yè)務(wù)邏輯侵入方案的不同在于,Fescar 的設(shè)計(jì)初衷就是保持對(duì)業(yè)務(wù)的非侵入性,不要求業(yè)務(wù)層面按照分布式事務(wù)的特定場(chǎng)景來(lái)設(shè)計(jì)正向和反向的兩套(甚至多套)業(yè)務(wù)邏輯。這方面的差別就不展開(kāi)了。
與 XA 的區(qū)別在于,設(shè)計(jì)了一套不同與 XA 的兩階段協(xié)議,在保持對(duì)業(yè)務(wù)不侵入的前提下,保證良好的性能,也避免了對(duì)底層數(shù)據(jù)庫(kù)協(xié)議支持的要求??梢钥醋魇且惶纵p量級(jí)的XA 機(jī)制。具體的差別如下:
- 架構(gòu)層次
XA方案的 RM 實(shí)際上是在數(shù)據(jù)庫(kù)層,RM本質(zhì)上就是數(shù)據(jù)庫(kù)自身(通過(guò)提供支持 XA 的驅(qū)動(dòng)程序來(lái)供應(yīng)用使用)。
而 Fescar 的RM 是以二方包的形式作為中間件層部署在應(yīng)用程序這一側(cè)的,不依賴與數(shù)據(jù)庫(kù)本身對(duì)協(xié)議的支持,當(dāng)然也不需要數(shù)據(jù)庫(kù)支持XA 協(xié)議。這點(diǎn)對(duì)于微服務(wù)化的架構(gòu)來(lái)說(shuō)是非常重要的:應(yīng)用層不需要為本地事務(wù)和分布式事務(wù)兩類不同場(chǎng)景來(lái)適配兩套不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)。
這個(gè)設(shè)計(jì),剝離了分布式事務(wù)方案對(duì)數(shù)據(jù)庫(kù)在協(xié)議支持上的要求。
- 兩階段提交
先來(lái)看一下 XA 的2PC 過(guò)程。
無(wú)論 Phase2 的決議是commit 還是 rollback,事務(wù)性資源的鎖都要保持到Phase2 完成才釋放。
再看 Fescar 的2PC 過(guò)程。
分支事務(wù)中數(shù)據(jù)的 本地鎖 由本地事務(wù)管理,在分支事務(wù) Phase1 結(jié)束時(shí)釋放。
同時(shí),隨著本地事務(wù)結(jié)束,連接 也得以釋放。
分支事務(wù)中數(shù)據(jù)的 全局鎖 在事務(wù)協(xié)調(diào)器側(cè)管理,在決議 Phase2 全局提交時(shí),全局鎖馬上
可以釋放。只有在決議全局回滾的情況下,全局鎖 才被持有至分支的 Phase2 結(jié)束。
這個(gè)設(shè)計(jì),極大地減少了分支事務(wù)對(duì)資源(數(shù)據(jù)和連接)的鎖定時(shí)間,給整體并發(fā)和吞吐的提升提供了基礎(chǔ)。
Q4:Fescar 支持 Dubbo 的哪些版本?
A4:所有版本。
Q5:Fescar 支持 Spring Cloud么?
A5:Fescar 與微服務(wù)框架的接口點(diǎn)在于,需要把事務(wù)的唯一標(biāo)識(shí) XID(一個(gè)字符串)通過(guò)微服務(wù)框架的服務(wù)調(diào)用間調(diào)用的機(jī)制中,透明地傳遞,并通過(guò) Fescar 的 API 來(lái)綁定(或解綁)到應(yīng)用的線程上下文中。(機(jī)制可以參考內(nèi)置的對(duì) Dubbo 支持的實(shí)現(xiàn) com.alibaba.fescar.dubbo.TransactionPropagationFilter)所以,本質(zhì)上這個(gè)問(wèn)題不是支不支持 Spring Cloud,而是如何支持 Spring Cloud 中選用的服務(wù)調(diào)用機(jī)制。目前正在和 Spring Cloud Alibaba 的同學(xué)合作,準(zhǔn)備在v0.5.x版本(或更早)發(fā)布對(duì) Spring Cloud默認(rèn)的支持。同時(shí),非常歡迎社區(qū)的朋友參與進(jìn)來(lái),貢獻(xiàn)包括 Spring Cloud 在內(nèi)的各類微服務(wù)框架的支持。
Q6:Fescar 是否支持本地跨庫(kù)多數(shù)據(jù)源?除了關(guān)系型數(shù)據(jù)庫(kù),是否還支持NoSQL數(shù)據(jù)庫(kù)?
A6:本地跨多數(shù)據(jù)源同樣是支持的,在 Fescar 的架構(gòu)中,同一個(gè)服務(wù)中的多個(gè)數(shù)據(jù)源與跨服務(wù)的多個(gè)數(shù)據(jù)源,沒(méi)有本質(zhì)區(qū)別。AT 模式目前僅限于對(duì)關(guān)系型數(shù)據(jù)庫(kù)的支持(本身具備ACID 事務(wù)支持),后面會(huì)發(fā)布出來(lái)的 MT 模式可以支持 NoSQL 這類本身不具備本地事務(wù)支持的資源。
Q7:Fescar 現(xiàn)在開(kāi)源的是AT模式,MT模式暫時(shí)不支持,什么時(shí)候會(huì)開(kāi)源?
A7:當(dāng)前 0.1.0 版本只是把 Fescar 最核心的 AT 模式的最小集發(fā)布出來(lái),一方面是按開(kāi)源的規(guī)劃和架構(gòu)的重構(gòu)進(jìn)展,另一方面也是希望通過(guò)最小集版本,讓用戶和開(kāi)發(fā)者社區(qū)更容易理解到我們核心的設(shè)計(jì)思路,讓更多人比較容易地參與進(jìn)來(lái)建設(shè),而不是完全由阿里巴巴主導(dǎo),僅僅把我們的整套方案開(kāi)源出來(lái)給大家用而已。阿里巴巴在分布式事務(wù)上的技術(shù)積累,我們會(huì)通過(guò) Fescar 項(xiàng)目毫無(wú)保留地貢獻(xiàn)給社區(qū),所有功能特性都會(huì)按規(guī)劃和社區(qū)的反饋陸續(xù)開(kāi)源出來(lái)。MT 按初步的計(jì)劃,會(huì)在 0.5.x 版本發(fā)布。
Q8:Fescar 什么時(shí)候提供HA cluster,單節(jié)點(diǎn)的server的瓶頸如何處理?
A8:按初步的計(jì)劃,HA Cluster 會(huì)在 0.5.x 版本發(fā)布,解決單機(jī)部署的單點(diǎn)問(wèn)題。
Q9:因網(wǎng)絡(luò)中斷、網(wǎng)張閃斷、節(jié)點(diǎn)宕機(jī)和超時(shí)等引起的異常,Fescar會(huì)提供相應(yīng)的補(bǔ)償措施么?
A9:這些異常情況的處理是分布式事務(wù)解決方案的基本要求,Fescar 同樣也是提供了整套方案來(lái)處理各類異常場(chǎng)景。這方面的具體機(jī)制會(huì)在 HA Cluster 版本發(fā)布時(shí),給出全面的分析介紹。
Q10:Fescar框架中,如何監(jiān)控分布式事務(wù)?
A10:監(jiān)控是非常重要的一塊兒內(nèi)容。TXC 和 GTS 的監(jiān)控在阿里巴巴內(nèi)部使用了很多基礎(chǔ)設(shè)施的輔助。而在開(kāi)源版本中,我們還沒(méi)有一個(gè)現(xiàn)成的監(jiān)控方案。大體上,監(jiān)控的基礎(chǔ)是兩個(gè)方面:一方面是日志,通過(guò)日志的采集和處理,可以形成一個(gè)完整的事務(wù)鏈路,這些數(shù)據(jù)對(duì)于業(yè)務(wù)層面的分析和調(diào)優(yōu)是重要的參考依據(jù)。另一方面是 API,Fescar 會(huì)提供一套管控 API,用于對(duì)運(yùn)行時(shí)事務(wù)的管理。我們后續(xù)會(huì)把這兩方面的數(shù)據(jù)格式、部署形態(tài)及接口整理出來(lái),希望和社區(qū)來(lái)共建監(jiān)控這個(gè)重要的方面。
Q11:Fescar 的roadmap 有了么?
A11:目前最新的roadmap如下:
v0.1.0
- 微服務(wù)框架支持: Dubbo
- 數(shù)據(jù)庫(kù)支持: MySQL
- 基于 Spring AOP 的 Annotation
- 事務(wù)協(xié)調(diào)器: 單機(jī)版本
v0.5.x
- 微服務(wù)框架支持: Spring Cloud
- MT 模式
- 支持 TCC 模式事務(wù)的適配
- 動(dòng)態(tài)配置和服務(wù)發(fā)現(xiàn)
- 事務(wù)協(xié)調(diào)器: 高可用集群版本
v0.8.x
- Metrics
- 控制臺(tái): 監(jiān)控/部署/升級(jí)/擴(kuò)縮容
v1.0.0
General Availability: 生產(chǎn)環(huán)境適用
v1.5.x
- 數(shù)據(jù)庫(kù)支持: Oracle/PostgreSQL/OceanBase
- 不依賴 Spring AOP 的 Annotation
- 熱點(diǎn)數(shù)據(jù)的優(yōu)化處理機(jī)制
- RocketMQ 事務(wù)消息納入全局事務(wù)管理
- NoSQL 納入全局事務(wù)管理的適配機(jī)制
- 支持 HBase
- 支持 Redis
v2.0.0
支持 XA
當(dāng)然,項(xiàng)目迭代演進(jìn)的過(guò)程,我們最重視的是社區(qū)的聲音,路線圖會(huì)和社區(qū)充分交流及時(shí)進(jìn)行調(diào)整。
Q12:Fescar 官網(wǎng)什么時(shí)候上線?
A12:Fescar 官方域名已經(jīng)注冊(cè),官網(wǎng)將采用靜態(tài)開(kāi)源站點(diǎn)搭建工具Docsite「?jìng)魉烷T」進(jìn)行搭建,logo 已經(jīng)設(shè)計(jì)并將于近期公布。
Q13:如何加入 Fescar 社區(qū),進(jìn)行貢獻(xiàn),已經(jīng)摩拳擦掌了。
A13:我們非常歡迎大家通過(guò)各種形式參與到我們項(xiàng)目的建設(shè)中,包括但不限于:
- 架構(gòu)設(shè)計(jì)
- 模塊設(shè)計(jì)
- 代碼實(shí)現(xiàn)
- Bug Fix
- Demo樣例
- 文檔、網(wǎng)站和翻譯
具體的參與方法可以參見(jiàn)我們項(xiàng)目中的CONTRIBUTING 指引,或與 @eternaltingting@163.com 聯(lián)系。實(shí)際上,我們并不拘泥于貢獻(xiàn)的形式,開(kāi)發(fā)者提出的每一個(gè) issue,無(wú)論是Bug Report、改進(jìn)建議或者甚至是問(wèn)題咨詢都代表著對(duì)項(xiàng)目的關(guān)注和幫助。希望 Fescar 項(xiàng)目和社區(qū)一起健康成長(zhǎng),成為分布式事務(wù)領(lǐng)域一個(gè)優(yōu)秀的解決方案。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的关于开源分布式事务中间件Fescar,我们总结了开发者关心的13个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里巴巴高级技术专家至简:聊工程师思维
- 下一篇: 阿里云文件存储的高性能架构演进之路