久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久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號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美久久久网站| 在线亚洲欧美| 欧美激情视频一区二区三区在线播放| 亚洲精品乱码日韩| 丝袜美腿亚洲一区二区图片| 一本色道精品久久一区二区三区| 蜜臀91精品国产高清在线观看| 久久精品国产网站| 国产成人免费视频网站视频社区| 国产精品2区| 牛牛精品成人免费视频| 国产精品地址| 久久久久久一区二区| 国产亚洲久久| 国产一区调教| 三级小说欧洲区亚洲区| 午夜av成人| 国产婷婷精品| 日韩欧美中文字幕电影| 亚洲天堂av资源在线观看| 欧美13videosex性极品| 亚洲女同av| 国内精品99| 最新日韩欧美| 中文字幕一区二区三区在线视频| 日韩福利视频网| 国产精品国码视频| 美女一区网站| 欧美日韩国产观看视频| 亚洲一级高清| 老牛国产精品一区的观看方式| 在线视频亚洲欧美中文| 欧美日韩亚洲一区二区三区在线| 另类综合日韩欧美亚洲| 久久久久久久久丰满| 国产精品社区| 日韩福利视频一区| 欧洲精品一区二区三区| 丝瓜av网站精品一区二区| 欧美一区精品| 久久精品国内一区二区三区水蜜桃| 久久午夜视频| 国产欧美日韩影院| 成人在线视频免费| 最新亚洲激情| 日本午夜精品| 久久久久国产精品一区二区| 亚洲精品一级| 精品国产精品久久一区免费式 | 免费在线观看一区二区三区| 青青草91视频| 88xx成人免费观看视频库| 男女男精品视频网| 91亚洲国产成人久久精品| 99国产精品私拍| 国产精品99久久免费| 亚洲精品一区三区三区在线观看| 亚洲制服一区| 日韩精品第一区| 日本h片久久| 亚洲网站视频| 国产精品igao视频网网址不卡日韩| 亚洲午夜黄色| 麻豆国产精品视频| 另类激情亚洲| 日韩欧美一区二区三区在线观看 | 国产欧美日韩| 日韩午夜一区| 日本黄色精品| 国产亚洲福利| 日韩88av| 日本aⅴ亚洲精品中文乱码 | 美女久久久久久| 免费成人av在线播放| 91欧美日韩| 国产精品亚洲产品| 亚洲一级淫片| 久久婷婷丁香| 久久精品国产在热久久| 日韩欧美高清一区二区三区| 99久久99视频只有精品| 国产精品蜜月aⅴ在线| 美女精品一区| 精品日产乱码久久久久久仙踪林| 日韩制服丝袜先锋影音| 成人精品亚洲| 精品一区视频| 日韩国产91| 丝袜美腿成人在线| 亚洲电影在线| 四虎影视精品| 日韩欧美一区二区三区免费看| 日韩精选在线| 伊人久久亚洲热| 99久久99久久精品国产片果冰| 麻豆精品av| 91精品国产自产观看在线| 亚洲一区网站| 日本韩国欧美超级黄在线观看| 欧美午夜三级| 视频一区日韩精品| 日韩一级欧洲| 久久久久美女| 成人日韩在线| 高清一区二区| 国产精品大片| 国产精品久久777777毛茸茸| 欧美三级第一页| 亚洲一区二区av| 天堂va蜜桃一区二区三区| 亚洲国产日韩欧美在线| 中文在线资源| 精品美女久久| 国产精品美女在线观看直播| 欧美日韩亚洲一区三区| 日韩精品导航| 奇米狠狠一区二区三区| 日韩毛片一区| 日本免费在线视频不卡一不卡二| 日本综合精品一区| 日韩精品高清不卡| 日韩欧美三区| 91精品国产一区二区在线观看| 四虎在线精品| 亚洲精品进入| 91精品尤物| 国产精品一区二区三区四区在线观看 | 久久激情综合网| 日本强好片久久久久久aaa| 日韩av成人高清| 国产伦精品一区二区三区在线播放| 青青国产精品| 精品国产一级| 日韩影院二区| 亚洲91视频| 欧美在线影院| 在线精品观看| 日韩中文字幕区一区有砖一区 | 久久精品99国产精品日本| 日韩高清成人在线| 国产精品欧美一区二区三区不卡| 麻豆91精品视频| 亚洲综合电影| 亚洲手机在线| 日本亚洲视频在线| 国产精品黄色片| 岛国av在线播放| 免费久久精品| 亚洲精品一二三**| 日本不卡不码高清免费观看 | 免费污视频在线一区| 国精品一区二区| 视频在线观看一区| 欧美日韩午夜电影网| 精品国产亚洲一区二区在线观看| 日韩精品第一区| 老鸭窝亚洲一区二区三区| 日韩不卡手机在线v区| 激情综合五月| 亚洲在线观看| 国产精品中文| 久久精品亚洲人成影院| 99re国产精品| 欧美亚洲二区| 国内一区二区三区| 日韩亚洲精品在线| 国产精品最新| 伊人精品一区| 欧美欧美黄在线二区| 伊人久久在线| 亚洲另类视频| 高清av一区| 中文字幕日韩欧美精品高清在线| 欧美激情日韩| 亚洲欧美日韩国产一区| 久久激情五月婷婷| 性欧美xxxx免费岛国不卡电影| 亚洲精品第一| 久久激情五月婷婷| 日韩欧美一区二区三区免费观看| 亚洲v天堂v手机在线| 色综合狠狠操| 综合日韩在线| 日韩成人三级| 日韩欧美2区| 四虎4545www国产精品| 亚洲精品少妇| 亚洲二区免费| 欧美激情视频一区二区三区在线播放| 欧美综合另类| 国产精品白丝一区二区三区| 精品一区在线| 国产精品任我爽爆在线播放| 久久蜜桃精品| 国产精品v亚洲精品v日韩精品| 在线视频日韩| 精品不卡一区| 7m精品国产导航在线| 欧美特黄a级高清免费大片a级| 国产精品对白|