掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:煊檍 2019-01-18 08:42:54
開(kāi)源
分布式 開(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ù)久矣。

? Mikito Tateisi
開(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)題。
阿里巴巴中間件團(tuán)隊(duì)發(fā)布TXC(Taobao Transaction Constructor),為集團(tuán)內(nèi)應(yīng)用提供分布式事務(wù)服務(wù)。
TXC 經(jīng)過(guò)產(chǎn)品化改造,以GTS(Global TransactionService)的身份上線阿里云,成為當(dāng)時(shí)業(yè)界唯一一款云上分布式事務(wù)產(chǎn)品,以阿里云公有云或?qū)S性平鉀Q方案的形式,交付給眾多外部客戶。
基于 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)源方案,F(xiàn)escar 和他們之間有哪些區(qū)別?和JTA支持分布式事務(wù)有哪些區(qū)別?
A3:既有的分布式事務(wù)解決方案按照對(duì)業(yè)務(wù)侵入性分為兩類,即:對(duì)業(yè)務(wù)無(wú)侵入的和對(duì)業(yè)務(wù)有侵入的。
既有的主流分布式事務(wù)解決方案中,對(duì)業(yè)務(wù)無(wú)侵入的只有基于 XA 的方案(注:?jiǎ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)的。
實(shí)際上,最初分布式事務(wù)只有 XA 這個(gè)唯一方案。XA 是完備的,但在實(shí)踐過(guò)程中,由于種種原因(包含但不限于上面提到的3 點(diǎn))往往不得不放棄,轉(zhuǎn)而從業(yè)務(wù)層面著手來(lái)解決分布式事務(wù)問(wèn)題。比如:
都屬于這一類。這些方案的具體機(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ù)邏輯侵入方案的不同在于,F(xiàn)escar 的設(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ī)制。具體的差別如下:
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í)等引起的異常,F(xiàn)escar會(huì)提供相應(yīng)的補(bǔ)償措施么?
A9:這些異常情況的處理是分布式事務(wù)解決方案的基本要求,F(xiàn)escar 同樣也是提供了整套方案來(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,F(xiàn)escar 會(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
v0.5.x
v0.8.x
v1.0.0
v1.5.x
v2.0.0
當(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(mén)」進(jìn)行搭建,logo 已經(jīng)設(shè)計(jì)并將于近期公布。
Q13:如何加入 Fescar 社區(qū),進(jìn)行貢獻(xiàn),已經(jīng)摩拳擦掌了。
A13:我們非常歡迎大家通過(guò)各種形式參與到我們項(xiàng)目的建設(shè)中,包括但不限于:
具體的參與方法可以參見(jiàn)我們項(xiàng)目中的CONTRIBUTING 指引,或與 @[email protected]聯(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ū)昵稱sharajava,F(xiàn)escar 開(kāi)源項(xiàng)目發(fā)起人,阿里巴巴中件間 TXC/GTS 研發(fā)團(tuán)隊(duì)負(fù)責(zé)人,曾多年從事 WebLogic 核心研發(fā)工作,長(zhǎng)期專注于中間件,在分布式事務(wù)領(lǐng)域的技術(shù)實(shí)踐較豐富。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流