核心金融場景分佈式事務

摘要: 分佈式事務是分佈式系統架構設計中的一個技術難點,特別是在這幾年越來越火的微服務架構中,服務拆分所帶來的跨服務數據一致性問題亟待解決,本文將圍繞分佈式事務產生背景和螞蟻金服的分佈式事務解決方案(SOFA-DTX)向大家進行介紹。

分佈式事務是分佈式系統架構設計中的一個技術難點,特別是在這幾年越來越火的微服務架構中,服務拆分所帶來的跨服務數據一致性問題亟待解決,本文將圍繞分佈式事務產生背景和螞蟻金服的分佈式事務解決方案(SOFA-DTX)向大家進行介紹。

1、分佈式事務產生的背景

1.1、數據庫的水平拆分

通常業務系統的數據庫起初是單庫,但隨著業務數據規模的膨脹,單庫存儲受容量和性能限制,逐漸無法滿足業務需求。

如下圖所示,將業務數據庫水平拆分成多個數據庫,是業務發展的必然趨勢。

核心金融場景分佈式事務

數據庫拆分之後,寫操作一旦跨多個數據庫,單數據庫事務就無法保證數據一致性,需要通過分佈式事務來保障跨數據庫操作的數據一致性。

1.2、業務服務化拆分

在業務發展初期,“大餅一沱”的單業務系統架構,能滿足基本的業務需求;但是隨著業務的快速發展,系統的訪問量和業務複雜程度都在快速增長,單系統架構逐漸成為業務發展瓶頸,解決業務系統的高耦合、可伸縮問題的需求越來越強烈。

如下圖所示,按照面向服務(SOA)的架構的設計原則,將單業務系統拆分成多個業務系統,能降低各系統之間的耦合度,使不同的業務系統專注於自身業務,更有利於業務的發展和系統容量的伸縮。

核心金融場景分佈式事務

業務系統按照服務拆分之後,一個完整的業務往往需要調用多個服務,如何保證多個服務間的數據一致性成為一個難題,需要通過分佈式事務來保障多個服務的數據一致性。

2、螞蟻金服的分佈式事務解決方案

螞蟻金服的分佈式事務解決方案(SOFA-DTX), 是螞蟻金服自主研發的分佈式事務中間件,用來保障在大規模分佈式環境下業務活動的最終一致性。

2.1、DTX整體架構

DTX以BASE理論的最終一致性為基礎,以兩階段提交(2PC)為基本執行框架,整體架構上分為3個部分:客戶端、資源管理器、事務管理器:

  • 客戶端

通過事務管理器開啟、結束分佈式事務,通過資源管理器編排分佈式事務活動。

  • 資源管理器

負責具體資源的準備、提交和回滾操作,並在整個執行過程中記錄事務日誌,向事務管理器彙報事務日誌和資源執行狀態。

  • 事務協調器

負責協調分佈式事務的執行:開啟分佈式事務、記錄資源管理器提交的事務日誌和資源狀態、決定分佈式事務最終是提交還是回滾。

DTX按照階兩段提交的方式執行分佈式事務,在第一階段,客戶端首先通知事務管理器開啟分佈式事務;分佈式事務開啟之後,客戶端在分佈式事務內編排事務內的資源,依次執行各個資源的一階段準備操作,每一個資源的準備操作執行情況資源管理器都會向事務管理器彙報;資源編排結束之後,客戶端會通知事務管理器分佈式事務一階段結束:

核心金融場景分佈式事務

在第二階段,事務管理器會根據事務所有資源的一階段執行情況,決定整個分佈式事務最終是提交還是回滾,進而驅動所有資源二階段的提交/回滾操作:

核心金融場景分佈式事務

根據資源管理器類型的不同,DTX分為TCC模式、FMT模式和XA模式;

2.2、TCC模式

DTX的TCC(Try-Confirm-Cancel)模式下,分佈式事務的資源是TCC服務,TCC服務需要用戶編碼實現。

核心金融場景分佈式事務

如上圖所示,DTX事務管理器分兩階段協調所有TCC資源,在一階段調用所有TCC服務的prepare方法,如果所有資源均prepare成功,那麼在第二階段事務管理器會調用所有TCC資源的commit方法;如果在第一階段任一資源prepare失敗,那麼在第二階段事務管理器會調用所有資源的rollback方法;最終所有TCC資源要麼全部提交,要麼全部回滾。

螞蟻金服大部分業務系統的分佈式事務方案均採用TCC模式,由業務層實現兩階段的TCC服務,以確保業務數據一致性和性能達到最佳平衡;

2.3、FMT模式

TCC服務的實現及其約束條件都需要業務方提供,這無疑增加了DTX的接入門檻,所以我們在TCC模式之後繼續往前推進發展,提出了FMT(Framework-managed transactions)模式來解決接入便捷性的問題。

如下圖所示,FMT模式與TCC模式相同的是事務協調者也是分兩階段協調FMT資源,不同的是FMT的資源管理器;在FMT資源管理器中,用戶的業務SQL作為資源的一階段,DTX框架會自動為該業務SQL生成二階段的提交和回滾操作。

核心金融場景分佈式事務

FMT模式下,用戶只需關注自身的業務SQL,DTX對業務邏輯的實現無任何侵入,用戶接入更加方便快捷。

2.4、XA模式

DTX的TCC模式和FMT模式,基本解決了分佈式事務的最終一致性問題,但是不能很好的支持實時一致性;為了解決分佈式事務的實時一致性問題,DTX基於標準XA協議推出XA模式。

XA模式下,事務管理器通過數據庫的標準XA接口,分兩階段協調所有的數據庫資源,在一階段調用所有XA事務的xa_prepare接口,在第二階段執行所有XA事務的xa_commit/xa_rollback,最終完成分佈式事務的執行。

核心金融場景分佈式事務

XA模式藉助數據庫的XA協議協調數據庫資源,藉助數據庫的MVCC特性達到一致性讀寫,實現了一致性讀寫的分佈式解決方案。

3、總結

SOFA-DTX在10年的發展歷程中,伴隨著支付寶業務的飛速發展、架構的快速演進和業務量的井噴式增長,不斷幫用戶解決複雜場景的一致性問題,提供了高性能、高可用性的分佈式事務解決方案;DTX自身演進的三種模式:TCC、FMT和XA相互之間也是功能互補,相輔相成,形成了螞蟻金服完善的分佈式事務解決方案。

分佈式事務SOFA-DTX全面覆蓋金融場景,金融級容災保障、提供豐富的接入模式並且使用簡潔易於接入;目前已經應用在支付寶、網上銀行、螞蟻財富、芝麻信用、南京銀行等項目中。


分享到:


相關文章: