成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 講解如何利用 Python完成 Saga 分布式事務(wù)

講解如何利用 Python完成 Saga 分布式事務(wù)

熱門標(biāo)簽:哈爾濱外呼系統(tǒng)代理商 湛江電銷防封卡 電話機(jī)器人適用業(yè)務(wù) 南昌辦理400電話怎么安裝 徐州天音防封電銷卡 獲客智能電銷機(jī)器人 不錯(cuò)的400電話辦理 鄭州智能外呼系統(tǒng)運(yùn)營(yíng)商 佛山防封外呼系統(tǒng)收費(fèi)

銀行跨行轉(zhuǎn)賬業(yè)務(wù)是一個(gè)典型分布式事務(wù)場(chǎng)景,假設(shè) A 需要跨行轉(zhuǎn)賬給 B,那么就涉及兩個(gè)銀行的數(shù)據(jù),無(wú)法通過一個(gè)數(shù)據(jù)庫(kù)的本地事務(wù)保證轉(zhuǎn)賬的 ACID,只能夠通過分布式事務(wù)來(lái)解決。

1、分布式事務(wù)

分布式事務(wù)在分布式環(huán)境下,為了滿足可用性、性能與降級(jí)服務(wù)的需要,降低一致性與隔離性的要求,一方面遵循 BASE 理論:

  • 基本業(yè)務(wù)可用性( Basic Availability )
  • 柔性狀態(tài)( Soft state )
  • 最終一致性( Eventual consistency )

另一方面,分布式事務(wù)也部分遵循 ACID 規(guī)范:

  • 原子性:嚴(yán)格遵循
  • 一致性:事務(wù)完成后的一致性嚴(yán)格遵循;事務(wù)中的一致性可適當(dāng)放寬
  • 隔離性:并行事務(wù)間不可影響;事務(wù)中間結(jié)果可見性允許安全放寬
  • 持久性:嚴(yán)格遵循

2、SAGA

Saga 是這一篇數(shù)據(jù)庫(kù)論文SAGAS提到的一個(gè)分布式事務(wù)方案。其核心思想是將長(zhǎng)事務(wù)拆分為多個(gè)本地短事務(wù),由 Saga 事務(wù)協(xié)調(diào)器協(xié)調(diào),如果各個(gè)本地事務(wù)成功完成那就正常完成,如果某個(gè)步驟失敗,則根據(jù)相反順序一次調(diào)用補(bǔ)償操作。

目前可用于 SAGA 的開源框架,主要為 Java 語(yǔ)言,其中以 seata 為代表。我們的例子采用 go 語(yǔ)言,使用的分布式事務(wù)框架為https://github.com/yedf/dtm,它對(duì)分布式事務(wù)的支持非常優(yōu)雅。下面來(lái)詳細(xì)講解 SAGA 的組成:

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

  • AP/應(yīng)用程序,發(fā)起全局事務(wù),定義全局事務(wù)包含哪些事務(wù)分支
  • RM/資源管理器,負(fù)責(zé)分支事務(wù)各項(xiàng)資源的管理
  • TM/事務(wù)管理器,負(fù)責(zé)協(xié)調(diào)全局事務(wù)的正確執(zhí)行,包括 SAGA 正向 /逆向操作的執(zhí)行

下面看一個(gè)成功完成的 SAGA 時(shí)序圖,就很容易理解 SAGA 分布式事務(wù):

3、SAGA 實(shí)踐

對(duì)于我們要進(jìn)行的銀行轉(zhuǎn)賬的例子,我們將在正向操作中,進(jìn)行轉(zhuǎn)入轉(zhuǎn)出,在補(bǔ)償操作中,做相反的調(diào)整。

首先我們創(chuàng)建賬戶余額表:

CREATE TABLE dtm_busi.`user_account` ( 
  `id` int(11) AUTO_INCREMENT PRIMARY KEY, 
  `user_id` int(11) not NULL UNIQUE , 
  `balance` decimal(10,2) NOT NULL DEFAULT '0.00', 
  `create_time` datetime DEFAULT now(), 
  `update_time` datetime DEFAULT now() 
); 


我們先編寫核心業(yè)務(wù)代碼,調(diào)整用戶的賬戶余額

def saga_adjust_balance(cursor, uid, amount): 
  affected = utils.sqlexec(cursor, "update dtm_busi.user_account set balance=balance+%d where user_id=%d and balance >= -%d" %(amount, uid, amount)) 
  if affected == 0: 
    raise Exception("update error, balance not enough") 


下面我們來(lái)編寫具體的正向操作 /補(bǔ)償操作的處理函數(shù)

@app.post("/api/TransOutSaga") 
def trans_out_saga(): 
  saga_adjust_balance(c, out_uid, -30) 
  return {"dtm_result": "SUCCESS"} 
 
@app.post("/api/TransOutCompensate") 
def trans_out_compensate(): 
  saga_adjust_balance(c, out_uid, 30) 
  return {"dtm_result": "SUCCESS"} 
 
@app.post("/api/TransInSaga") 
def trans_in_saga(): 
  saga_adjust_balance(c, in_uid, 30) 
  return {"dtm_result": "SUCCESS"} 
 
@app.post("/api/TransInCompensate") 
def trans_in_compensate(): 
  saga_adjust_balance(c, in_uid, -30) 
  return {"dtm_result": "SUCCESS"} 


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

# 這是 dtm 服務(wù)地址 
dtm = "http://localhost:8080/api/dtmsvr" 
# 這是業(yè)務(wù)微服務(wù)地址 
svc = "http://localhost:5000/api" 
 
    req = {"amount": 30} 
    s = saga.Saga(dtm, utils.gen_gid(dtm)) 
    s.add(req, svc + "/TransOutSaga", svc + "/TransOutCompensate") 
    s.add(req, svc + "/TransInSaga", svc + "/TransInCompensate") 
    s.submit() 


至此,一個(gè)完整的 SAGA 分布式事務(wù)編寫完成。

如果您想要完整運(yùn)行一個(gè)成功的示例,那么參考這個(gè)例子yedf/dtmcli-py-sample,將它運(yùn)行起來(lái)非常簡(jiǎn)單

# 部署啟動(dòng) dtm 
# 需要 docker 版本 18 以上 
git clone https://github.com/yedf/dtm 
cd dtm 
docker-compose up 
 
# 另起一個(gè)命令行 
git clone https://github.com/yedf/dtmcli-py-sample 
cd dtmcli-py-sample 
pip3 install flask dtmcli requests 
flask run 
 
# 另起一個(gè)命令行 
curl localhost:5000/api/fireSaga 

4、處理網(wǎng)絡(luò)異常

假設(shè)提交給 dtm 的事務(wù)中,調(diào)用轉(zhuǎn)入操作時(shí),出現(xiàn)短暫的故障怎么辦?按照 SAGA 事務(wù)的協(xié)議,dtm 會(huì)重試未完成的操作,這時(shí)我們要如何處理?故障有可能是轉(zhuǎn)入操作完成后出網(wǎng)絡(luò)故障,也有可能是轉(zhuǎn)入操作完成中出現(xiàn)機(jī)器宕機(jī)。如何處理才能夠保障賬戶余額的調(diào)整是正確無(wú)問題的?

這類網(wǎng)絡(luò)異常的妥當(dāng)處理,是分布式事務(wù)中的大難題,異常情況包括三類:重復(fù)請(qǐng)求、空補(bǔ)償、懸掛,都需要正確處理

DTM 提供了子事務(wù)屏障功能,保證上述異常情況下的業(yè)務(wù)邏輯,只會(huì)有一次正確順序下的成功提交。(子事務(wù)屏障詳情參考分布式事務(wù)最經(jīng)典的七種解決方案的子事務(wù)屏障環(huán)節(jié))

我們把處理函數(shù)調(diào)整為:

@app.post("/api/TransOutSaga") 
def trans_out_saga(): 
  with barrier.AutoCursor(conn_new()) as cursor: 
    def busi_callback(c): 
      saga_adjust_balance(c, out_uid, -30) 
    barrier_from_req(request).call(cursor, busi_callback) 
  return {"dtm_result": "SUCCESS"} 


這里的 barrier_from_req(request).call(cursor, busi_callback)調(diào)用會(huì)使用子事務(wù)屏障技術(shù),保證 busi_callback 回調(diào)函數(shù)僅被提交一次

您可以嘗試多次調(diào)用這個(gè) TransIn 服務(wù),僅有一次余額調(diào)整。

5、處理回滾

假如銀行將金額準(zhǔn)備轉(zhuǎn)入用戶 2 時(shí),發(fā)現(xiàn)用戶 2 的賬戶異常,返回失敗,會(huì)怎么樣?我們調(diào)整處理函數(shù),讓轉(zhuǎn)入操作返回失敗

@app.post("/api/TransInSaga") 
def trans_in_saga(): 
  return {"dtm_result": "FAILURE"} 


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

這里有一點(diǎn),TransIn 的正向操作什么都沒有做,就返回了失敗,此時(shí)調(diào)用 TransIn 的補(bǔ)償操作,會(huì)不會(huì)導(dǎo)致反向調(diào)整出錯(cuò)了呢?

不用擔(dān)心,前面的子事務(wù)屏障技術(shù),能夠保證 TransIn 的錯(cuò)誤如果發(fā)生在提交之前,則補(bǔ)償為空操作;TransIn 的錯(cuò)誤如果發(fā)生在提交之后,則補(bǔ)償操作會(huì)將數(shù)據(jù)提交一次。

我們可以將返回錯(cuò)誤的 TransIn 改成:

@app.post("/api/TransInSaga") 
def trans_in_saga(): 
  with barrier.AutoCursor(conn_new()) as cursor: 
    def busi_callback(c): 
      saga_adjust_balance(c, in_uid, 30) 
    barrier_from_req(request).call(cursor, busi_callback) 
  return {"dtm_result": "FAILURE"} 


最后的結(jié)果余額依舊會(huì)是對(duì)的,原理可以參考:分布式事務(wù)最經(jīng)典的七種解決方案的子事務(wù)屏障環(huán)節(jié)

6、小結(jié)

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

文中使用的 dtm 是新開源的 Golang 分布式事務(wù)管理框架,功能強(qiáng)大,支持 TCC 、SAGA 、XA 、事務(wù)消息等事務(wù)模式,支持 Go 、python 、PHP 、node 、csharp 等語(yǔ)言的。同時(shí)提供了非常簡(jiǎn)單易用的接口。

以上就是利用 Python 輕松完成一個(gè) Saga 分布式事務(wù)的詳細(xì)內(nèi)容,更多關(guān)于Python完成一個(gè) Saga 分布式事務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 帶你用Python實(shí)現(xiàn)Saga 分布式事務(wù)的方法
  • 詳解分布式系統(tǒng)中如何用python實(shí)現(xiàn)Paxos
  • Python搭建Spark分布式集群環(huán)境
  • python django框架中使用FastDFS分布式文件系統(tǒng)的安裝方法
  • Python多進(jìn)程入門、分布式進(jìn)程數(shù)據(jù)共享實(shí)例詳解
  • Python分布式進(jìn)程中你會(huì)遇到的問題解析

標(biāo)簽:呂梁 紹興 懷化 蘭州 吉安 安康 廣西 蕪湖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《講解如何利用 Python完成 Saga 分布式事務(wù)》,本文關(guān)鍵詞  講解,如何,利用,Python,完成,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《講解如何利用 Python完成 Saga 分布式事務(wù)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于講解如何利用 Python完成 Saga 分布式事務(wù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    26uuu精品一区二区| 亚洲精品国产精品国自产在线| 欧美亚洲精品一区二区| 国产福利精品av综合导导航| 污版网站在线观看| 国产精品电影观看| 国产高清视频色在线www| 丝袜美腿综合| av手机免费在线观看| 亚洲欧美视频一区| 欧美日韩国产一二三| 日本视频中文字幕一区二区三区| 激情小说综合区| 神马午夜一区二区| 激情综合电影网| 91麻豆文化传媒在线观看| 日本亚洲视频在线| 99久热re在线精品996热视频| 夜夜摸夜夜操| 福利网在线观看| 国产视频一区在线观看一区免费| 精品一区二区在线播放| 国产成人av电影免费在线观看| 亚洲欧美福利一区二区| 性猛交xxxx乱大交孕妇印度| 黄色精品一区二区| 精品国产免费人成在线观看| 日韩欧美性视频| 国产亚洲精品成人a| 国产精品久久久亚洲第一牛牛| 成人免费淫片视频软件| 亚洲另类图片色| 国产91视频在线| 日韩免费av电影| 日韩欧美中文字幕一区二区三区| 亚洲人成免费电影| 亚洲欧洲综合另类在线| 91九色蝌蚪porny| 日韩高清有码在线| av不卡免费在线观看| 国产精品久久久久久久久久免费| 国产一区二区三区四区二区| 亚洲成人黄色在线观看| 5858s免费视频成人| 久久精品国产v日韩v亚洲| 黄色的视频在线观看免费| 中文字幕在线观看| 日韩新的三级电影| 日本一区二区三区高清不卡| 狠狠入ady亚洲精品| 精品国内亚洲在观看18黄| 亚洲不卡中文字幕无码| 国模大尺度视频一区二区| 精品成人一区二区三区| 成人h视频在线| 免费网站在线观看人| 精品国产一区二区三区久久久狼| 日本综合精品一区| 毛片毛片毛片毛片毛| 日韩精品av一区二区三区| 四虎影院成人| 国产精品色呦呦| 写真片福利在线播放| 亚洲xxx在线| 少妇搡bbbb搡bbb搡打电话| 亚洲综合久久av一区二区三区| 免费在线观看的电影网站| 久久久99久久精品欧美| 免费国偷自产拍精品视频| 男人在线观看视频| 一区二区三区免费视频网站| 女女同性女同一区二区三区91| 一区二区三区中文字幕| 精品国产乱码久久久久久虫虫漫画| 国产亚洲黄色片| 日韩福利视频| 亚洲va男人天堂| 久久天天躁狠狠躁夜夜躁| 久久久www成人免费无遮挡大片| 高清国产一区二区三区四区五区| 国产尤物一区二区| 亚洲人妖av一区二区| 天天操天天干天天插| 色视频在线免费| 欧美性xxxxxx| 国产不卡一卡2卡三卡4卡5卡在线| 亚洲av无码一区二区三区网址| 国产真实老熟女无套内射| 香蕉久久久久久久av网站| 99久久九九| 亚洲乱码中文字幕综合| 日本美女一区二区三区| 日韩毛片在线看| 99久久精品免费观看国产| 丁香激情综合国产| 9.1片黄在线观看| 激情综合一区二区三区| 国产精品v日韩精品v欧美精品网站| 91九色精品视频| 国产伦精品一区二区三区四区| 日韩欧美精品| 伊人在我在线看导航| 日韩av一区二区在线| 成年女人午夜毛片免费看| 伦伦影院午夜日韩欧美限制| 奇米影视首页 狠狠色丁香婷婷久久综合| 成人免费毛片在线观看| 国产精品亚洲自拍| 亚洲欧美日韩综合网| 亚洲女同精品视频| 人妻换人妻a片爽麻豆| 高清视频一区二区三区四区| 国产精品自产拍在线观| 91蝌蚪视频九色| 欧美—级在线免费片| 99久久精品一区| 国产男女av| 久久免费视频这里只有精品| 日本福利片免费看| 国产高清免费视频| 日本高清免费观看| 欧洲亚洲妇女av| 国产一级二级av| 久久久久在线视频| 欧美毛片免费观看| 久久这里只有精品免费| 色版视频在线观看| 日韩欧美在线免费观看| 在线观看三级视频欧美| 国产精品第三页| 亚洲综合视频网| 亚洲深夜福利视频| 麻豆一区二区在线| 亚洲第一综合天堂另类专| 性xxxx丰满孕妇xxxx另类| 欧美2区3区4区| 免费看欧美女人艹b| 夜夜骚av一区二区三区| 石原莉奈在线亚洲三区| 色婷婷香蕉在线一区二区| 最近的2019中文字幕免费一页| 91精品国产综合久久久久久久久| 在线观看三级视频欧美| 91tv亚洲精品香蕉国产一区7ujn| 极品美鲍一区| 亚洲综合精品在线| 神马影院午夜我不卡| 午夜小视频在线| 26uuuu精品一区二区| 亚洲激情男女视频| 婷婷在线精品视频| 欧美成人网在线| 一区二区三区不卡视频在线观看| 超碰在线网址| 91午夜精品| 欧美在线免费| 国产精品国产一区二区| 久久亚洲欧美日韩精品专区| 四虎影视成人| 成人免费播放器| 每日更新成人在线视频| 国产成人天天5g影院在线观看| 91亚洲精品久久久蜜桃| 午夜精品一区二区在线观看的| 免费中文字幕视频| 又嫩又硬又黄又爽的视频| 成人同人动漫免费观看| 最新中文字幕在线观看视频| 欧美s码亚洲码精品m码| 91精品国产调教在线观看| 老汉色老汉首页av亚洲| 粉嫩aⅴ一区二区三区四区五区| crdy在线观看欧美| 欧美色图亚洲激情| 国产乱码精品一区二区三区不卡| 日韩精品首页| 国产女主播一区二区三区| av在线不卡精品| 国外成人性视频| 国产一区不卡在线观看| 久久草视频在线| 成年人av网站| 亚洲欧美一区二区三区国产精品| 国产精品夫妻激情| 成人豆花视频| 日本五十路女优| 精品久久ai电影| 男人的天堂在线视频| 国产在线精品观看| 精品国产免费观看| www免费在线观看| 久久久午夜精品理论片中文字幕| 国语自产精品视频在线看一大j8| 国产精品一线天粉嫩av| 天堂а√在线官网| 99久久久无码国产精品性色戒| 欧美日韩国产传媒| 影音先锋国产| 免费毛片视频网站| 国产欧美日韩精品综合| 中文字幕一区二区精品区| 黄色一级免费| 久久精品人人做人人爽97| 欧美日韩视频免费在线观看| 久久99亚洲精品| 国产精品久久国产三级国电话系列| 国产精品看片资源| 色777狠狠综合秋免鲁丝| 麻豆成人在线播放| 国产黄片一区二区三区| 在线观看中文| 午夜电影久久久| 亚洲激情在线观看视频| 无码无套少妇毛多18pxxxx| 97久精品国产片一区二区三区| 中文亚洲视频在线| 中文在线字幕在线观看| 日韩欧美一级二级三级久久久| 日韩成人精品一区二区三区| 19禁羞羞电影院在线观看| 免费人成在线观看网站| 欧美日韩日本网| 五月婷婷激情综合| 亚洲a在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产视频在线观看| 99免费在线观看视频| 成人毛片视频在线观看| 91欧美一区二区三区| 成人精品gif动图一区| 国产一区二区麻豆| 亚洲天堂日韩电影| 午夜电影一区二区| 国产91福利| 天天操夜夜操免费视频| 亚洲av毛片在线观看| 国产日韩欧美精品| 日韩高清在线一区| 成人亚洲欧美日韩在线观看| 日本一区精品视频| 久久精品欧美一区二区三区麻豆| 久久久久久毛片免费看| 国产精品久久| 69堂精品视频在线播放| 亚洲成色777777女色窝| 色综合色综合网色综合| 欧美日韩福利在线| 成人av动漫在线观看| 国产精品白丝久久av网站| 中文字幕在线观看91| 国产真实夫妇交换视频| 裸体素人女欧美日韩| 日韩亚洲欧美综合| 国产又白又嫩又紧又爽18p| 欧美做a欧美| 成人伊人精品色xxxx视频| 日韩a一级欧美一级| 成年人网站免费视频| 亚洲iv一区二区三区| 欧美日韩一区二区不卡| 不许穿内裤随时挨c调教h苏绵| 玖玖精品一区| 欧美一级欧美三级| 韩国av中国字幕| 亚洲a在线观看| 国产精品国模大尺度视频| 亚洲激情在线播放| 夜夜夜精品看看| 在线 亚洲欧美在线综合一区| 乱插在线www| www.eeuss影院| 日韩欧美亚洲国产另类| 中文字幕在线视频一区二区三区| 国内精品久久久久久影视8| 成人黄色大片在线观看| 美女的胸无遮挡在线观看| 俄罗斯一级**毛片在线播放| 一区在线播放| 日韩欧美中文字幕一区二区| 亚洲制服欧美中文字幕中文字幕| 国产精品嫩草在线观看| 最新69国产成人精品视频免费| 久久夜色邦福利网| 99re66热这里只有精品4| 久久99精品久久久久久欧洲站| 91激情五月电影| 伊人久久大香线蕉av不卡| 蜜桃无码一区二区三区| 成人免费在线看片| 久草在线在线| 国产伦精品一区二区三区免费| 免费的av网站| 一本色道久久88| 国产电影一区二区三区爱妃记| 日本激情视频一区二区三区| 日韩激情第一页| 久久久成人av| 国产日韩欧美黄色| 精品一区二区免费看| 免费视频观看成人| 亚洲精品tv| 新天堂中文资源官网在线观看| 青娱乐精品在线| 精品淫伦v久久水蜜桃| 国产清纯白嫩初高生在线观看91| 超碰免费在线观看| 成人福利资源| 日本熟妇乱子伦xxxx| av中文在线资源| 一区二区三区在线免费观看| 最新视频 - x88av| 欧美精品三级日韩久久| 国产精品91一区| 最新在线你懂的| 无码人妻丰满熟妇啪啪欧美| 欧美亚韩一区二区三区| aaa欧美色吧激情视频| 99热这里只有精| 伊人国产在线| 精品在线观看视频| 欧美日中文字幕| 国产视频亚洲视频| 专区另类欧美日韩| 成人激情电影在线看| 国产香蕉一区二区三区在线视频| av在线最新| 日韩污视频在线观看| 一区二区三区精|