tcc柔性事務(wù)細(xì)節(jié)

本文面對(duì)對(duì)tcc有一定了解的朋友。

tcc,是分布式系統(tǒng)場(chǎng)景下的一種事務(wù)解決方案。他和傳統(tǒng)的分布式事務(wù)的最大區(qū)別是,分布式事務(wù)會(huì)鎖資源,而tcc屬于柔性事務(wù),不會(huì)鎖資源。

也就是說,根據(jù)cap理論,選擇一致性還是可用性。

一般鎖資源會(huì)導(dǎo)致體統(tǒng)性能低下而不可用,所以還是要用柔性事務(wù),實(shí)現(xiàn)最終一致性

實(shí)現(xiàn)柔性事務(wù)三種方式,tcc,消息機(jī)制,補(bǔ)償型。

tcc為try confirm cancle。大家應(yīng)該都聽過不少次。但是,try做的什么,confirm做什么,cancle做什么?


舉一個(gè)轉(zhuǎn)賬的例子,a給b轉(zhuǎn)賬100。那么try做什么?

回過頭來,我們看看,tcc和補(bǔ)償型事務(wù)的一個(gè)最大的區(qū)別是,補(bǔ)償型的事務(wù)不隔離,也就是說補(bǔ)償型事務(wù)每執(zhí)行一步,對(duì)其他事務(wù)都是可見的。

而tcc是事務(wù)隔離的,因此,tcc的try所造成的修改,其他事務(wù)應(yīng)該看不到修改。因?yàn)?,try不對(duì)數(shù)據(jù)庫做修改,至少不commit。

回到例子,a給b轉(zhuǎn)賬,a的try就是檢查a的余額是否有100,b的try就是b是否能收款。

如果兩邊的try都通過,那么就執(zhí)行confirm,a,b在數(shù)據(jù)庫執(zhí)行變更。

至于cancle?我認(rèn)為不用做什么,或者做rollback。


這里還有問題,confirm和cancle的多個(gè)動(dòng)作,不能保證都可以成功完成,因此,需要有重做機(jī)制,而重做,意味著需要把confirm做成冪等操作。

既然要保證confirm的完成,也就等于需要一套消息機(jī)制做保障。因此,3個(gè)柔性事務(wù)實(shí)現(xiàn)對(duì)比,tcc不如消息通知機(jī)制。

另外,冪等操作需要保證順序,需要有額外的時(shí)間戳保證順利。

對(duì)賬是最后的手段。

最后編輯于
?著作權(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)容