gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

手把手教你用PHP完成一個分布式事務TCC

什么是TCC,TCC是Try、Confirm、Cancel三個詞語的縮寫,最早是由 Pat Helland 于 2007 年發表的一篇名為《Life beyond Distributed Transactions:an Apostate’s Opinion》的論文提出。

TCC組成

TCC分為3個階段

  • Try 階段:嘗試執行,完成所有業務檢查(一致性), 預留必須業務資源(準隔離性)
  • Confirm 階段:如果所有分支的Try都成功了,則走到Confirm階段。Confirm真正執行業務,不作任何業務檢查,只使用 Try 階段預留的業務資源
  • Cancel 階段:如果所有分支的Try有一個失敗了,則走到Cancel階段。Cancel釋放 Try 階段預留的業務資源。

TCC分布式事務里,有3個角色,與經典的XA分布式事務一樣:

  • AP/應用程序,發起全局事務,定義全局事務包含哪些事務分支
  • RM/資源管理器,負責分支事務各項資源的管理
  • TM/事務管理器,負責協調全局事務的正確執行,包括Confirm,Cancel的執行,并處理網絡異常

如果我們要進行一個類似于銀行跨行轉賬的業務,轉出(TransOut)和轉入(TransIn)分別在不同的微服務里,一個成功完成的TCC事務典型的時序圖如下:

手把手教你用PHP完成一個分布式事務TCC

TCC實踐

下面我們進行一個TCC事務的具體開發

目前可用于TCC的開源框架,主要為Java語言,其中以seata為代表。我們的例子采用nodejs,使用的分布式事務框架為dtm,它對分布式事務的支持非常優雅。下面來詳細講解TCC的組成

下面我們來編寫具體的Try/Confirm/Cancel的處理函數

$vega->handleFunc('/api/TransOutTry', function (MixVegaContext $ctx) {     var_dump('TransOutTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransOutConfirm', function (MixVegaContext $ctx) {     var_dump('TransOutConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransOutCancel', function (MixVegaContext $ctx) {     var_dump('TransOutCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInTry', function (MixVegaContext $ctx) {     var_dump('TransInTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInConfirm', function (MixVegaContext $ctx) {     var_dump('TransInConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInCancel', function (MixVegaContext $ctx) {     var_dump('TransInCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');

到此各個子事務的處理函數已經OK了,然后是開啟TCC事務,進行分支調用

    DtmclitccGlobalTransaction($dtm, function ($tcc) use ($svc) {         /** @var DtmcliTcc $tcc */         $req = ['amount' => 30];         $tcc->callBranch($req, $svc . '/TransOutTry', $svc . '/TransOutConfirm', $svc . '/TransOutCancel');         $tcc->callBranch($req, $svc . '/TransInTry', $svc . '/TransInConfirm', $svc . '/TransInCancel');     });

至此,一個完整的TCC分布式事務編寫完成。

如果您想要完整運行一個成功的示例,那么參考這個例子yedf/dtmcli-php-sample,將它運行起來非常簡單

# 部署啟動dtm# 需要docker版本18以上git clone https://github.com/yedf/dtmcd dtm docker-compose up# 另起一個命令行https://github.com/yedf/dtmcli-php-sample.gitcd dtmcli-php-sample composer installphp demo.php start

TCC的回滾

假如銀行將金額準備轉入用戶2時,發現用戶2的賬戶異常,返回失敗,會怎么樣?我們可以讓TransIn返回失敗來模擬這種情況

$vega->handleFunc('/api/TransInTry', function (MixVegaContext $ctx) {     var_dump('TransInTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody());     $ctx->JSON(200, ['result' => 'FAILURE']);})->methods('POST');

我們給出事務失敗交互的時序圖

手把手教你用PHP完成一個分布式事務TCC

這個跟成功的TCC差別就在于,當某個子事務返回失敗后,后續就回滾全局事務,調用各個子事務的Cancel操作,保證全局事務全部回滾。

在TCC事務模式上,有不少的讀者會問,如果Confirm/Cancel失敗會怎么樣?這是一個好問題,代表您正在深入思考TCC事務模式。第一種情況是臨時失敗,例如網絡故障、應用或數據庫宕機,這類錯誤進行重試,最后會返回成功;另一種情況為業務失敗,按照TCC的協議,第一階段鎖定資源,保證足夠的資源能夠讓Confirm/Cancel執行,也就是說,程序邏輯上,Confirm/Cancel是不允許返回業務失敗的,如果出現業務失敗,那么是bug,需要開發人員手動修復bug。

小結

在這篇文章里,我們介紹了TCC的理論知識,也通過一個例子,完整給出了編寫一個TCC事務的過程,涵蓋了正常成功完成,以及成功回滾的情況。相信讀者通過這邊文章,對TCC已經有了深入的理解。

關于分布式事務

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
先锋影音男人资源| 成人在线国产视频| 少妇人妻大乳在线视频| 波多野结衣激情| 免费在线观看污网站| 色91精品久久久久久久久| 一级在线免费视频| 欧美一级裸体视频| 国产三级日本三级在线播放| 国产成人精品视频ⅴa片软件竹菊| 无码 制服 丝袜 国产 另类| cao在线观看| 91免费黄视频| 无码人妻丰满熟妇区五十路百度| 黄色国产精品视频| the porn av| 成人亚洲免费视频| a天堂资源在线观看| 久久久久久久午夜| 性欧美极品xxxx欧美一区二区| 天天影视综合色| 国产一级黄色录像片| 久久久久久免费看| 97公开免费视频| 三年中文高清在线观看第6集| 欧美一区二区视频在线播放| 日韩精品xxxx| 国产欧美一区二| 男女日批视频在线观看| 日本三级免费观看| 亚洲一二三不卡| 麻豆tv在线播放| 中文字幕在线综合| 成人免费网站入口| 中文字幕中文在线| 97超碰在线人人| 亚洲男人天堂av在线| 男人日女人视频网站| 亚洲一级片av| aa免费在线观看| 亚洲中文字幕无码一区二区三区 | av污在线观看| 欧美精品久久久久久久久久久| 久久精品香蕉视频| 久草免费福利在线| aaa一级黄色片| 中文字幕第80页| 国产中文字幕免费观看| 成年人免费观看的视频| 国产精品人人妻人人爽人人牛| 免费观看亚洲视频| 五月花丁香婷婷| 九色porny91| 欧洲黄色一级视频| 国产精品69久久久| 五月天激情图片| 美女在线视频一区二区| 国产视频一区二区三区在线播放| 嫩草影院中文字幕| 男女啪啪的视频| 国产日产欧美一区二区| 欧美一级小视频| 一区二区三区四区毛片| 中文字幕久久av| 亚洲美女性囗交| av中文字幕网址| 国产精品自在自线| 亚洲国产欧美91| 神马午夜伦理影院| mm131午夜| 欧美日韩激情四射| 日韩伦理在线免费观看| 欧美一区二区视频在线播放| 996这里只有精品| 久久艹国产精品| 黄色片久久久久| 亚洲少妇第一页| 女人高潮一级片| 大地资源网在线观看免费官网| 国产女教师bbwbbwbbw| 欧美中文字幕在线观看视频 | 日日橹狠狠爱欧美超碰| 丝袜老师办公室里做好紧好爽 | 日本黄色播放器| 日本五级黄色片| av片中文字幕| 中国黄色片免费看| 四虎免费在线观看视频| 97久久国产亚洲精品超碰热| xxxx18hd亚洲hd捆绑| 亚洲不卡视频在线| 日韩国产精品毛片| 男人的天堂狠狠干| 九九精品久久久| av免费观看国产| 日日噜噜夜夜狠狠| 精品久久久无码人妻字幂| 欧美性久久久久| 男插女免费视频| 日韩一级片播放| 黄色三级中文字幕| 亚洲第一中文av| 国产手机免费视频| 国产九九在线视频| 欧美一级视频在线播放| 成人黄色一级大片| 国产又黄又大又粗视频| 91制片厂免费观看| 韩国一区二区av| 老太脱裤子让老头玩xxxxx| 亚洲天堂av一区二区| 日韩中文字幕在线视频观看 | 97超碰在线视| 欧美一级视频在线| 国产精品无码av无码| 九九热只有这里有精品| www.偷拍.com| 九色porny自拍| 黑森林福利视频导航| 国产一区二区四区| 樱空桃在线播放| 手机av在线网站| 午夜啪啪小视频| 亚洲欧美日韩精品一区| 亚洲一区二区蜜桃| 欧洲av无码放荡人妇网站| 人体内射精一区二区三区| 久久视频免费在线| 香蕉精品视频在线| 欧美性视频在线播放| 国产成年人视频网站| 在线黄色免费观看| 国产日韩成人内射视频| 精品久久久久av| 欧美日韩一道本| 欧美成人免费高清视频| 日韩av片在线看| www.色偷偷.com| 97超碰成人在线| 日本高清免费在线视频| 亚洲美女自拍偷拍| www.-级毛片线天内射视视| 妞干网在线免费视频| 精品视频一区二区在线| 男人的天堂日韩| 三上悠亚av一区二区三区| 中文字幕第38页| 欧美性视频在线播放| 亚洲一区二区偷拍| 91免费视频黄| 欧美不卡在线播放| 高清一区二区视频| 婷婷丁香激情网| 国产玉足脚交久久欧美| 国产精品秘入口18禁麻豆免会员| 精品无码国产一区二区三区av| 人妻久久久一区二区三区| 免费高清一区二区三区| www激情五月| 国产一二三四区在线观看| 玖玖精品在线视频| 国产日产欧美视频| 免费成人黄色大片| 成年人看的毛片| av污在线观看| 欧美日韩中文字幕在线播放 | 亚洲这里只有精品| 日本黄色片一级片| 冲田杏梨av在线| 日本免费成人网| 黄色国产小视频| 国产欧美精品aaaaaa片| 鲁一鲁一鲁一鲁一av| 日本一级黄视频| 亚洲一区二区在线视频观看| 男人添女荫道口图片| 国产乱叫456| 天堂社区在线视频| 久艹在线免费观看| 亚洲激情在线看| 精品久久久久av| 精品国产一区三区| 欧美日韩亚洲国产成人| 污污视频网站免费观看| 欧美成人一区二区在线观看| japanese在线视频| 日本中文字幕观看| 色多多视频在线播放| 六月丁香婷婷在线| 国产青青在线视频| 337p亚洲精品色噜噜狠狠p| 男女污污视频网站| 日韩中文字幕a| 手机在线看福利| 亚洲最大综合网| 免费看污黄网站| xx欧美撒尿嘘撒尿xx| 2025韩国理伦片在线观看| 午夜激情福利在线| wwwwxxxx日韩|