<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      .Net Core with 微服務 - 分布式事務 - TCC

      上一次我們講解了分布式事務的 2PC、3PC 。那么這次我們來理一下 TCC 事務。本次還是講解 TCC 的原理跟 .NET 其實沒有關系。

      TCC

      • Try 準備階段,嘗試執行業務
      • Confirm 完成業務
      • Cancel 回滾準備階段的業務

      TCC 事務其實是 2PC 的一個擴展。上一次我們說了 2PC ,在二階段進行事務提交。因為 2PC 基本上是利用數據庫的
      事務能力進行 commit ,其實這里還有可能出現一種 rollback 情況。 TCC 就是把 2PC 的二階段細化了,拆分成了 Confirm 跟 Cancel 兩個步驟。TCC 是 2PC 的一次進化,TCC 拆分二階段后已經不局限于數據庫事物了,它可以適用于非數據庫事物的場景。因為我們的 Cancel 階段可以進行更加復雜的回滾能力,業務補償能力。TCC 可以認為是業務層面的2PC 。

      下面我們以使用客戶積分兌換房間為示例說明一下 TCC 事務。

      1. Try
        為完成 TCC 事務的 Try 階段,我們需要在房間上增加一個狀態字段“是否鎖定”,一旦鎖定,其它訂單就沒有辦法預定這間房間。同樣我們需要在用戶積分表上增加一個字段“凍結積分”,如果涉及到并發可能要單獨拉一張表出來。這里簡化一點就加個字段吧。
        Try階段開始:訂單服務把房間設置為鎖定狀態;積分服務把用戶的積分減去消耗的積分同時把消耗的積分暫存在凍結字段上。
      2. Confirm
        如果一階段都提交成功了,那么所有的服務都開始進入 Confirm 階段。訂單服務把房間狀態更改為“已預定”狀態;積分服務把凍結的積分清0。這樣整個事務都成功完成了。
      3. Cancel
        如果一階段某個服務沒有 Try 成功,那么所有的服務都要進入Cancel階段。比如訂單服務鎖定房源成功了,積分凍結的時候失敗了,那么訂單服務要進入 Cancel 階段,把房間的的鎖定狀態取消,從新釋放出來。如果鎖定房源失敗了,積分扣減成功了,那么 Cancel 階段就要把扣減的積分給加回去。

      TCC 的一些問題

      異常

      如果 Confirm 階段出現異常,TCC 管理器會不斷的重試這個階段,直到成功。因為理論上認為只要 Try 是成功的,那么 Confirm 階段一定會成功。因為所需要的資源已經在 Try 階段凍結了。如果 Cancel 階段出現異常,那么 TCC 管理器也會不斷的重試這個階段來解除凍結的資源。

      冪等

      因為 TCC 有重試機制,所以所有的接口都需要實現冪等,避免多次調用對業務數據產生錯誤。比如多次扣款,多次下訂單等。

      并發問題

      因為 TCC 事務在 Try 階段對資源是完全的提交狀態,并沒有像 2PC 那樣使用數據庫事物來對資源進行鎖定,所以在并發的時候對資源的修改要格外注意。在處理業務的時候要時刻注意鎖定的資源對業務造成的一影響。

      允許空取消

      TCC 事務在一階段 Try 的時候失敗要運行進行 Cancel 提交。這時候 Cancel 其實是不需要做任何補償操作,我們稱之為空取消。這個時候也要注意,在編寫 Cancel 操作的時候要時刻注意到底有沒有完成 Try 操作,如果沒有完成 Try 操作則要進行空取消。

      預防懸掛

      TCC 按流程上來說是不會出現懸掛情況的。但是有一種特殊情況會造成資源的懸掛。按照正常流程我們的 Try 階段總是先于 Cancel 執行的。但是由于網絡擁堵的問題造成 Try 調用延遲了,TCC 管理器在一定時間沒收到 Try 成功響應后會發送 Cancel 調用,這個 Cancel 就有可能在 Try 之前先被調用了。在 Cancel 執行成功后, 這個 Try 請求調用才到達服務,這個時候如果 Try 被執行成功,那么就會造成資源的懸掛。所以當編寫 Try 代碼的時候同意需要注意是不是已經調用過 Cancel 操作了。

      總結

      TCC 事務是 2PC 的一種升級。TCC 相對于 2PC 不再依賴于本地數據庫事物能力,它可以使用于應用層面的事務。它把 2PC 的提交跟回滾操作明確的抽象成 Confirm 跟 Cancel 。TCC 事務在邏輯上是比較清晰的。但是 TCC 使用起來也有不方便的地方,就是它對代碼入侵比較強,比較繁瑣。每個業務都要強制拆分成3個方法。而且還要還要注意冪等,空取消,懸掛等問題。

      相關文章

      NET Core with 微服務 - 什么是微服務
      .Net Core with 微服務 - 架構圖
      .Net Core with 微服務 - Ocelot 網關
      .Net Core with 微服務 - Consul 注冊中心
      .Net Core with 微服務 - Seq 日志聚合
      .Net Core with 微服務 - Elastic APM
      .Net Core with 微服務 - Consul 配置中心
      .Net Core with 微服務 - Polly 熔斷降級
      .Net Core with 微服務 - 分布式事務 - 2PC、3PC

      關注我的公眾號一起玩轉技術

      posted @ 2021-08-25 10:07  Agile.Zhou  閱讀(2694)  評論(13)    收藏  舉報
      主站蜘蛛池模板: 灵宝市| 亚洲a人片在线观看网址| 蜜臀av久久国产午夜| 粗壮挺进人妻水蜜桃成熟| 国产电影一区二区三区| 午夜成人理论无码电影在线播放| 被拉到野外强要好爽| 洛浦县| 精品 无码 国产观看| 大地资源网第二页免费观看| 精品无码一区在线观看| 国产精品美女www爽爽爽视频| 无码人妻精品一区二区三区下载| 上犹县| 日本内射精品一区二区视频| 久久精品一本到99热免费| 欧美变态口味重另类在线视频| 亚洲国产免费图区在线视频| 亚洲性日韩精品一区二区三区 | 欧洲亚洲精品免费二区| 久久免费偷拍视频有没有| 色猫咪av在线网址| 77777五月色婷婷丁香视频| 一本色道久久综合熟妇人妻| 艳妇乳肉豪妇荡乳在线观看| 好硬好湿好爽好深视频| 亚洲一区二区三区啪啪| 国产精品中文字幕av| 西西午夜无码大胆啪啪国模| 亚洲熟女精品一区二区| 国产日韩入口一区二区| 亚洲色欲在线播放一区| 日本视频一两二两三区| 亚洲国产精品久久久久秋霞| 丰满无码人妻热妇无码区| 一区二区三区四区亚洲自拍 | 郧西县| 四虎精品视频永久免费| 亚洲AV日韩精品久久久久| 老司机精品影院一区二区三区| 亚洲无人区一码二码三码|