核心金融場景分布式事務

2021-09-20 08:36:40 字數 2927 閱讀 4576

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

1.1、資料庫的水平拆分

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

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

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

1.2、業務服務化拆分

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

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

業務系統按照服務拆分之後,乙個完整的業務往往需要呼叫多個服務,如何保證多個服務間的資料一致性成為乙個難題,需要通過分布式事務來保障多個服務的資料一致性。

螞蟻金服的分布式事務解決方案(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服務,以確保業務資料一致性和效能達到最佳平衡;

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

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

fmt模式下,使用者只需關注自身的業務sql,dtx對業務邏輯的實現無任何侵入,使用者接入更加方便快捷。

dtx的tcc模式和fmt模式,基本解決了分布式事務的最終一致性問題,但是不能很好的支援實時一致性;為了解決分布式事務的實時一致性問題,dtx基於標準xa協議推出xa模式。

xa模式下,事務管理器通過資料庫的標準xa介面,分兩階段協調所有的資料庫資源,在一階段呼叫所有xa事務的xa_prepare介面,在第二階段執行所有xa事務的xa_commit/xa_rollback,最終完成分布式事務的執行。

xa模式借助資料庫的xa協議協調資料庫資源,借助資料庫的mvcc特性達到一致性讀寫,實現了一致性讀寫的分布式解決方案。

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

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

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式事務設計之同步場景

1.同步場景 2 寫場景 購買商品 下單 a 減庫存 b 支付 c 2.解決方案 1 基於非同步補償的分布式事務 2 架構設計的三大關鍵點 如以寫場景為例 針對每個步驟的請求都需要在事務補償服務的資料庫中存放事務id state,ts 每個微服務資料訪問層提供補償介面,如下圖 3.業務邏輯層prox...