支付寶分布式事務初探

2021-09-01 10:52:05 字數 1000 閱讀 7708

最近有被人問到分布式事務的工作原理,由於從來沒做過這方面的東西,只能胡亂猜測一番,結果當然是凌亂無比。

剛好今天有支付寶的高手來分享支付寶的分布式事務。跑去聽了一下,果然大有收穫。在這裡把今天聽到的總結一下,也算是份課堂筆記吧!

分布式事務,這個東西多半都是用在金融相關的系統上,應用的場景往往是多系統跨庫。

相關的業務對事務的一致性要求很高,涉及到錢的東西當然分毫不能有差。

那麼怎麼來處理這些系統之間的事務。保證事務的一致性,原子性,永續性,隔離性呢?

舉個例子,支付寶有交易系統、賬戶系統、積分系統等多個子系統。

當客戶發起一筆交易時,需先在交易系統中插入交易記錄,然後在賬戶系統中進行金額的增減,最後在積分系統中給加上最新的積分。

實際的業務比這個更複雜。這三部中有任何一步失敗,都需要進行回滾。那麼怎麼保證這三個事務會進行回滾呢?

支付寶使用的是乙個二段式的分布式事務

第一階段,通知各子系統進行業務的操作,比如可以在交易系統中對交易記錄表拷貝乙個副表,在副表中插入交易記錄。如果執行成功,子系統返回成功的資訊

在這個中間還有乙個很重要的角色就是有乙個總排程者,他負責控制整個事務的流程。發起事務時首先要註冊到排程者上,事務完成,或者回滾也是由排程者發起!

接著上面的繼續,當子系統第一階段業務執行成功,返回成功給排程者,如果所有子系統都返回成功資訊,者排程者通知子系統進行第二階段的操作,講資料插入主表中,如果有任何乙個子系統返回失敗的訊息,則通知所有系統回滾。

這是乙個理想的狀態,前提是每次業務操作都會完成,這樣事務的一致性就可以保證,但是實際情況不是這樣,比如伺服器宕機,網路斷掉等,會導致某一階段不能完成

這樣會導致事務的不完整,所以我們還需要乙個清道夫式的角色,來保證系統中事務的完整。實際上我們可以建立乙個定時鐘,定時去掃瞄所有的事務,遇到超時,或者不完整的事務,一律通知各子系統進行回滾,這樣雖然有可能會導致誤殺一些執行時間過長的事務,但是卻保證了整個系統的事務一致,所以還是值得的。

大致原理就是如此,具體的實現方式還是有很多技巧性的東西,在這裡就不深入**了。

支付寶 分布式事務服務 DTS四

分布式事務二 分布式事務處理三 分布式事務四 基於可靠訊息的最終一致性 分布式事務五 基於可靠訊息的最終一致性 異常流程 分布式事務六 常規mq佇列 分布式事務七 冪等性設計 分布式事務八 可靠訊息最終一致性方案 分布式事務九 基於可靠訊息的最終一致性 分布式事務10 最大努力通知形勢 柔性事務解決...

分布式 分布式事務

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

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

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