真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

分布式事務(wù)系列-解決跨庫轉(zhuǎn)賬問題-創(chuàng)新互聯(lián)

本文內(nèi)容

  1. 什么是分布式事務(wù)
  2. 分布式事務(wù)中的難點(diǎn)
  3. 常見的解決方案
  4. 講解通過可靠消息來解決分布式事務(wù)

什么是分布式事務(wù)?

有這樣一個需求:

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)新邵免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

小明有兩個賬戶,分別位于A、B兩個數(shù)據(jù)庫中,小明需要將A中的資金轉(zhuǎn)到B中。

我們?nèi)绾螌?shí)現(xiàn)?

按照下面的方式實(shí)現(xiàn)看看有沒有問題。

  1. 連接數(shù)據(jù)庫A,獲取connA連接
  2. connA打開事務(wù)
  3. A庫資金減少100
  4. 連接庫B,獲取connB連接
  5. connB打開事務(wù)
  6. B庫資金增加100
  7. connA.commit()
  8. connB.commit()

上面操作,正常情況是沒有問題。

考慮如下情況:

第7步執(zhí)行成功之后,網(wǎng)絡(luò)出問題了,第8步會提交失敗,此時的結(jié)果是:A庫資金減少了100,B庫資金卻沒有增加;這是一個網(wǎng)絡(luò)問題導(dǎo)致了我們業(yè)務(wù)失敗了,網(wǎng)絡(luò)因素是程序不可控的一些因素,還有其他的比如運(yùn)行到7之后,系統(tǒng)突然斷電了,也會出現(xiàn)同樣的結(jié)果。造成了數(shù)據(jù)錯誤,對業(yè)務(wù)影響也是比較大的。

分布式事務(wù)可以這么理解:一個業(yè)務(wù)操作中,會包含很多子業(yè)務(wù)的,每個子業(yè)務(wù)都是獨(dú)立的事務(wù),我們需要考慮的是如何保證這些子業(yè)務(wù)都成功,或者都失敗。

分布式事務(wù)中的難點(diǎn)

  1. 分布式事務(wù)中,分支可能是各種各樣的,可能存在各種異常情況導(dǎo)致有些成功有些卻失敗了,這些情況需要我們程序能夠處理,保證所有的分支要么都成功、要么都失敗,不能出現(xiàn)部分成功而部分失敗的情況。
  2. 分布式事務(wù)中,很難保證多個分支同時成功。每個分支可能都是提供遠(yuǎn)程接口進(jìn)行調(diào)用,之間存在網(wǎng)絡(luò)故障的問題,前面的分支調(diào)用成功了,但是其他分支由于網(wǎng)絡(luò)等不可控的因素而調(diào)用不成功,此時數(shù)據(jù)是很難做到同時一致性的。
  3. 實(shí)時一致性難以保證。那么我們可以做到最終一致性也是可以的。

什么是最終一致性?

就拿上面的轉(zhuǎn)賬來說,A庫的資金減少了,由于網(wǎng)絡(luò)問題,操作B庫的connB連接斷開了,導(dǎo)致B庫資金沒有增加;網(wǎng)絡(luò)問題是可以恢復(fù)了,如果網(wǎng)絡(luò)恢復(fù)了,系統(tǒng)能夠給B中資金加上,這樣最終數(shù)據(jù)也是正確的;這中間有段時間AB庫的資金是不一致的(A庫減少了100,B庫應(yīng)該增加100卻沒有增加,數(shù)據(jù)是不一致的),但是最終某個時間點(diǎn)數(shù)據(jù)變?yōu)橐恢铝恕?strong>能夠?qū)⒉灰恢碌臅r間降到最低是系統(tǒng)需要考慮的問題。

分布式事務(wù)中,我們可以接受數(shù)據(jù)在某個時間段之內(nèi)不一致,但是數(shù)據(jù)最終在某個時間點(diǎn)是一致的。

常見解決方案

  1. 可靠消息模式
  2. TCC模式實(shí)現(xiàn)

分布式事務(wù)系列中主要講這2種方案,這兩種方案基本上可以解決大多數(shù)常見的分布式事務(wù)的問題,所以咱們必須把這兩種方式拿下。

下面我們介紹一下使用可靠消息如何實(shí)現(xiàn)?

可靠消息模式實(shí)現(xiàn)轉(zhuǎn)賬操作

分布式事務(wù)系列 - 解決跨庫轉(zhuǎn)賬問題
兩個微服務(wù)
服務(wù)A:用于操作A庫中的賬戶
服務(wù)B:用于操作B庫中的賬戶

兩個服務(wù)都是鏈接獨(dú)立的數(shù)據(jù)庫,依靠數(shù)據(jù)庫提供的功能,能夠保證各自的事務(wù)。

對于用戶來說過程如下:

  1. 調(diào)用服務(wù)A,扣款100
  2. 發(fā)送扣款成功的消息到消息服務(wù)
  3. 返回用戶轉(zhuǎn)賬已受理

接著

  1. 服務(wù)B,拉取到轉(zhuǎn)賬消息
  2. B庫中給賬戶+100
  3. 調(diào)用消息服務(wù)將消息刪除
  4. 服務(wù)B消費(fèi)的過程中,比如出現(xiàn)網(wǎng)絡(luò)、機(jī)器重啟等原因,導(dǎo)致消費(fèi)失敗,等機(jī)器恢復(fù)之后,可以再次消費(fèi)這條消息,重試多次最終會成功

上面整個轉(zhuǎn)賬過程中有幾點(diǎn)我們需要考慮一下:

  1. 如何確保A服務(wù)中扣款成功之后,消息一定能夠發(fā)送成功;如果消息發(fā)送失敗而丟失了,后面的業(yè)務(wù)將沒法進(jìn)行。這塊涉及如何發(fā)送可靠消息,之前消息系列的文章有介紹,大家可以看一下:聊聊業(yè)務(wù)系統(tǒng)中投遞消息到mq的幾種方式
  2. 我們的服務(wù)一般都是集群的方式,消息消費(fèi)的時候,可能會出現(xiàn)一條消息并發(fā)消費(fèi)的情況,并發(fā)情況發(fā)生的時候,如何確保消費(fèi)只能夠被消費(fèi)成功一次。如果一條轉(zhuǎn)賬消息被成功消費(fèi)兩次,最終B賬戶中將增加200,導(dǎo)致業(yè)務(wù)出錯。這塊可以參考如何保證消息消費(fèi)的冪等性,這塊之前也有講過,大家也可以看一下:探討一下實(shí)現(xiàn)冪等性的幾種方式

依靠消息模式實(shí)現(xiàn)分布式事物,比較適合消費(fèi)者一定會處理成功的場景。比如用戶注冊發(fā)送郵件、發(fā)送短信、送積分等。

總結(jié)

  1. 本文主要介紹了什么是分布式事務(wù)、其中的一些難點(diǎn)
  2. 常見的使用最多的解決方案:異步消息處理分布式事物、tcc模式
  3. tcc模式我們在后面的文章中介紹,目前在我們自己的系統(tǒng)中實(shí)現(xiàn)了通用的tcc,已經(jīng)上線運(yùn)行,運(yùn)行也比較穩(wěn)定
  4. 對分布式事務(wù)有興趣、或有疑問的,可以加我微信itsoku交流
  5. 請關(guān)注公眾號javacode2018,更多好文及時推送給您

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。


網(wǎng)頁標(biāo)題:分布式事務(wù)系列-解決跨庫轉(zhuǎn)賬問題-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://weahome.cn/article/spgcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部