激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - 編程技術(shù) - 阿里分布式中間件 Seata 從入門(mén)到精通

阿里分布式中間件 Seata 從入門(mén)到精通

2021-11-15 22:05程序員jinjunzhujinjunzhu 編程技術(shù)

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

阿里分布式中間件 Seata 從入門(mén)到精通

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

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

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

阿里分布式中間件 Seata 從入門(mén)到精通

阿里分布式中間件 Seata 從入門(mén)到精通

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

下面簡(jiǎn)要介紹 Seata 的四種模式。

AT 模式

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

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

  • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。
  • 二階段:異步 commit,非??焖俚赝瓿伞ollback 則通過(guò)一階段的回滾日志進(jìn)行反向補(bǔ)償

AT 模式讀寫(xiě)都有隔離性,這里簡(jiǎn)單描述。

寫(xiě)隔離

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

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

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

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

讀隔離

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

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

SELECT FOR UPDATE 語(yǔ)句的執(zhí)行會(huì)申請(qǐng)全局鎖 ,如果全局鎖被其他事務(wù)持有,則釋放本地鎖并重試。這個(gè)過(guò)程中,查詢(xún)是被 block 住的,直到全局鎖拿到。

TCC 模式

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

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

try階段

如下圖:

阿里分布式中間件 Seata 從入門(mén)到精通

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

commit階段

如下圖:

阿里分布式中間件 Seata 從入門(mén)到精通

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

cancel階段跟commit階段類(lèi)似,比如訂單金額從中間賬戶(hù)退回到客戶(hù)賬戶(hù)。

Saga 模式

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

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

阿里分布式中間件 Seata 從入門(mén)到精通

XA 模式

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

阿里分布式中間件 Seata 從入門(mén)到精通

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

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

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

原文鏈接:https://mp.weixin.qq.com/s/RV9kteeox5KGjg2QVGYzfA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠操在线观看 | 激情综合在线 | 久久99精品国产99久久6男男 | 国产精品久久久久久久av三级 | 黄色网址在线免费 | 99精品国产一区二区三区 | 日本精品婷婷久久爽一下 | 成人福利在线播放 | 国产午夜亚洲精品理论片大丰影院 | ⅴideo裸体秀hd | 99精品视频免费看 | 337p日本欧洲亚洲大胆精蜜臀 | 国产精品免费成人 | 久久国产精品久久精品国产演员表 | 久久国产秒| 久久99精品久久久久久久久久久久 | 激情大乳女做爰办公室韩国 | 久久精品视频一区二区三区 | 欧美一级免费在线观看 | 欧美韩国日本在线 | 国产91亚洲精品一区二区三区 | 99精品视频在线观看免费播放 | 91青青| 黄色网址在线播放 | 午夜a狂野欧美一区二区 | 欧美在线成人影院 | 成人国产精品一区二区毛片在线 | 青青草最新网址 | 欧美性黄 | 懂色粉嫩av久婷啪 | 综合网天天色 | 成人在线国产 | 毛片在线视频免费观看 | 中文黄色一级片 | 最近中文字幕一区二区 | 精品一区二区三区在线播放 | 特黄一区二区三区 | 免费一级肉体全黄毛片 | 久久国产精品久久久久久久久久 | 精品国产96亚洲一区二区三区 | xxxxhd73国产|