日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
深入淺出Seata的AT模式

一、業(yè)務(wù)背景

在分布式架構(gòu)中,事務(wù)管理是個(gè)無法避開的復(fù)雜問題,雖然有多種解決方案,但是需要根據(jù)業(yè)務(wù)去選擇合適的;

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),瑪曲企業(yè)網(wǎng)站建設(shè),瑪曲品牌網(wǎng)站建設(shè),網(wǎng)站定制,瑪曲網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,瑪曲網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

從個(gè)人最近幾年的實(shí)踐經(jīng)驗(yàn)來看,Seata組件的AT模式比較常用,本文從實(shí)際的案例出發(fā),來深入分析該模式的原理;

首先創(chuàng)建一個(gè)全局事務(wù)管理的接口,這里是在Facade服務(wù)中開啟全局事務(wù);

請(qǐng)求經(jīng)過三個(gè)微服務(wù),并且各個(gè)服務(wù)都進(jìn)行數(shù)據(jù)源的操作,然后模擬鏈路成功和異常的情況,來分析不同狀態(tài)的邏輯實(shí)現(xiàn);

二、Seata架構(gòu)

1、核心組件

三大組件

  • TC:事務(wù)協(xié)調(diào)者

即Transaction Coordinator,維護(hù)全局和分支事務(wù)的狀態(tài),驅(qū)動(dòng)全局事務(wù)提交或回滾。

  • TM:事務(wù)管理器

即Transaction Manager,定義全局事務(wù)的范圍,開始事務(wù)、提交事務(wù),回滾事務(wù)。

  • RM:資源管理器

即Resource Manager,管理分支事務(wù)處理的資源,向TC注冊(cè)分支事務(wù),報(bào)告分支事務(wù)的狀態(tài),驅(qū)動(dòng)分支事務(wù)提交或回滾。

基礎(chǔ)交互

TC是需要獨(dú)立部署的服務(wù),TM和RM是集成在服務(wù)中,三大組件相互協(xié)作,共同完成分布事務(wù)的管理;

2、AT模式

事務(wù)模型

AT是Seata默認(rèn)的模式,需要基于支持本地ACID事務(wù)的關(guān)系型數(shù)據(jù)庫;Java應(yīng)用,通過JDBC訪問數(shù)據(jù)庫;基于案例流程,先分析AT的事務(wù)模型;

2.1 TM負(fù)責(zé)定義全局事務(wù)的邊界,向TC申請(qǐng),開啟一個(gè)全局事務(wù);

2.2 全局事務(wù)創(chuàng)建成功后,生成全局唯一的XID;

2.3 XID會(huì)在微服務(wù)請(qǐng)求鏈路上下文中傳播;

2.4 RM向TC注冊(cè)分支事務(wù),并歸屬到XID對(duì)應(yīng)的全局事務(wù)進(jìn)行調(diào)度;

2.5 TM向TC發(fā)起相應(yīng)XID的全局事務(wù)提交或回滾決議;

2.6 TC完成對(duì)XID管理的全部分支事務(wù)提交或回滾的調(diào)度;

核心機(jī)制

執(zhí)行階段:每個(gè)微服務(wù)的請(qǐng)求完成后,基于本地?cái)?shù)據(jù)庫的事務(wù)能力,保證業(yè)務(wù)數(shù)據(jù)和回滾日志在同一個(gè)本地事務(wù)中提交,快速釋放連接和對(duì)資源的鎖定;

完成階段:全局提交時(shí)分支事務(wù)已經(jīng)完成提交,會(huì)清理回滾日志,快速結(jié)束流程;全局回滾基于XID和BranchID查詢回滾日志,完成數(shù)據(jù)回滾;

數(shù)據(jù)源代理

在AT模式中,應(yīng)用需要使用Seata組件中的JDBC代理數(shù)據(jù)源DataSourceProxy,實(shí)現(xiàn)對(duì)真正目標(biāo)數(shù)據(jù)源的代理訪問;

三、案例分析

1、流程分析

案例的簡(jiǎn)單描述

在案例中涉及三個(gè)服務(wù),F(xiàn)acade服務(wù)開啟全局事務(wù),然后分別請(qǐng)求Account和Quartz服務(wù)的更新接口,通過Quartz接口是否拋異常來調(diào)試AT模式的原理;

從實(shí)際的請(qǐng)求執(zhí)行來說,絕大多數(shù)的請(qǐng)求都是可以執(zhí)行成功的,而AT模式的異步化提交極大限度的顧及全局事務(wù)的效率問題,少數(shù)失敗的情況也可以通過回滾日志進(jìn)行反向補(bǔ)償;

2、寫隔離

上述流程分析AT模式的原子性,即多個(gè)分支事務(wù)要么都成功要么都失敗,接下來分析多個(gè)事務(wù)中的全局鎖隔離機(jī)制,先看寫隔離,假設(shè)TX1先開始;

TX1邏輯

  • TX1開始本地事務(wù),拿到本地鎖,然后執(zhí)行更新操作;
  • TX1本地事務(wù)提交前,需要先獲取全局鎖,否則無法提交;
  • TX1獲取全局鎖并提交,釋放本地鎖,但未釋放全局鎖;

TX2邏輯

  • TX2此時(shí)開始本地事務(wù),拿到本地鎖;
  • TX2執(zhí)行本地事務(wù)提交前,嘗試獲取全局鎖;
  • 由于全局鎖被TX1持有,TX2會(huì)重試等待全局鎖;

假設(shè)TX1全局提交

  • TX1如果全局事務(wù)提交,會(huì)釋放全局鎖;
  • TX2獲取全局鎖成功,執(zhí)行本地事務(wù)提交;

假設(shè)TX1全局回滾

  • TX1如果全局事務(wù)回滾,要重新獲取數(shù)據(jù)的本地鎖,進(jìn)行回滾的補(bǔ)償動(dòng)作;
  • TX2如果仍在等待全局鎖,并且還持有本地鎖,TX1事務(wù)回滾失敗,會(huì)不斷的重試;
  • 當(dāng)TX2等待全局鎖超時(shí),會(huì)放棄全局鎖并回滾本地事務(wù),釋放本地鎖;
  • TX1最終獲取數(shù)據(jù)的本地鎖,完成回滾動(dòng)作;

在該過程中,TX1在結(jié)束前一直持有全局鎖,TX2獲取不到全局鎖無法對(duì)相同的數(shù)據(jù)執(zhí)行更新動(dòng)作,所以避免了臟寫的問題;

3、讀隔離

在數(shù)據(jù)庫本地隔離級(jí)別為讀已提交或以上的基礎(chǔ)上,Seata的AT模式默認(rèn)全局隔離級(jí)別是讀未提交;如果需要全局的讀已提交,可以通過??SELECT FOR UPDATE??語句的代理;

該語句的執(zhí)行也需要獲取全局鎖,如果全局鎖被TX1持有,TX2會(huì)釋放本地鎖,查詢會(huì)被阻塞并進(jìn)行重試,拿到全局鎖讀取成功后返回;

四、對(duì)比XA模式

XA是一個(gè)分布式事務(wù)分段提交協(xié)議;事務(wù)管理器即TM:作為全局事務(wù)的調(diào)度者,負(fù)責(zé)整個(gè)事務(wù)中本地資源的提交和回滾;本地資源管理器即RM:大部分關(guān)系型數(shù)據(jù)庫都實(shí)現(xiàn)了XA接口;

TM先向所有的參與事務(wù)的RM發(fā)送確認(rèn)請(qǐng)求,根據(jù)確認(rèn)的結(jié)果,判斷是調(diào)用RM的commit提交還是rollback回滾;

XA具有強(qiáng)一致性,在2段提交的過程中,會(huì)持有資源的鎖,如果是在交易下單等復(fù)雜鏈路中,并且并發(fā)量很高,會(huì)存在長(zhǎng)事務(wù)風(fēng)險(xiǎn),XA無法滿足該類高并發(fā)的場(chǎng)景;

而在Seata的AT模式中,在服務(wù)執(zhí)行完成后,直接進(jìn)行RM提交和資源釋放,提供了對(duì)CAP理論相對(duì)平衡的解決方案,并且沒有侵入業(yè)務(wù)工程;

五、參考源碼

應(yīng)用倉庫: https://gitee.com/cicadasmile/butte-flyer-parent

組件封裝: https://gitee.com/cicadasmile/butte-frame-parent


文章名稱:深入淺出Seata的AT模式
標(biāo)題鏈接:http://m.5511xx.com/article/cdgoocc.html