[轉]分布式事務之TCC服務設計和實現注意事項

1、TCC簡介

TCC是一種比較成熟的分布式事務解決方案,可用于解決跨庫操作的數據一致性問題;

TCC是服務化的兩階段編程模型,其Try、Confirm、Cancel 3個方法均由業務編碼實現;

其中Try操作作為一階段,負責資源的檢查和預留,Confirm操作作為二階段提交操作,執行真正的業務,Cancel是預留資源的取消;

如下圖所示,業務實現TCC服務之后,該TCC服務將作為分布式事務的其中一個資源,參與到整個分布式事務中;事務管理器分2階段協調TCC服務,在第一階段調用所有TCC服務的Try方法,在第二階段執行所有TCC服務的Confirm或者Cancel方法;

1

2、用戶在實現TCC服務時,有以下注意事項

  • 1、業務操作分兩階段完成:

如下圖所示,接入TCC前,業務操作只需要一步就能完成,但是在接入TCC之后,需要考慮如何將其分成2階段完成,把資源的檢查和預留放在一階段的Try操作中進行,把真正的業務操作的執行放在二階段的Confirm操作中進行;

2

TCC服務要保證第一階段Try操作成功之后,二階段Confirm操作一定能成功;

  • 2、允許空回滾;

如下圖所示,事務協調器在調用TCC服務的一階段Try操作時,可能會出現因為丟包而導致的網絡超時,此時事務協調器會觸發二階段回滾,調用TCC服務的Cancel操作;

TCC服務在未收到Try請求的情況下收到Cancel請求,這種場景被稱為空回滾;TCC服務在實現時應當允許空回滾的執行;

3

  • 3、防懸掛控制;

如下圖所示,事務協調器在調用TCC服務的一階段Try操作時,可能會出現因網絡擁堵而導致的超時,此時事務協調器會觸發二階段回滾,調用TCC服務的Cancel操作;在此之后,擁堵在網絡上的一階段Try數據包被TCC服務收到,出現了二階段Cancel請求比一階段Try請求先執行的情況;

用戶在實現TCC服務時,應當允許空回滾,但是要拒絕執行空回滾之后到來的一階段Try請求;

4

  • 4、冪等控制:

無論是網絡數據包重傳,還是異常事務的補償執行,都會導致TCC服務的Try、Confirm或者Cancel操作被重復執行;用戶在實現TCC服務時,需要考慮冪等控制,即Try、Confirm、Cancel 執行一次和執行多次的業務結果是一樣的;

5

  • 5、業務數據可見性控制;

TCC服務的一階段Try操作會做資源的預留,在二階段操作執行之前,如果其他事務需要讀取被預留的資源數據,那么處于中間狀態的業務數據該如何向用戶展示,需要業務在實現時考慮清楚;通常的設計原則是“寧可不展示、少展示,也不多展示、錯展示”;

  • 6、業務數據并發訪問控制;

TCC服務的一階段Try操作預留資源之后,在二階段操作執行之前,預留的資源都不會被釋放;如果此時其他分布式事務修改這些業務資源,會出現分布式事務的并發問題;

用戶在實現TCC服務時,需要考慮業務數據的并發控制,盡量將邏輯鎖粒度降到最低,以最大限度的提高分布式事務的并發性;

3、總結

螞蟻金服使用TCC有10年歷史,在TCC應用方面積累了大量實踐經驗;除了上述TCC服務的設計注意事項外,我們在解決用戶高并發、高可用需求方面也提供了解決方案,我們對分布式事務做了極致的性能優化以支持雙11等大促的高并發需求,我們基于螞蟻LDC架構的高可用方案能使分布式事務服務達到99.99%的可用性;

螞蟻金服大部分業務系統均采用TCC的方式接入分布式事務,但設計TCC服務時要遵循大量設計規范,這無疑對用戶提了非常高的要求;為了簡化用戶接入分布式事務的門檻,螞蟻金服的分布式事務框架(SOFA-DTX)推出了FMT(Framework-managed transactions)模式和XA模式,這兩種模式均不需要用戶實現TCC服務,用戶只需要關注自身業務SQL便可;DTX的三種模式:TCC、FMT和XA相互之間是功能互補,相輔相成的,形成了螞蟻金服完善的分布式事務解決方案。

SOFA-DTX全面覆蓋金融場景,金融級容災保障、提供豐富的接入模式并且使用簡潔易于接入;目前已經應用在支付寶、網上銀行、螞蟻財富、芝麻信用、南京銀行等項目中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285134.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

量化投資策略的評估標準及其計算公式

收益率指標:分為策略的總收益率和策略的年化收益率 策略的總收益率: 策略的總收益率是評價一個策略盈利能力的最基本的指標,其計算方法為: 公式中Vt表示策略最終的股票和現金的總價值,V0表示策略最初的股票和現金的總…

.net post xml 數據

var request WebRequest.Create(url);//url 是post 接口的URL request.Method "post";// 請求方法 request.ContentType "text/xml"; //請求類型 request.Headers.Add("charset:utf-8"); //設置文檔類型的編碼格式 var encoding Encoding.Ge…

【ArcGIS微課1000例】0005:空間連接(Spatial Join)

問題描述 現在要根據范圍,怎樣批量統計各個范圍內的湖泊的總面積、各個省份內的鐵路或河流總長度、各個地區的人口綜合等。 空間連接 根據空間關系將一個要素類的屬性連接到另一個要素類的屬性。目標要素和來自連接要素的被連接屬性寫入到輸出要素類。 用法 空間連接是指根…

【微服務專題之】.Net6中集成消息隊列-RabbitMQ中直接路由模式

微信公眾號:趣編程ACE關注可了解更多的.NET日常實戰開發技巧,如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助,歡迎關注]前文回顧【微服務專題之】.Net6下集成消息隊列上-RabbitMQ【微服務專題之】.Net6下集成消息隊列2-RabbitM…

C語言試題162之圓周率π

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:圓周率π…

第14、15教學周作業

要求一 還差一些沒做完。 要求二 USTH_C程序設計&#xff08;基礎&#xff09;14周第一次PTA作業 7-3 將數組中的數逆序存放 1.實驗代碼 #include<stdio.h>int main() {int i,n,t;scanf("%d",&n);int a[n];for(i0;i<n;i){scanf("%d",&t)…

篇三:訪問JSON靜態文件

背景&#xff1a;在定位的時候帶出車牌號的前兩位&#xff0c;這里就有一個地址和車牌號前兩位的映射關系&#xff0c;這個映射關系起初是通過Ajax在頁面加載的時候請求去數據庫里面查出來賦給一個變量&#xff0c;然后去操作&#xff0c;但是這個過程通常需要4~7秒&#xff0c…

代理(Proxy)

2019獨角獸企業重金招聘Python工程師標準>>> 一、代理的概念 動態代理技術是整個java技術中最重要的一個技術&#xff0c;它是學習java框架的基礎&#xff0c;不會動態代理技術&#xff0c;那么在學習Spring這些框架時是學不明白的。 動態代理技術就是用來產生一個對…

【ArcGIS微課1000例】0006:創建隨機點(Create Random Points)

問題描述 在一個給定的范圍內,根據隨機位置,生成指定數量的隨機點。生成的隨機點通常用來提取每個點對應的NDVI,高程,氣溫等值。 ArcGIS創建隨機點 創建指定數量的隨機點要素。可以在范圍窗口中、面要素內、點要素上或線要素沿線生成隨機點。 工具介紹:

C語言試題163之計算某一天是對應年的第幾天,這一年一共多少天;計算兩個日期之間相隔的天數。兩個日期由鍵盤輸入。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:計算某一…

[轉]《吐血整理》系列-頂級程序員工具集

你知道的越多&#xff0c;你不知道的越多 點贊再看&#xff0c;養成習慣 GitHub上已經開源 https://github.com/JavaFamily 有一線大廠面試點腦圖、個人聯系方式&#xff0c;歡迎Star和指教 前言 這期是被人才群交流里&#xff0c;還有很多之前網友評論強行頂出來的一期&#x…

跟我做?個高德地圖的 iOS / Android MAUI 控件(前言)

Microsoft Build 2022 ?會上正式發布了 .NET MAUI , 對于 .NET 開發者可以? C# 完成跨平臺的前端應?開發。對?起 MAUI 的前身 Xamarin , MAUI 除了可以?傳統的原?開發模式外&#xff0c;還?持了 Blazor 的混合式開發。這也讓更多?向的開發?員能進?到跨平臺的應?開發…

Valid Number

Valid Number 題解 題目描述 即判斷某個字符串是否合法的數字表達式。如&#xff1a; 2e10&#xff0c;合法。 75.0.&#xff0c;非法。 0e&#xff0c;非法。 0.1 &#xff0c;合法。題解 基于規則與狀態判斷。可利用二維數組模擬狀態轉移圖&#xff0c;又或是利用變量記錄狀…

java.util.ListIterator

列表迭代器并不持有當前元素的引用&#xff0c;其持有的游標是位于列表連個元素之間。可以通過調用next()或者previous()返回列表中的元素。一個擁有n個元素的列表擁有n1個游標位置&#xff0c;示意圖如下&#xff1a; 注意&#xff1a;remove和 set(Object)方法并不是以迭代器…

保姆級C語言版高斯坐標正算反算傾情奉獻!

文章目錄 正反算原理速遞C語言正反算實現坐標正算坐標反算擴展閱讀: 【小程序】坐標正算神器V1.0(附C/C#/VB源程序) 測量人看過來:多種語言編寫的測量坐標反算神器附源碼(C#/VB) 正反算原理速遞 已知邊長和方位角,由已知點計算待定點的坐標,稱為坐標正算。已知兩點坐標…

C語言試題164之求定積分

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:利用梯形…

我的jekyll配置和修改

主要記錄使用jekyll搭建博客時的一些配置和修改。 注意&#xff1a; >使用時請刪除{和%以及{和{之間的空格。 預覽文章 source ~/.bash_profile jekyll server添加about me 邊欄 參考the5fire的技術博客在index.html頁面加入如下代碼&#xff1a; <section> <h4>…

[轉]白話阿里巴巴Java開發手冊高級篇

不久前&#xff0c;阿里巴巴發布了《阿里巴巴Java開發手冊》&#xff0c;總結了阿里巴巴內部實際項目開發過程中開發人員應該遵守的研發流程規范&#xff0c;這些流程規范在一定程度上能夠保證最終的項目交付質量&#xff0c;通過在時間中總結模式&#xff0c;并推廣給廣大開發…

C語言試題165之求三色旗問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:有一根繩…

spring boot微服務通用部署啟動腳本

2019獨角獸企業重金招聘Python工程師標準>>> 通用springboot微服務啟動、停止腳本。 #!/bin/bash # # chkconfig: - 20 80 # description: Starts and stops the App. # author:vakingeENVdev RUNNING_USERvakinge ADATEdate %Y%m%d%H%M%S APP_NAMEpassport-serve…