分布式事務(wù)-1

分布式事務(wù):

https://kaimingwan.com/post/fen-bu-shi/fen-bu-shi-shi-wu-de-dian-xing-chu-li-fang-shi-2pc-tcc-yi-bu-que-bao-he-zui-da-nu-li-xing

https://www.zhihu.com/question/31813039/answer/308847840

http://www.hollischuang.com/archives/1658

單數(shù)據(jù)庫事務(wù)完全遵循ACID規(guī)范,屬于剛性事務(wù),

分布式事務(wù)要完全遵循ACID規(guī)范比較困難, 分布式事務(wù)屬于柔性事務(wù),滿足BASE理論;

BASE描述: BA(Basic Availability 基本業(yè)務(wù)可用性)、S(Soft state 柔性狀態(tài))、E(Eventual consistency 最終一致性);

現(xiàn)在業(yè)內(nèi)比較常用的分布式事務(wù)解決方案主要有異步消息確保型、TCC、最大努力通知等。

柔性事務(wù)和剛性事務(wù):

柔性事務(wù)滿足BASE理論(基本可用,最終一致)

剛性事務(wù)滿足ACID理論

分布式事務(wù)的典型處理方式:

2PC、TCC、異步確保和最大努力型

柔性事務(wù):

兩階段提交(2PC)型

事務(wù)補(bǔ)償型(TCC事務(wù))

異步確保型

最大努力型

1、兩階段型

就是分布式事務(wù)兩階段提交,對(duì)應(yīng)技術(shù)上的XA、JTA/JTS,這是分布式環(huán)境下事務(wù)處理的典型模式。

2、補(bǔ)償型

TCC型事務(wù)(Try/Confirm/Cancel)可以歸為補(bǔ)償型;

TCC思路是:盡早釋放鎖;在Try成功的情況下,如果事務(wù)要回滾,Cancel將作為一個(gè)補(bǔ)償機(jī)制,回滾Try操作;

TCC各操作事務(wù)本地化,且盡早提交 (放棄兩階段約束);當(dāng)全局事務(wù)要求回滾時(shí),通過另一個(gè)本地事務(wù)實(shí)現(xiàn)“補(bǔ)償”行為;

TCC是將資源層的兩階段提交協(xié)議轉(zhuǎn)換到業(yè)務(wù)層,成為業(yè)務(wù)模型中的一部分;

3、異步確保型

將一些同步阻塞的事務(wù)操作變?yōu)楫惒降牟僮鳎苊鈱?duì)數(shù)據(jù)庫事務(wù)的爭(zhēng)用;比如消息事務(wù)機(jī)制;

如,訂單提交后的短信通知,將之前的阻塞操作變?yōu)楫惒?,消息?duì)列處理

4、最大努力通知型

通過通知服務(wù)器(消息通知)進(jìn)行,允許失敗,有補(bǔ)充機(jī)制;

如,支付成功,支付回調(diào),直到響應(yīng)成功


TCC

https://my.oschina.net/fileoptions/blog/899991

Try: 嘗試執(zhí)行業(yè)務(wù)

完成所有業(yè)務(wù)檢查(一致性)

預(yù)留必須業(yè)務(wù)資源(準(zhǔn)隔離性)

Confirm:確認(rèn)執(zhí)行業(yè)務(wù)

真正執(zhí)行業(yè)務(wù),不作任何業(yè)務(wù)檢查

只使用Try階段預(yù)留的業(yè)務(wù)資源

Confirm操作要滿足冪等性

Cancel: 取消執(zhí)行業(yè)務(wù)

釋放Try階段預(yù)留的業(yè)務(wù)資源

Cancel操作要滿足冪等性

TCC與2PC協(xié)議比較:

位于業(yè)務(wù)服務(wù)層而非資源層

沒有單獨(dú)的準(zhǔn)備(Prepare)階段, Try操作兼?zhèn)滟Y源操作與準(zhǔn)備能力

Try操作可以靈活選擇業(yè)務(wù)資源的鎖定粒度(以業(yè)務(wù)定粒度)

較高開發(fā)成本

TCC示例:

分別位于三個(gè)不同分庫的帳戶A、B、C,A和B一起向C轉(zhuǎn)帳共80元:分布式事務(wù)之說說TCC事務(wù)

1、Try:嘗試執(zhí)行業(yè)務(wù)。

完成所有業(yè)務(wù)檢查(一致性):檢查A、B、C的帳戶狀態(tài)是否正常,帳戶A的余額是否不少于30元,帳戶B的余額是否不少于50元。

預(yù)留必須業(yè)務(wù)資源(準(zhǔn)隔離性):帳戶A的凍結(jié)金額增加30元,帳戶B的凍結(jié)金額增加50元,這樣就保證不會(huì)出現(xiàn)其他并發(fā)進(jìn)程扣減了這兩個(gè)帳戶的余額而導(dǎo)致在后續(xù)的真正轉(zhuǎn)帳操作過程中,帳戶A和B的可用余額不夠的情況。

2、Confirm:確認(rèn)執(zhí)行業(yè)務(wù)。

真正執(zhí)行業(yè)務(wù):如果Try階段帳戶A、B、C狀態(tài)正常,且?guī)鬉、B余額夠用,則執(zhí)行帳戶A給賬戶C轉(zhuǎn)賬30元、帳戶B給賬戶C轉(zhuǎn)賬50元的轉(zhuǎn)帳操作。

不做任何業(yè)務(wù)檢查:這時(shí)已經(jīng)不需要做業(yè)務(wù)檢查,Try階段已經(jīng)完成了業(yè)務(wù)檢查。

只使用Try階段預(yù)留的業(yè)務(wù)資源:只需要使用Try階段帳戶A和帳戶B凍結(jié)的金額即可。

3、Cancel:取消執(zhí)行業(yè)務(wù)

釋放Try階段預(yù)留的業(yè)務(wù)資源:如果Try階段部分成功,比如帳戶A的余額夠用,且凍結(jié)相應(yīng)金額成功,帳戶B的余額不夠而凍結(jié)失敗,則需要對(duì)帳戶A做Cancel操作,將帳戶A被凍結(jié)的金額解凍掉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容