tcc的優缺點
優點解決了跨服務的業務操作原子性問題,例如組合支付、下訂單減庫存等場景非常實用
tcc的本質原理是把資料庫的二階段提交上公升到微服務來實現,從而避免資料庫二階段中鎖衝突的長事務引起的低效能風險
tcc非同步高效能,它採用了try先檢查,然後非同步實現confirm,真正提交是在confirm方法中
缺點對微服務的侵入性強,微服務的每個事務都必須實現try、confirm、cancel等3個方法,開發成本高,今後維護改造的成本也高
為了達到事務的一致性要求,try、confirm、cancel介面必須實現冪等性操作
由於事務管理器要記錄事務日誌,必定會損耗一定的效能,並使得整個tcc事務時間拉長,建議採用redis的方式來記錄事務日誌
tcc與xa 2pc區別
xa協議是由x/open組織提出的乙個分布式事務處理規範,目前mysql中只有innodb儲存引擎支援xa協議。
在xa規範之前,存在著乙個dtp模型,該模型規範了分布式事務的模型設計。
dtp規範中主要包含了ap、rm、tm三個部分,其中ap是應用程式,是事務發起和結束的地方;rm是資源管理器,主要負責管理每個資料庫的連線資料來源;tm是事務管理器,負責事務的全域性管理,包括事務的生命週期管理和資源的分配協調等。
xa則規範了tm與rm之間的通訊介面,在tm與多個rm之間形成乙個雙向通訊橋梁,從而在多個資料庫資源下保證acid四個特性。
xa是資料庫的分布式事務,強一致性,在整個過程中,資料一張鎖住狀態,即從prepare到commit、rollback的整個過程中,tm一直把持折資料庫的鎖,如果有其他人要修改資料庫的該條資料,就必須等待鎖的釋放,存在長事務風險。
tcc是業務的分布式事務,最終一致性,不會出現長事務的鎖風險,try是本地事務,鎖定資源後就提交事務,confirm/cancel也是本地事務,可以直接提交事務,所以多個短事務不會出現長事務的風險。
tcc與dtp區別
tcc模型的發起方類似於dtp模型的ap,tcc模型的接收方類似於dtp模型的rm
tcc模型中發起方(比如訂單服務)呼叫接收方(比如庫存服務,賬戶服務,積分服務),而dtp模型是由ap應用操作多個rm資料庫
兩者都實現了2pc
tcc模型:第一階段由發起方(訂單服務)發出try請求,第二階段由事務管理器發起confirm/cancel請求,而且採用了非同步實現
dtp模型:rm(資料庫)提供了prepare/commit/rollback介面,兩階段都是由tm呼叫
reference
mysql中什麼是死鎖 mysql死鎖是什麼意思
mysql死鎖是指兩個或多個事務在同一資源上相互占用,並請求鎖定對方占用的資源,從而導致惡性迴圈。innodb儲存引擎能檢測到死鎖的迴圈依賴並立即返回乙個錯誤。只有部分或完全回滾其中乙個事務,才能打破死鎖。什麼是死鎖?它是如何產生的?死鎖是指兩個或多個事務在同一資源上相互占用,並請求鎖定對方占用的資...
mysql基數是什麼 MySQL中的基數是什麼?
在mysql中,基數一詞是指可以放入列中的資料值的唯一性。它是一種屬性,會影響搜尋,聚類和排序資料的能力。基數可以分為以下兩種型別 低基數 列的所有值必須相同。高基數 列的所有值必須唯一。如果我們在列上施加約束以限制重複值,則使用高基數的概念。高基數以下是高基數的示例,其中列的所有值都必須是唯一的。...
MySQL中如何判斷當前是字元
使用length與char length兩個函式 length 是計算欄位的長度乙個漢字是算三個字元,乙個數字或字母算乙個字元 char length 不管漢字還是數字或者是字母都算是乙個字元 對同一字段分別使用 length char length計算長度,並進行比較 長度相同則字段中無漢字,不相...