TCC

TCC 模式

https://blog.csdn.net/qq_42332821/article/details/104410584

TCC 模式需要用戶根據(jù)自己的業(yè)務(wù)場景實(shí)現(xiàn) Try、Confirm 和 Cancel 三個(gè)操作饿悬;事務(wù)發(fā)起方在一階段執(zhí)行 Try 方式令蛉,在二階段提交執(zhí)行 Confirm 方法,二階段回滾執(zhí)行 Cancel 方法乡恕。

TCC 三個(gè)方法描述:

Try:資源的檢測和預(yù)留言询;

Confirm:執(zhí)行的業(yè)務(wù)操作提交俯萎;要求 Try 成功 Confirm 一定要能成功;

Cancel:預(yù)留資源釋放运杭;

TCC 的實(shí)踐經(jīng)驗(yàn)

螞蟻金服TCC實(shí)踐,總結(jié)以下注意事項(xiàng):

? 業(yè)務(wù)模型分2階段設(shè)計(jì)

? 并發(fā)控制

? 允許空回滾

? 防懸掛控制

? 冪等控制

1 TCC 設(shè)計(jì) - 業(yè)務(wù)模型分 2 階段設(shè)計(jì)

用戶接入 TCC 夫啊,最重要的是考慮如何將自己的業(yè)務(wù)模型拆成兩階段來實(shí)現(xiàn)。

以“扣錢”場景為例辆憔,在接入 TCC 前撇眯,對 A 賬戶的扣錢,只需一條更新賬戶余額的 SQL 便能完成虱咧;但是在接入 TCC 之后熊榛,用戶就需要考慮如何將原來一步就能完成的扣錢操作,拆成兩階段腕巡,實(shí)現(xiàn)成三個(gè)方法玄坦,并且保證一階段 Try 成功的話 二階段 Confirm 一定能成功。

如上圖所示绘沉,Try 方法作為一階段準(zhǔn)備方法煎楣,需要做資源的檢查和預(yù)留。在扣錢場景下车伞,Try 要做的事情是就是檢查賬戶余額是否充足择懂,預(yù)留轉(zhuǎn)賬資金,預(yù)留的方式就是凍結(jié) A 賬戶的 轉(zhuǎn)賬資金另玖。Try 方法執(zhí)行之后困曙,賬號 A 余額雖然還是 100,但是其中 30 元已經(jīng)被凍結(jié)了谦去,不能被其他事務(wù)使用慷丽。

二階段 Confirm 方法執(zhí)行真正的扣錢操作。Confirm 會(huì)使用 Try 階段凍結(jié)的資金哪轿,執(zhí)行賬號扣款盈魁。Confirm 方法執(zhí)行之后,賬號 A 在一階段中凍結(jié)的 30 元已經(jīng)被扣除窃诉,賬號 A 余額變成 70 元 杨耙。

如果二階段是回滾的話,就需要在 Cancel 方法內(nèi)釋放一階段 Try 凍結(jié)的 30 元飘痛,使賬號 A 的回到初始狀態(tài)珊膜,100 元全部可用。

用戶接入 TCC 模式宣脉,最重要的事情就是考慮如何將業(yè)務(wù)模型拆成 2 階段车柠,實(shí)現(xiàn)成 TCC 的 3 個(gè)方法,并且保證 Try 成功 Confirm 一定能成功。相對于 AT 模式竹祷,TCC 模式對業(yè)務(wù)代碼有一定的侵入性谈跛,但是 TCC 模式無 AT 模式的全局行鎖,TCC 性能會(huì)比 AT 模式高很多塑陵。

2 TCC 設(shè)計(jì) - 允許空回滾

Cancel 接口設(shè)計(jì)時(shí)需要允許空回滾感憾。在 Try 接口因?yàn)閬G包時(shí)沒有收到,事務(wù)管理器會(huì)觸發(fā)回滾令花,這時(shí)會(huì)觸發(fā) Cancel 接口阻桅,這時(shí) Cancel 執(zhí)行時(shí)發(fā)現(xiàn)沒有對應(yīng)的事務(wù) xid 或主鍵時(shí),需要返回回滾成功兼都。讓事務(wù)服務(wù)管理器認(rèn)為已回滾嫂沉,否則會(huì)不斷重試,而 Cancel 又沒有對應(yīng)的業(yè)務(wù)數(shù)據(jù)可以進(jìn)行回滾扮碧。

3 TCC 設(shè)計(jì) - 防懸掛控制

懸掛的意思是:Cancel 比 Try 接口先執(zhí)行趟章,出現(xiàn)的原因是 Try 由于網(wǎng)絡(luò)擁堵而超時(shí),事務(wù)管理器生成回滾慎王,觸發(fā) Cancel 接口尤揣,而最終又收到了 Try 接口調(diào)用,但是 Cancel 比 Try 先到柬祠。按照前面允許空回滾的邏輯,回滾會(huì)返回成功负芋,事務(wù)管理器認(rèn)為事務(wù)已回滾成功漫蛔,則此時(shí)的 Try 接口不應(yīng)該執(zhí)行,否則會(huì)產(chǎn)生數(shù)據(jù)不一致旧蛾,所以我們在 Cancel 空回滾返回成功之前先記錄該條事務(wù) xid 或業(yè)務(wù)主鍵莽龟,標(biāo)識這條記錄已經(jīng)回滾過,Try 接口先檢查這條事務(wù)xid或業(yè)務(wù)主鍵如果已經(jīng)標(biāo)記為回滾成功過锨天,則不執(zhí)行 Try 的業(yè)務(wù)操作毯盈。

4 TCC 設(shè)計(jì) - 冪等控制

冪等性的意思是:對同一個(gè)系統(tǒng),使用同樣的條件病袄,一次請求和重復(fù)的多次請求對系統(tǒng)資源的影響是一致的搂赋。因?yàn)榫W(wǎng)絡(luò)抖動(dòng)或擁堵可能會(huì)超時(shí),事務(wù)管理器會(huì)對資源進(jìn)行重試操作益缠,所以很可能一個(gè)業(yè)務(wù)操作會(huì)被重復(fù)調(diào)用脑奠,為了不因?yàn)橹貜?fù)調(diào)用而多次占用資源,需要對服務(wù)設(shè)計(jì)時(shí)進(jìn)行冪等控制幅慌,通常我們可以用事務(wù) xid 或業(yè)務(wù)主鍵判重來控制宋欺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子齿诞,更是在濱河造成了極大的恐慌酸休,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祷杈,死亡現(xiàn)場離奇詭異斑司,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吠式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門陡厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人特占,你說我怎么就攤上這事糙置。” “怎么了是目?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵谤饭,是天一觀的道長。 經(jīng)常有香客問我,道長辱揭,這世上最難降的妖魔是什么秘狞? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮冤今,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茂缚。我一直安慰自己戏罢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布脚囊。 她就那樣靜靜地躺著龟糕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悔耘。 梳的紋絲不亂的頭發(fā)上讲岁,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音衬以,去河邊找鬼缓艳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛看峻,可吹牛的內(nèi)容都是我干的郎任。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼备籽,長吁一口氣:“原來是場噩夢啊……” “哼舶治!你這毒婦竟也來了分井?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤霉猛,失蹤者是張志新(化名)和其女友劉穎尺锚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惜浅,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘫辩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坛悉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伐厌。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裸影,靈堂內(nèi)的尸體忽然破棺而出挣轨,到底是詐尸還是另有隱情,我是刑警寧澤轩猩,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布卷扮,位于F島的核電站,受9級特大地震影響均践,放射性物質(zhì)發(fā)生泄漏晤锹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一彤委、第九天 我趴在偏房一處隱蔽的房頂上張望鞭铆。 院中可真熱鬧,春花似錦焦影、人聲如沸衔彻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澄港,卻和暖如春椒涯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背回梧。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工废岂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狱意。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓湖苞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親详囤。 傳聞我的和親對象是個(gè)殘疾皇子财骨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容