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

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

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

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

TCC組成

TCC分為3個階段

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

TCC分布式事務(wù)里,有3個角色,與經(jīng)典的XA分布式事務(wù)一樣:

  • AP/應(yīng)用程序,發(fā)起全局事務(wù),定義全局事務(wù)包含哪些事務(wù)分支
  • RM/資源管理器,負責(zé)分支事務(wù)各項資源的管理
  • TM/事務(wù)管理器,負責(zé)協(xié)調(diào)全局事務(wù)的正確執(zhí)行,包括Confirm,Cancel的執(zhí)行,并處理網(wǎng)絡(luò)異常

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

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

TCC實踐

下面我們進行一個TCC事務(wù)的具體開發(fā)

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

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

$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');

到此各個子事務(wù)的處理函數(shù)已經(jīng)OK了,然后是開啟TCC事務(wù),進行分支調(diào)用

    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分布式事務(wù)編寫完成。

如果您想要完整運行一個成功的示例,那么參考這個例子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的回滾

假如銀行將金額準(zhǔn)備轉(zhuǎn)入用戶2時,發(fā)現(xiàn)用戶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');

我們給出事務(wù)失敗交互的時序圖

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

這個跟成功的TCC差別就在于,當(dāng)某個子事務(wù)返回失敗后,后續(xù)就回滾全局事務(wù),調(diào)用各個子事務(wù)的Cancel操作,保證全局事務(wù)全部回滾。

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

小結(jié)

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

關(guān)于分布式事務(wù)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
日本黄色片一级片| 国产成人永久免费视频| 免费的av在线| 国内精品国产三级国产aⅴ久| 天天碰免费视频| 精品免费国产一区二区| 日韩亚洲在线视频| 999精品网站| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产精品网站免费| 国产免费毛卡片| 韩国日本美国免费毛片| 搡女人真爽免费午夜网站| 美女一区二区三区视频| 欧美三级午夜理伦三级富婆| 成人免费xxxxx在线视频| 91香蕉视频导航| 香蕉视频色在线观看| 神马午夜伦理影院| 欧美成人高潮一二区在线看| 黄色片一级视频| 冲田杏梨av在线| ijzzijzzij亚洲大全| 99在线观看视频免费| 日本三级免费观看| gai在线观看免费高清| www.午夜色| 大陆极品少妇内射aaaaa| 成人亚洲视频在线观看| 黄色www在线观看| 无码人妻丰满熟妇区96| 九九九九九伊人| 高清欧美精品xxxxx| 狠狠操狠狠干视频| 免费一级特黄特色毛片久久看| av在线无限看| 人人妻人人做人人爽| 一起操在线视频| 天堂av在线网站| 亚洲综合欧美激情| 无码人妻精品一区二区三区在线| 亚洲综合20p| 欧美成人xxxxx| 中文字幕一区二区三区四区五区人| 成人网站免费观看入口| 亚洲一区二区中文字幕在线观看| 欧美成人精品免费| 一级片免费在线观看视频| 青青视频在线播放| 佐佐木明希av| 四虎成人在线播放| 一路向西2在线观看| 男女高潮又爽又黄又无遮挡| 午夜免费福利视频在线观看| www.在线观看av| 五月婷婷狠狠操| 亚洲av毛片在线观看| 红桃av在线播放| 免费av手机在线观看| 国产精品无码乱伦| 日本黄色的视频| 一区二区三区 日韩| 成年人视频在线免费| 国产精品333| 青青草成人免费在线视频| 三级在线免费观看| 男人天堂成人网| 粉色视频免费看| 精品少妇人妻av一区二区| 国产美女主播在线播放| 久久久久久久久久毛片| 污视频网站观看| 在线观看免费成人av| 欧美激情成人网| 妺妺窝人体色www在线观看| 亚洲怡红院在线| 亚洲黄色片免费| www.玖玖玖| 日本国产在线播放| 人妻av无码专区| 精品国产一区二区三区无码| 国产免费内射又粗又爽密桃视频| 免费观看国产视频在线| 国产a级黄色大片| 欧美一级视频免费看| 波多野结衣之无限发射| 国产免费人做人爱午夜视频| 一级片视频免费观看| 黄色一级片网址| 成人一区二区免费视频| 无码人妻精品一区二区三区66| 国产原创精品在线| 国产女人18毛片| 蜜臀久久99精品久久久酒店新书| 另类小说第一页| 在线观看污视频| 日本成人黄色网| 337p亚洲精品色噜噜狠狠p| av动漫在线观看| 国产精品99久久久久久大便| 国产人妻777人伦精品hd| 一本色道久久亚洲综合精品蜜桃 | 日韩欧美国产片| 少妇黄色一级片| 亚洲欧美一区二区三区不卡| 男人的天堂avav| 日本高清久久久| 老太脱裤子让老头玩xxxxx| 免费看污污网站| 亚洲美免无码中文字幕在线| 午夜剧场高清版免费观看| 欧美精品自拍视频| av不卡在线免费观看| 日韩人妻一区二区三区蜜桃视频| 色黄视频免费看| 成年人观看网站| 国内av一区二区| 久久久久狠狠高潮亚洲精品| 伊人再见免费在线观看高清版 | 能看的毛片网站| www.国产在线播放| 交换做爰国语对白| xxxx一级片| 男人的天堂日韩| 99蜜桃臀久久久欧美精品网站| 日本丰满大乳奶| www.久久com| 欧美性受xxxxxx黑人xyx性爽| www日韩在线观看| 国产97色在线 | 日韩| 久久www视频| 中文字幕一区二区在线观看视频 | 虎白女粉嫩尤物福利视频| 欧美性潮喷xxxxx免费视频看| 国内自拍第二页| 日本不卡一区二区在线观看| 国产真人无码作爱视频免费| 黄色高清无遮挡| 一区二区三区免费播放| 黄色免费网址大全| 午夜啪啪小视频| 在线观看成人免费| av日韩在线看| 69堂免费视频| 91香蕉视频污版| 日本网站在线看| 亚洲乱码日产精品bd在线观看| 成年丰满熟妇午夜免费视频 | 日本新janpanese乱熟| 女人天堂av手机在线| 已婚少妇美妙人妻系列| 日韩一区二区三区久久| 久久久久久久久久毛片| 国产成人av影视| 成人免费网站入口| 亚洲激情免费视频| 久久在线中文字幕| 午夜肉伦伦影院| 国产一区二区在线观看免费视频| 久久久久久久久久毛片| 青青视频免费在线| 国产精品免费入口| 日韩成人精品视频在线观看| 国产奶头好大揉着好爽视频| cao在线观看| 日韩av片网站| 久久亚洲国产成人精品无码区| 日韩av片在线看| 亚洲欧美日韩一二三区| 国产精品久久中文字幕| 中文字幕亚洲欧洲| 婷婷无套内射影院| 免费成人黄色大片| 18禁男女爽爽爽午夜网站免费| 国模吧无码一区二区三区| 免费的av在线| 2018中文字幕第一页| 国风产精品一区二区| 国产精品天天av精麻传媒| 日本美女爱爱视频| 久久婷婷综合色| 777久久久精品一区二区三区| 99中文字幕在线| youjizzxxxx18| 成人午夜免费在线| 水蜜桃在线免费观看| 成年网站免费在线观看| 国产女女做受ⅹxx高潮| 性生活免费在线观看| 啊啊啊一区二区| 无码人妻精品一区二区三区99v| 日韩在线视频在线观看| 色哟哟免费网站| 中文字幕视频三区| 午夜免费一区二区| aa免费在线观看| 国产精品欧美激情在线观看| 秋霞无码一区二区| 精品人妻少妇一区二区| 51xx午夜影福利|