簡(jiǎn)介
TCC是一種常見(jiàn)的分布式事務(wù)機(jī)制珍昨,是“Try-Confirm-Cancel”三個(gè)單詞的縮寫(xiě),是有數(shù)據(jù)庫(kù)專家Pat Helland在2007年撰寫(xiě)的論文《Life beyond Distributed Transactions: An Apostate’s Opinion》中提出吓揪。
TCC組成
TCC對(duì)原有業(yè)務(wù)侵入性較強(qiáng),要求業(yè)務(wù)處理過(guò)程必須拆分問(wèn)“預(yù)留業(yè)務(wù)資源”和“確認(rèn)/釋放消費(fèi)資源”兩個(gè)子過(guò)程所计,就如同TCC的名字一樣柠辞,它分為三個(gè)階段
- Try
嘗試執(zhí)行階段,完成所有業(yè)務(wù)可執(zhí)行性的檢查(保障一致性)主胧,并且預(yù)留好全部需要用到的業(yè)務(wù)資源(保障隔離性) - Confirm
確認(rèn)執(zhí)行階段钾腺,不進(jìn)行任何業(yè)務(wù)檢查,直接使用Try階段準(zhǔn)備的資源來(lái)完成業(yè)務(wù)處理讥裤。Confirm階段可能會(huì)重復(fù)執(zhí)行,因此本階段執(zhí)行的操作需要具備冪等性 - Cancel
取消執(zhí)行階段姻报,釋放Try階段預(yù)留的業(yè)務(wù)資源己英。Cancel階段可能會(huì)重復(fù)執(zhí)行,因此本階段執(zhí)行的操作也需要具備冪等性
例子
下圖是一個(gè)TCC的一個(gè)基本流程吴旋,通常在TCC中會(huì)存在一個(gè)coordinator(協(xié)調(diào)員)用于確保所有參與者確認(rèn)他們的Confirm/Cancel:
- 發(fā)起者調(diào)用coordinator開(kāi)始TCC業(yè)務(wù)
- 發(fā)起者對(duì)一個(gè)或多個(gè)參與者調(diào)用 POST (Try) 以創(chuàng)建預(yù)訂
- 發(fā)起者調(diào)用coordinator確認(rèn)或取消交易
- coordinator根據(jù)發(fā)起者對(duì)每個(gè)參與者調(diào)用PUT(Confirm)或 DELETE(Cancel)