国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式事務TCC 你真的理解了嗎

這篇具有很好參考價值的文章主要介紹了分布式事務TCC 你真的理解了嗎。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

TCC(補償事務)

TCC 屬于目前比較火的一種柔性事務解決方案。TCC 這個概念最早誕生于數據庫專家帕特 · 赫蘭德(Pat Helland)于 2007 發(fā)表的 《Life beyond Distributed Transactions: an Apostate’s Opinion》 這篇論文,感興趣的小伙伴可以閱讀一下這篇論文。

三個階段

簡單來說,TCC 是 Try、Confirm、Cancel 三個詞的縮寫,它分為三個階段:

  • Try(嘗試)階段 : 嘗試執(zhí)行

完成業(yè)務檢查,并預留好必需的業(yè)務資源。

  • Confirm(確認)階段 :確認執(zhí)行

當所有事務參與者的 Try 階段執(zhí)行成功就會執(zhí)行 Confirm ,Confirm 階段會處理 Try 階段預留的業(yè)務資源。否則,就會執(zhí)行 Cancel 。

通常情況下,采用 TCC 則認為 Confirm 階段是不會出錯的。即:只要 Try 成功,Confirm 一定成功。若 Confirm 階段真的出錯了,需引入重試機制或人工處理。

  • Cancel(取消)階段 :取消執(zhí)行,釋放 Try 階段預留的業(yè)務資源

通常情況下,采用 TCC 則認為 Cancel 階段也是一定成功的。若 Cancel 階段真的出錯了,需引入重試機制或人工處理。

TM 事務管理器
  • TM 事務管理器可以實現為獨立的服務,也可以讓全局事務發(fā)起方充當 TM 的角色,TM 獨立出來是為了成為公共組件,是為了考慮系統結構和軟件復用
  • TM 在發(fā)起全局事務時生成全局事務記錄,全局事務 ID 貫穿整個分布式事務調用鏈條,用來記錄事務上下文,追蹤和記錄狀態(tài),由于 Confirm 和 Cancel 失敗需要重試,因此需要實現冪等性,冪等性是指同一個操作無論請求多少次,其結果都相同
示例介紹

我們拿轉賬場景來說:

  • Try(嘗試)階段 : 在轉賬場景下,Try 要做的事情是就是檢查賬戶余額是否充足,預留的資源就是轉賬資金

  • Confirm(確認)階段 : 如果 Try 階段執(zhí)行成功的話,Confirm 階段就會執(zhí)行真正的扣錢操作

  • Cancel(取消)階段 :釋放 Try 階段預留的轉賬資金

一般情況下,當我們使用 TCC 模式的時候,需要自己實現 try, confirm, cancel 這三個方法,來達到最終一致性。也就是說,正常情況下會執(zhí)行 try, confirm,如下圖所示。

分布式事務TCC 你真的理解了嗎

出現異常的話會執(zhí)行 try, cancel ,如下圖所示。

分布式事務TCC 你真的理解了嗎

因此,TCC 模式不需要依賴于底層數據資源的事務支持,但是需要我們手動實現更多的代碼,屬于 侵入業(yè)務代碼 的一種分布式解決方案。

針對 TCC 的實現,業(yè)界也有一些不錯的開源框架。不同的框架對于 TCC 的實現可能略有不同,不過大致思想都一樣。

  1. ByteTCC : ByteTCC 是基于 Try-Confirm-Cancel(TCC)機制的分布式事務管理器的實現。 相關閱讀:關于如何實現一個 TCC 分布式事務框架的一點思考

  2. Seata :Seata 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。

  3. Hmily : 金融級分布式事務解決方案。

空回滾、冪等、懸掛

空回滾:

  • 在沒調用 Try 方法的情況下,調用了第二階段的 Cancel 方法,Cancel 方法需要識別出這是一個空回滾,然后直接返回成功
  • 出現原因是當一個分支事務所在服務宕機或網絡異常,分支事務調用記錄為失敗,這個時候其實是沒有執(zhí)行 Try 階段,當故障恢復后,分布式事務進行回滾則會調用第二階段的 Cacel 方法,從而形成空回滾
  • 解決思路是關鍵就是要識別出這個空回滾。思路很簡單就是需要知道一階段是否執(zhí)行,如果執(zhí)行了,那就是正?;貪L。如果沒有執(zhí)行,那就是空回滾。前面已經說過 TM 在發(fā)起全局事務時生成全局事務記錄,全局事務 ID 貫穿整個分布式事務調用鏈條。再額外增加一張分支事務記錄表,其中有全局事務 ID 和分支事務 ID,第一階段 Try 方法里會插入一條記錄,表示一階段執(zhí)行了。Cancel 接口里讀取該記錄,如果該記錄存在,則正?;貪L;如果該記錄不存在,則是空回滾

冪等:

  • 通過前面介紹已經了解到,為了保證 TCC 二階段提交重試機制不會引發(fā)數據不一致,要求 TCC 的二階段 Try、Confirm 和 Cancel 接口保證冪等,這樣不會重復使用或者釋放資源。如果冪等控制沒有做好,很有可能導致數據不一致等嚴重問題
  • 解決思路在上述“分支事務記錄”中增加執(zhí)行狀態(tài),每次執(zhí)行前都查詢該狀態(tài)

懸掛:文章來源地址http://www.zghlxwxcb.cn/news/detail-431458.html

  • 懸掛就是對于一個分布式事務,其二階段 Cancel 接口比 Try 接口先執(zhí)行
  • 出現原因是在 RPC 調用分支事務 try 時,先注冊分支事務,再執(zhí)行 RPC 調用,如果此時 RPC 調用的網絡發(fā)生擁堵,通常 RPC 調用是有超時時間的,RPC 超時以后,TM 就會通知 RM 回滾該分布式事務,可能回滾完成后,RPC 請求才到達參與者真正執(zhí)行,而一個 Try 方法預留的業(yè)務資源,只有該分布式事務才能使用,該分布式事務第一階段預留的業(yè)務資源就再也沒有人能夠處理了,對于這種情況,我們就成為懸掛,即業(yè)務資源預留后沒法繼續(xù)處理
  • 解決思路時候如果二階段執(zhí)行完成,那一階段就不能再繼續(xù)執(zhí)行。再執(zhí)行一階段事務時判斷在該全局事務下,“分支事務記錄”表中是否已經有二階段事務記錄,如果有則不執(zhí)行 Try

參考

  • [JavaGuide]
  • 分布式事務(三):分布式事務解決方案之TCC(Try、Confirm、Cancel)
  • 分布式事務(五):分布式事務解決方案之最大努力通知

到了這里,關于分布式事務TCC 你真的理解了嗎的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 3分鐘帶你了解下分布式事務TCC與SAGA

    文章首發(fā)地址 TCC(Try-Confirm-Cancel)是一種分布式事務方案,它通過將事務拆分成“嘗試(Try)”、“確認(Confirm)”和“取消(Cancel)”三個階段來實現。 在TCC中,每個參與者都需要實現這三個階段來協調分布式事務的執(zhí)行。具體流程如下: 嘗試(Try)階段:在這一階段中

    2024年02月14日
    瀏覽(22)
  • 《微服務實戰(zhàn)》 第三十章 分布式事務框架seata TCC模式

    《微服務實戰(zhàn)》 第三十章 分布式事務框架seata TCC模式

    第三十章 分布式事務框架seata TCC模式 第二十九章 分布式事務框架seata AT模式 本章節(jié)介紹分布式事務框架seata TCC模式,上一章節(jié)介紹seata以及集成到Springboot、微服務框架里。 一個分布式的全局事務,整體是 兩階段提交 的模型。全局事務是由若干分支事務組成的,分支事務要

    2024年02月12日
    瀏覽(24)
  • 分布式:一文吃透分布式事務和seata事務

    分布式:一文吃透分布式事務和seata事務

    什么是事務 事務是并發(fā)控制的單位,是用戶定義的一個操作序列。 事務特性 原子性(Atomicity): 事務是數據庫的邏輯工作單位,事務中包括的諸操作要么全做,要么全不做。 一致性(Consistency): 事務執(zhí)行的結果必須是使數據庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性

    2024年02月07日
    瀏覽(21)
  • 【分布式事務】Seata 開源的分布式事務解決方案

    【分布式事務】Seata 開源的分布式事務解決方案

    Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式解決方案。 阿里巴巴作為國內最早一批進行應用分布式(微服務化)改造的企業(yè),很早就遇到微服務架構下

    2024年02月02日
    瀏覽(18)
  • 【分布式】分布式事務:2PC

    【分布式】分布式事務:2PC

    分布式事務的問題可以分為兩部分: 并發(fā)控制 concurrency control 原子提交 atomic commit 分布式事務問題的產生場景:一份數據被分片存在多臺服務器上,那么每次事務處理都涉及到了多臺機器。 可序列化(并發(fā)控制): 定義了事務執(zhí)行的正確性 真正地并行執(zhí)行事務,獲得真正的

    2024年02月09日
    瀏覽(19)
  • Redis分布式鎖和分布式事務

    Redis分布式鎖和分布式事務 一、Redis分布式鎖 1.1 watch和事務實現分布式鎖 原理是通過watch來觀察一個變量,一個線程在操作的時候,其他線程會操作失敗,相當于樂觀鎖。 1.2 setnx實現分布式鎖 原理是通過setnx設置一個變量,設置成功的線程搶到鎖,執(zhí)行相關的業(yè)務,執(zhí)行完畢

    2024年02月09日
    瀏覽(25)
  • 【分布式】java實現分布式事務的五種方案

    【分布式】java實現分布式事務的五種方案

    用戶支付完成會將支付狀態(tài)及訂單狀態(tài)保存在訂單數據庫中,由訂單服務去維護訂單數據庫。由庫存服務去維護庫存數據庫的信息。下圖是系統結構圖: 如何實現兩個分布式服務(訂單服務、庫存服務)共同完成一件事即訂單支付成功自動減庫存,這里的關鍵是如何保證兩個

    2024年04月11日
    瀏覽(21)
  • 微服務·數據一致-事務與分布式事務

    微服務·數據一致-事務與分布式事務

    事務是計算機科學和數據庫管理中的一個關鍵概念,用于確保數據的一致性和可靠想。事務管理是大多數應用程序和數據庫系統中不可或缺的一部分。分布式事務擴展了事務的概念,用于多個分布式系統和服務的數據一致性管理。本調查報告將深入探討事務和分布式事務的概

    2024年02月09日
    瀏覽(20)
  • Seata分布式事務

    Seata分布式事務

    本地事務,也就是傳統的單機事務。在傳統數據庫事務中,必須要滿足四個原則: 分布式事務,就是指不是在單個服務或單個數據庫架構下,產生的事務,例如: 跨數據源的分布式事務 跨服務的分布式事務 綜合情況 完成上面的操作需要訪問三個不同的微服務和三個不同的

    2024年02月09日
    瀏覽(24)
  • 【高級篇】分布式事務

    【高級篇】分布式事務

    本地事務,也就是傳統的 單機事務 。在傳統數據庫事務中,必須要滿足四個原則: 分布式事務 ,就是指不是在單個服務或單個數據庫架構下,產生的事務,例如: 跨數據源的分布式事務 跨服務的分布式事務 綜合情況 在數據庫水平拆分、服務垂直拆分之后,一個業(yè)務操作

    2024年02月08日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包