螞蟻金服黑科技:SOFA DTX分佈式事務,保障億級資金操作一致性

小螞蟻說:

SOFA ( Scalable Open Financial Architecture )是螞蟻金服

自主研發的金融級分佈式中間件,包含了構建金融級雲原生架構所需的各個組件,包括微服務研發框架,RPC 框架,服務註冊中心,分佈式定時任務,限流/熔斷框架,動態配置推送,分佈式鏈路追蹤,Metrics監控度量,分佈式高可用消息隊列,分佈式事務框架,分佈式數據庫代理層等組件,是一套分佈式架構的完整的解決方案,也是在金融場景裡錘鍊出來的最佳實踐。

支付寶的架構自設計之初到現在,無論系統多麼複雜、交易規模多麼龐大,數據的一致性是保證資金安全的最核心技術之一,使用戶無論在哪裡,都可放心、流暢地使用支付寶。本文介紹的是目前唯一在超大規模金融級分佈式架構上實戰驗證過的分佈式事務方案。

前言

數據、消息、微服務是螞蟻金服自主研發的金融級分佈式中間件SOFA (Scalable Open Financial Architecture)的三大方向。

螞蟻金服黑科技:SOFA DTX分佈式事務,保障億級資金操作一致性

眾所周知,2007年的時候,整個淘寶網是一個幾百兆字節的WAR包(Java網站應用程序包),大小功能模塊超過200個,在當時淘寶業務幾乎每隔幾個月就翻倍的高速發展情況下,這樣的應用架構給當時有著500多人的淘寶技術團隊帶來了很大的壓力。螞蟻金服的前身支付寶團隊當時也在淘寶裡,作為淘寶的支付交易模塊。而從2006年底開始,現任螞蟻金服CTO、時任支付寶第一代架構師程立(花名:魯肅)就開始思考對於支付寶架構的改造,以適應整個淘寶的架構發展,這就是螞蟻金服中間件的源起。

從淘寶“大餅一沱”的緊耦合系統中分拆出來的松耦合系統,就只有分佈式計算架構可選,而淘寶又是互聯網應用,於是就需要創造出一個互聯網規模的分佈式計算架構,“分佈式事務”就是在這個拆分過程中出現的問題。淘寶最初是基於IOE設備,無需考慮事務一致性的問題;而在互聯網分佈式架構下,由於網絡和PC服務器等設備的不可靠,數據不一致問題很容易出現。而支付寶作為金融交易系統,對事務型的狀態數據一致性處理以及交易成本的要求更高,這背後就是資金安全:資金處理絕對不出差錯,交易與數據具備強一致性,在任何故障場景數據不丟不錯。

現任螞蟻金服數據中間件負責人尹博學(花名:育睿)介紹:螞蟻金服分佈式事務(Distributed Transaction-eXtended,簡稱 DTX)除了協調數據庫的事務之外,還可以協調服務的一致性,是在數據庫層之上,從業務層保證不同業務之間的數據一致性——即複雜系統之間的一致性,這就是面向未來的核心金融系統。DTX之所以被稱為“黑科技”,是因為自設計之初到現在,無論系統多麼複雜、交易規模多麼龐大,DTX都能在極短的時間內實現數據的一致性:用戶無論在哪裡,都可放心、流暢地使用支付寶

螞蟻金服黑科技:SOFA DTX分佈式事務,保障億級資金操作一致性

螞蟻金服數據中間件負責人育睿

黑科技到底有多“黑”?

尹博學強調,“事務”是貫穿於所有的金融交易,而金融級交易的數據一致性是要強保證的。例如,支付寶用戶A給支付寶用戶B轉錢,A減錢、B就必須要同時加上錢,這兩個動作必須一起成功或是一起都不成功,而不能成功一半,也就是說不能A減了錢但B沒有加上,這就會導致資損。

本質上,金融核心系統中的微服務架構,在進行業務垂直拆分和數據水平拆分後,存在大量的微服務和單元數據庫,一個完整金融業務需要調用多個服務和數據庫完成。同時,不僅微服務之間需要解決一致性問題,不同系統之間的調用也存在事務邊界問題,那麼強一致的分佈式事務服務就將發揮重要作用。

DTX分佈式事務服務能滿足複雜場景和高併發的挑戰,充分考慮各類異常情況,且具備足夠的伸縮性、高併發和高可用性,支持跨機房的事務協調能力。“這一整套的協調方式,雖然不是我們獨創,但可以認為螞蟻金服做到了工程的極致。程立最初設計分佈式事務的時候,當時只有BASE是一種相對比較成熟的理論,但能達到螞蟻金服這個量級的,目前只此一家。除了性能和吞吐之外,還要衡量考慮擴展性。集中式架構下用DB2或者Oracle架構,可以從1萬個事務提到10萬個事務,但是從10萬提到200萬就幾乎不可能;螞蟻金服可從200萬變到2000萬,甚至更高,而且成本低。”尹博學表示。

DTX黑科技的亮點很多,其中包括:大規模、高擴展、高性能、低成本等。2017年,DTX支持了雙十一峰值25.6萬TPS的支付請求;涉及支付、轉賬、理財、保險等各種業務場景;在支付寶內部,接入DTX的系統超過100+個;每天處理資金以千億記,確保資金的絕對安全;按照雙活可擴展設計,不受地域、機房等限制,無限加PC服務器等機器就能水平無限擴展;而當出現故障的時候,可很快恢復。整個過程,從始自終,都絕對保證資金安全。

從方法論上保證強一致

2007開始支付寶核心開始SOA服務化之路,服務化拆分一開始就遇到了跨服務分佈式事務問題。傳統的基於數據庫本地事務的解決方案,只能保障單個服務的一次處理具備原子性(一次事務中所涉及的所有操作全部執行或全部不執行)、隔離性、一致性與持久性,但無法保障多個分佈服務間處理的一致性。由於業務約束(如紅包不符合使用條件、賬戶餘額不足等)、系統故障(如網絡或系統超時或中斷、數據庫約束不滿足等),都可能造成服務處理過程在任何一步無法繼續。一旦數據不一致,就會產生嚴重的業務後果。

傳統分佈式事務需保證ACID屬性,強調一致性,要求強一致;而BASE則是與之相對立的理論,認為為了可用性(Availability)而犧牲部分一致性(Consistency)可以顯著的提升系統的可伸縮性,這就是異步操作。螞蟻金服分佈式事務產品DTX分別基於兩種理論實現了兩種模式:基於BASE理論的TCC模式和基於ACID理論的FMT模式

TCC方案其實是兩階段提交的一種改進,將整個業務邏輯的每個分支分成了Try、Confirm、Cancel三個操作,其中Try部分完成業務的準備工作、Confirm部分完成業務的提交、Cancel部分完成事務的回滾。這三步僅僅是方法論,具體在每一步的操作實現,則由所涉及的服務自行設計代碼實現。以簡單的A向B轉賬為例,A加錢與B減錢的操作由兩個參與方服務來實現,A和B的兩個Try會同時進行業務系統檢測和資源預留,只有兩個Try都成功了才會往下進行Confirm操作以提交金額的增減。對於複雜的操作,還會在一個分佈式事務裡嵌套多層參與方,只有每層的Try都成功了,才會完成整個分佈式事務的第一階段,中間一旦任何一層失敗都會回滾。

為了解決 TCC 模式的易用性問題,螞蟻分佈式事務後來又推出了框架託管模式

(Framework-managed transactions,簡稱 FMT)。FMT是一種無侵入的分佈式事務解決方案,該模式解決了分佈式事務的易用性問題,在該模式下,開發者只需關注一階段操作,框架會自動解析SQL語義,生成二階段提交和回滾操作,使分佈式事務的接入更便捷,該模式下對業務代碼幾乎無侵入,框架能夠“自動化”地解決分佈式架構下的數據一致性問題。

“DTX本身是有嵌套的,如果調了一個服務,可能它下面還調用了其它服務,也是分佈式的,從而形成多級複雜嵌套。DTX是一個方法論級的保證,不管分多少級,只要層層提交成功了,最終就都能成功提交。”尹博學介紹。DTX本身帶有實時監控,可以監控實時的事務信息,包括事務數、成功率、平均耗時等,也可以與鏈路監控相結合,根據DTX上報的實時信息,提供歷史趨勢圖、同比/環比分析、報警等功能。

這樣的DTX就能夠保證每年的雙十一支付峰值。2017年的支付峰值25.6萬筆/秒,相當於200萬個分支事務,也就是這200萬分支事務都要達到最終一致狀態。在峰值的那幾秒鐘,DTX每秒鐘要維護200萬分支子事務,監控它們的狀態運行,要保證達到最終的一致性;如果200萬個分支事務裡面發現不一致,就要快速處理。支付寶雙十一大促的交易筆數和峰值每年都在以驚人速度大幅增長,

螞蟻金服所面臨的極端技術挑戰——如何支撐如此大規模交易並保證一致性問題,在全球範圍來看都不曾有企業實現過。

如今,整個DTX團隊規模並不算大,那又是怎麼實現25.6萬筆/秒的世界級工程呢?

在阿里集團工作了8年的郎曉東(花名:冰魂)介紹:極致工程主要是靠異步化來實現,也就是延遲提交。在延遲提交的情況下,數據還是對的,不阻礙交易流程,這就叫異步化。也就是說,在極限峰值的情況下,支付寶能向淘寶的請求發出Confirm,保證雖然現在沒執行但5分鐘之後一定會執行,那麼淘寶就可以放心地告訴用戶購買成功了。因為雙十一大促的最高峰值通常持續時間不長,那麼在洪峰之後,稍有喘息就可以釋放IT資源來處理“蓄洪”那部分操作。“異步只是在極限情況下采用,雙十一零點一過,又是同步了。異步主要是針對成本,如果多加幾倍的機器,也可以做到同步,但用戶體驗要同成本效益達到最佳平衡,又要保證資金安全,因此就開發出了異步的模式。”郎曉東表示,異步模式讓DTX具有極強的可擴展性,交易量翻多少倍都可以支持。

當然,處理200萬個分支事務/秒的峰值,在搜索等其它非互聯網金融領域也是有互聯網公司能達到這樣的規模,但是要求的嚴格性不一樣。尹博學介紹,協調參與方多的時候,出錯的概率就高,一般架構的網站對嚴格性的要求並不強,數據不一致也問題不大,或者數據最終達到一致性但時間較長也無所謂。但螞蟻金服屬於金融業務,就必須要在高性能、低成本的前提下達到數據的強一致。

用軟件保證強一致

“總結螞蟻金服DTX在工程上的卓越性:首先就是能處理支付峰值200萬分支事務;其次是大規模互聯網分佈式架構;第三,在數據分佈設計上採用了抵近存儲,也就是讓數據靠近業務,再通過批量技術來處理,以減少交互開銷、提升整體吞吐性。最重要的就是DTX是通過軟件實現分佈式,保證處理能力的線性與水平擴展,沒有單點、消除單點。”尹博學強調。

所謂用軟件實現分佈式,即不依賴底層的硬件,默認底層的硬件隨時會掛掉。而對於DTX來說,還是在最高的業務層實現的強一致,這就意味著甚至默認底層的數據庫也可以隨時掛掉。

早年間,淘寶還採用的是Oracle數據庫、MySQL開源數據,後來又開發出了自研數據庫OceanBase。OceanBase(以下簡稱OB)金融級分佈式關係型數據庫也是螞蟻金服的“黑科技”之一,讓用戶像使用單機數據庫一樣方便的使用OB,同時提供更高的性能與更好的服務穩定性等。

DTX的強一致與OB的強一致,有什麼區別呢?比如有一張用戶表,這張用戶表大到單機存不下,那麼就在OB裡存了兩臺機器,例如是M1和M2兩臺機器。一個事務既要操作M1上的一行數據,同時又要操作M2上的一行數據,那麼這個事務的一致性是由OB來保證。但在螞蟻金服架構裡還有一張更大用戶表,會被拆成25張用戶表,這25張用戶表中的每張可能“塞”到一個OB集群裡,從業務的角度要操作跨兩個OB集群的事務,這就是DTX來實現。

DTX主要定位於用戶視角的跨庫訪問,包括單服務、跨服務協調底層多存儲資源,支持多種底層數據庫,包括MySQL、Oracle、OB等。

對於DTX來說,這些下一層的數據庫,也被視為“硬件”。比如OB會認為磁盤屬於比較慢的硬件系統,而DTX也同樣會極力優化下層數據操作的總體執行性能,因為要考慮到網絡延時,這樣DTX就會把一次操作的多條SQL語句同時發給OB而不是順序發送,從而大幅提高單線程的處理能力。簡單理解,就是DTX作為處於最高業務層的強一致性方法,統領下面各層資源,在每一層都進行極致優化,從而達到整個DTX操作的最優化。“我們只能把軟件當成硬件來優化,一般的公司也不需要優化,因為也摳不到那麼細。”尹博學強調。

“沒有最大,只有更大”

在談到來螞蟻金服一年多的體驗,尹博學說這就是不斷突破對於“大”的認知。

“在螞蟻金服場景下,會突破對原有理論的認識,昇華到另一個境界。在這麼大的交易量下,很簡單的問題會變得很複雜。因為你沒有在這麼‘大’的場景下思考問題,你想當成認為理論就應該是這樣。但當遇到這麼大的交易量,會發現要考慮的很複雜。當你經歷過了這麼大的交易量,再用理論總結這個複雜問題時,發現它又會變得比較簡單。這是一個認識的深化,原來沒想到過這麼大的場景、這麼大交易量下的主要矛盾是什麼,發現了以後又變簡單了。”這是尹博學的感覺。

峰值達到每秒25.6萬筆、一天要生成幾十億筆交易的訂單號,這個“天量”已經突破了所有現有技術的極限,那麼解決“天量”規模背後的技術思想就是把同步事情變成提前做或延後做,“抓住這個思想,就會發現又變得簡單了,當然前提是要保證提前做或者延後做都是對的”。

DTX的對外輸出

如今,DTX技術在對外輸出的過程,又變得簡單了起來。張森(花名:紹輝)於2011年加入淘寶,於2015年轉到螞蟻金服,之後一直在中間件SOFA團隊,主要從事數據中間件分佈式事務。

張森介紹,螞蟻金服的分佈式事務有兩個名字:對內叫XTS,ExtendedTransaction Service可擴展事務服務;對外叫DTX,Distributed Transaction-eXtended分佈式事務。2016年張森負責開發了分佈式事務後臺運維的自動化,2017年分佈式事務產品又開發了可託管版本:FMT,該模式主要是解決用戶接入和使用DTX的效率問題,讓用戶可以基本無侵入的方式下解決分佈式事務問題。2018年螞蟻金服將推出第三代分佈式事務解決方案,也就是XA(eXtended Architecture)模式,全面支持標準XA協議,覆蓋面廣,可無縫接入支持XA的數據庫、消息等,幫助傳統業務上雲,並與自研數據庫OceanBase共同打造實時數據一致性的整體解決方案。

螞蟻金服的技術在2014年開始向生態夥伴和關聯機構輸出(比如網商銀行、天弘基金、Paytm等)。

螞蟻金服黑科技:SOFA DTX分佈式事務,保障億級資金操作一致性

在2017年,南京銀行成為了首個國內銀行機構客戶。在南京銀行互聯網金融平臺項目中,螞蟻金融級分佈式架構解決方案作為一個整體輸出,而SOFA中間件包括DTX作為其中非常重要的一部分在項目中落地。2014年是螞蟻金融科技元年,為了更好的支持網商銀行的長遠發展,在架構設計初期網商銀行架構組就選型DTX做為分佈式事務的解決方案。

總結DTX對外輸出的優勢:第一,相比競爭對手而言,DTX覆蓋的金融業務種類是最廣的,因為螞蟻金服是全金融場景,包括了支付、理財、銀行、保險等;第二,經過大流量檢驗過,成就了極致的工程實現;第三,理論發展較快,比如業界其它廠商還停留在TCC模式下,螞蟻金服已經針對雲上的新需求提出FMT、XA等模式,大幅度減少接入的複雜性,並能與螞蟻金服自研的分佈式關係型數據庫OceanBase 共同打造實時數據一致性的整體解決方案;第四,金融級解決方案,通過專業的架構轉型諮詢和實施交付服務,使螞蟻金服沉澱多年的工程實踐精粹與行業落地能力能夠結合用戶自身的場景進行打通和賦能,為金融機構架構轉型帶來推動作用,同時也將開放場景定製化能力、大促保障等業務內容,為用戶進行量身定製打造最佳方案,為金融機構數字化轉型保駕護航。

回顧螞蟻金服SOFA DTX最近十年的發展過程,簡單講就是一個不斷求解金融場景超大規模交易量下分佈式架構設計的問題及其工程實現,以優異的性能保障業務數據的一致性,支撐數億級用戶的資金操作。支付寶/螞蟻金服用十四年時間成就了8.7億全球用戶(2018年5月數據,包括支付寶及其全球合資夥伴)、小微企業與金融機構的普惠金融夢想。“為世界帶來更多平等的機會”,一個更加包容、更加可持續、更加綠色的數字金融——這才是螞蟻金服SOFA DTX分佈式事務的黑科技之道。

彩蛋

▲前100人可以直接掃碼入群,手速要快哦!

— END —

< 粉絲福利時間 >

恭喜以下用戶獲得『螞蟻金服科技』粉絲福利:雲棲2050門票一張

xyzlab、空、Limo、覔亖甴、Joe-姜忠坷、純、成崽兒、聖愛、魔方、Monte、山在北國、dk、Mystery、莫那·魯道、德 立、0.0、成東青、欲 亂 人 心 、笑吧、軍軍軍軍

回覆“2050門票”然後領取您專屬的兌換碼

購票官網:

https://www.yunqi2050.org/#/index

非常感謝大家對螞蟻金服技術的支持和關注!

如有問題,我們將隨時為您答疑解惑

後續小螞蟻會努力給您帶來更多福利哦~


分享到:


相關文章: