自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

阿里分布式中間件 Seata 從入門到精通

開發(fā) 前端 分布式
最近在寫一本關(guān)于阿里巴巴分布式事務(wù)中間件 Seata 的電子書,Seata可以說是分布式事務(wù)中間件中最完善的了,包括了 AT、TCC、Saga、XA 四種模式,目前 Seata 已經(jīng)更新到了 1.4.2 版本。

[[434878]]

最近在寫一本關(guān)于阿里巴巴分布式事務(wù)中間件 Seata 的電子書,Seata可以說是分布式事務(wù)中間件中最完善的了,包括了 AT、TCC、Saga、XA 四種模式,目前 Seata 已經(jīng)更新到了 1.4.2 版本。

這本電子書主要分成兩部分,第一部分是入門學(xué)習(xí),目前已經(jīng)更新完成,第二部分是源碼解讀,Seata 的源代碼寫的還可以,值得閱讀。

整本書目前的目錄結(jié)構(gòu)如下:

喜歡的朋友歡迎下載學(xué)習(xí)。獲取方式:關(guān)注公眾號,后臺回復(fù):Seata。

下面簡要介紹 Seata 的四種模式。

AT 模式

AT 模式參考了單數(shù)據(jù)庫的事務(wù)原理,我們可以把分布式事務(wù)中每個數(shù)據(jù)庫看做是單數(shù)據(jù)庫的表。首先每個事務(wù)有一個全局的事務(wù) id,叫做 xid。有了這個 xid 后,我們就可以記錄undo_log 了,undo_log 中記錄了這個 xid 對應(yīng)回滾數(shù)據(jù),每次提交事務(wù)前都要先寫 undo_log,后提交事務(wù),這參考了 mysql 中的 WAL 機制。而rollback_info 字段記錄了要回滾的表的記錄中的每個字段和對應(yīng)值,這樣就可以方便的回滾了。

AT模式的兩階段提交體現(xiàn)如下:

  • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個本地事務(wù)中提交,釋放本地鎖和連接資源。
  • 二階段:異步 commit,非常快速地完成。rollback 則通過一階段的回滾日志進(jìn)行反向補償

AT 模式讀寫都有隔離性,這里簡單描述。

寫隔離

一階段本地事務(wù)提交前,需要確保先拿到**全局鎖* 。

拿不到全局鎖 ,不能提交本地事務(wù)。

拿全局鎖的嘗試會有超時時間限制,超出范圍將放棄,并回滾本地事務(wù),釋放本地鎖。

上面是官網(wǎng)的描述,非常容易理解,如果獲取不到全局鎖,就不能提交本地事務(wù),只能等待全局鎖直到超時。

讀隔離

AT模式的讀隔離需要本地事務(wù)隔離級別在讀已提交或以上,AT 模式默認(rèn)的全局隔離級別是讀未提交 。

如果應(yīng)用在特定場景下,必需要求全局的讀已提交 ,Seata 需要通過 SELECT FOR UPDATE 語句代理來實現(xiàn)。

SELECT FOR UPDATE 語句的執(zhí)行會申請全局鎖 ,如果全局鎖被其他事務(wù)持有,則釋放本地鎖并重試。這個過程中,查詢是被 block 住的,直到全局鎖拿到。

TCC 模式

簡單來講,TCC模式就是將整個事務(wù)分成兩個階段來提交,try階段進(jìn)行預(yù)留資源,如果所有分支都預(yù)留成功,則進(jìn)入commit階段提交所有分支事務(wù),否則執(zhí)行cancel取消所有分支事務(wù)。

以電商系統(tǒng)為例,假如有訂單、庫存和賬戶3個服務(wù),客戶購買一件商品,訂單服務(wù)增加訂單,庫存服務(wù)扣減庫存,賬戶服務(wù)扣減金額,這三個操作必須是原子性的,要么全部成功,要么全部失敗。

try階段

如下圖:

訂單服務(wù)增加一個訂單,庫存服務(wù)凍結(jié)訂單上的庫存,賬戶服務(wù)凍結(jié)訂單上的金額。這個階段數(shù)據(jù)進(jìn)入中間態(tài)。

commit階段

如下圖:

commit階段,數(shù)據(jù)從中間態(tài)轉(zhuǎn)入終態(tài),比如訂單金額從中間賬戶轉(zhuǎn)到最終賬戶。

cancel階段跟commit階段類似,比如訂單金額從中間賬戶退回到客戶賬戶。

Saga 模式

Saga 模式適用于長流程的業(yè)務(wù)場景,用狀態(tài)機來控制整個事務(wù)的執(zhí)行。它使用狀態(tài)圖定義服務(wù)調(diào)用流程并生成 Json 狀態(tài)語言定義文件,狀態(tài)圖的節(jié)點可以是一個服務(wù),也可以是補償節(jié)點。

下面這張圖定義了電商系統(tǒng)的業(yè)務(wù)流程,根據(jù)這個流程圖可以定義出 Json 文件中供狀態(tài)機使用。

XA 模式

XA 模式需要分支事務(wù)數(shù)據(jù)庫支持 XA 原語,看一下官方這張圖:

XA 模式的兩階段提交跟 TCC 模式的兩階段提交類似,都是由 TM 開啟全局事務(wù),RM 向 TC注冊分支事務(wù)并且報告分支事務(wù)狀態(tài),TC 根據(jù)全局事務(wù)的狀態(tài)來提交或回滾分支事務(wù)。

而在代碼實現(xiàn)上,XA 模式使用的是數(shù)據(jù)源代理來實現(xiàn)的。跟 TCC 模式不同的是,XA 模式只要有 prepare 方法即可。

 

Seata 對XA做了優(yōu)化,把 Start | SQL | Prepare 合成了一個階段。這對 MySQL 數(shù)據(jù)庫是支持的,但是對 Oracle 數(shù)據(jù)庫不支持。

 

責(zé)任編輯:武曉燕 來源: 程序員jinjunzhu
相關(guān)推薦

2024-12-11 12:41:33

2025-03-27 11:03:18

2024-05-07 07:58:10

數(shù)據(jù)架構(gòu)大數(shù)據(jù)中間件架構(gòu)

2017-12-04 09:00:00

金融開源軟件分布式消息中間件

2019-08-12 11:00:59

美團網(wǎng)MySQL數(shù)據(jù)庫

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2022-03-24 07:51:27

seata分布式事務(wù)Java

2022-06-21 08:27:22

Seata分布式事務(wù)

2015-06-19 07:50:47

2021-11-26 06:43:19

Java分布式

2010-01-19 17:28:36

東方通中間件

2017-09-01 05:35:58

分布式計算存儲

2022-07-10 20:24:48

Seata分布式事務(wù)

2022-01-12 10:02:02

TCC模式 Seata

2025-04-11 02:30:00

2022-09-30 06:36:25

DaprFastHTTP

2013-09-18 11:16:27

移動中間件MBaaS企業(yè)級應(yīng)用

2011-09-15 12:04:51

Hi-QQChaChaQQ service

2016-12-08 22:39:40

Android

2017-05-09 08:48:44

機器學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號