TCC事務機制簡介

2021-08-27 08:32:20 字數 1777 閱讀 7973

關於tcc(try-confirm-cancel)的概念,最早是由pat helland於2023年發表的一篇名為《life beyond distributed transactions:an apostate』s opinion》的**提出。在該**中,tcc還是以tentative-confirmation-cancellation作為名稱;正式以try-confirm-cancel作為名稱的,可能是atomikos(gregor hohpe所著書籍《enterprise integration patterns》中收錄了關於tcc的介紹,提到了atomikos的try-confirm-cancel,並認為二者是相似的概念)。

國內最早關於tcc的報道,應該是infoq上對阿里程立博士的一篇採訪。經過程博士的這一次傳道之後,tcc在國內逐漸被大家廣為了解並接受。相應的實現方案和開源框架也先後被發布出來,bytetcc就是其中之一。

tcc事務機制相對於傳統事務機制(x/open xa two-phase-commit),其特徵在於它不依賴資源管理器(rm)對xa的支援,而是通過對(由業務系統提供的)業務邏輯的排程來實現分布式事務。

對於業務系統中乙個特定的業務邏輯s,其對外提供服務時,必須接受一些不確定性,即對業務邏輯執行的一次呼叫僅是乙個臨時性操作,呼叫它的消費方服務m保留了後續的取消權。如果m認為全域性事務應該rollback,它會要求取消之前的臨時性操作,這將對應s的乙個取消操作;而當m認為全域性事務應該commit時,它會放棄之前臨時性操作的取消權,這對應s的乙個確認操作。

每乙個初步操作,最終都會被確認或取消。因此,針對乙個具體的業務服務,tcc事務機制需要業務系統提供三段業務邏輯:初步操作try、確認操作confirm、取消操作cancel。

1. 初步操作(try)

tcc事務機制中的業務邏輯(try),從執行階段來看,與傳統事務機制中業務邏輯相同。但從業務角度來看,卻不一樣。tcc機制中的try僅是乙個初步操作,它和後續的確認一起才能真正構成乙個完整的業務邏輯。可以認為

[傳統事務機制]的業務邏輯 = [tcc事務機制]的初步操作(try) + [tcc事務機制]的確認邏輯(confirm)。

tcc機制將傳統事務機制中的業務邏輯一分為二,拆分後保留的部分即為初步操作(try);而分離出的部分即為確認操作(confirm),被延遲到事務提交階段執行。

tcc事務機制以初步操作(try)為中心的,確認操作(confirm)和取消操作(cancel)都是圍繞初步操作(try)而展開。因此,try階段中的操作,其保障性是最好的,即使失敗,仍然有取消操作(cancel)可以將其不良影響進行回撤。

2. 確認操作(confirm)

確認操作(confirm)是對初步操作(try)的乙個補充。當tcc事務管理器決定commit全域性事務時,就會逐個執行初步操作(try)指定的確認操作(confirm),將初步操作(try)未完成的事項最終完成。

3. 取消操作(cancel)

取消操作(cancel)是對初步操作(try)的乙個回撤。當tcc事務管理器決定rollback全域性事務時,就會逐個執行初步操作(try)指定的取消操作(cancel),將初步操作(try)已完成的事項全部撤回。

在傳統事務機制中,業務邏輯的執行和事務的處理,是在不同的階段由不同的部件來完成的:業務邏輯部分訪問資源實現資料儲存,其處理是由業務系統負責;事務處理部分通過協調資源管理器以實現事務管理,其處理由事務管理器來負責。二者沒有太多互動的地方,所以,傳統事務管理器的事務處理邏輯,僅需要著眼於事務完成(commit/rollback)階段,而不必關注業務執行階段。

分布式事務 TCC補償機制

tcc事務是try commit cancel三種指令的縮寫,其邏輯模式類似於xa兩階段提交,但是實現方式是在 層面來人為實現。tcc開源框架bytetcc,tcc transaction,himly 1 先來try一下,不要把業務邏輯完成,先試試看,看各個服務能不能基本正常運轉,能不能先凍結我需要...

補償事務(TCC)

tcc try confirm cancel try 階段 嘗試執行,完成所有業務檢查 一致性 預留必需業務資源 準隔離性 confirm 階段 確認真正執行業務,不作任何業務檢查,只使用 try 階段預留的業務資源,confirm 操作滿足冪等性。要求具備冪等設計,confirm 失敗後需要進行重...

tcc分布式事務 分布式事務之TCC事務模型

我們先套乙個業務場景進去,如下圖所示 那頁面點了支付按鈕,呼叫支付服務,那我們後台要實現下面三個步驟 1 訂單服務 修改訂單狀態 2 賬戶服務 扣減金錢 3 庫存服務 扣減庫存 達到事務的效果,要麼一起成功,要麼一起失敗!就要採取tcc分布式事務方案!tcc的全稱是 try confirm canc...