一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在分布式事務(wù)場景下,如何設(shè)計一個高可靠的跨系統(tǒng)轉(zhuǎn)賬

 張小龍net館藏 2024-01-16 發(fā)布于湖北
1.高并發(fā)扣款,如何保證結(jié)果一致性
2.在分布式事務(wù)場景下,如何設(shè)計一個高可靠的跨系統(tǒng)轉(zhuǎn)賬
收起

轉(zhuǎn)載至我的博客https://www. ,公眾號:架構(gòu)成長指南

大家好,我是蝸牛哥,跨系統(tǒng)轉(zhuǎn)賬網(wǎng)上教程很多,但是都是講的比較淺,這個功能看似簡單,但是細節(jié)很多,要做好沒那么容易,因為涉及到分布式事務(wù)、交易安全性等方面,做不好就出現(xiàn)資損,本文講一下如何設(shè)計一個高可靠跨系統(tǒng)轉(zhuǎn)賬,以及要關(guān)注的重點

示例說明

假設(shè)有用戶 A在 銀行A 轉(zhuǎn)賬給B銀行的用戶B 100 元

這里只是為了便于理解,所以才把系統(tǒng)命名為銀行A/B,具體可能與銀行的流程有點細微區(qū)別

會遇到哪些問題?

轉(zhuǎn)賬失敗,不能直接回滾

要根據(jù)返回的異常來判斷,如果接收到的異常是一個業(yè)務(wù)異常,并且異常碼是雙方約定好的,那么可以進行回滾,如果返回的不是一個明確的異常,,那么不能擅自回滾,因為可能是網(wǎng)絡(luò)超時異常,而網(wǎng)絡(luò)超時,又分為響應(yīng)超時和請求超時,如果是響應(yīng)超時,對方系統(tǒng)可能已經(jīng)入賬了,所以要進行重試操作確認

面試題:超時異常,有哪幾種情況,怎么處理?

系統(tǒng)重試要保持冪等

假如網(wǎng)絡(luò)超時進行重試,入金方的接口需要支持冪等,否則會出現(xiàn)可能重復入金,而冪等條件是根據(jù)出金方的業(yè)務(wù)流水號+渠道號進行查詢判斷

  1. 如果有記錄,并根據(jù)狀態(tài),來決定響應(yīng)結(jié)果
  2. 如果沒有記錄則進行入金,在返回對應(yīng)的響應(yīng)結(jié)果

如果失敗,那么出金方需要進行解凍回滾操作,如果成功,那么需要進行解凍出金操作。

同時入金方還要設(shè)置此組合字段為唯一索引,這樣可以避免重復插入的問題,比如:未查詢到數(shù)據(jù),則進行插入,正好前面一筆請求事務(wù)未提交,如果不設(shè)置唯一索引就會導致出現(xiàn)重復插入的問題。

交易安全性

由于這種資產(chǎn)操作非常敏感,稍有失誤影響非常大,所以交易安全性是非常重要的,比如:有攻擊者知道B銀行的入金接口,那么直接調(diào)用,他的賬戶就會加錢。。。,所以要進行以下安全措施

要進行簽名調(diào)用

在轉(zhuǎn)賬前用私鑰對賬戶進行簽名,然后給B銀行頒發(fā)一個公鑰,進行入金的簽名驗簽操作,來保證此請求是正常請求。

要對交易的時效性進行校驗

為了進一步保證交易的安全性,雙方要約定好一個交易的時效性,比如5 分鐘,在進行接口調(diào)用時攜帶請求時間,如果這個請求時間是5分鐘之前的進行拒絕,等待重新發(fā)起。

要進行系統(tǒng)對賬

除了簽名,雙方系統(tǒng)還要進行對賬,而對賬又分為總賬對賬和明細對賬

總賬對賬

比如查看銀行A出金總額是否等于B銀行的入金總額,對賬頻率有小時、天不等,計算公式如下

轉(zhuǎn)賬給銀行B總額==接收到銀行A的入金總額 ?
明細對賬

除了總賬要進行核對,明細賬也要進行核對,因為總賬不平后,要確保那一個賬戶出現(xiàn)問題,為了實現(xiàn)明細對賬雙方系統(tǒng)要保留對方系統(tǒng)流水號,這樣才能對應(yīng)起來,對賬頻率一般是天

要考慮并發(fā)扣款

在進行賬戶操作時,要考慮并發(fā)問題,進行加鎖處理,否則會出現(xiàn)資損,例如

  1. 訂單a和訂單 b同一時間都查詢到了,賬戶余額為1000
  2. 訂單a扣款200,訂單b扣款 100
  3. 假如訂單 a先執(zhí)行,那么賬戶余額為800,訂單 b 修改為賬戶余額為900,最終為 900,反正則為 800,都不對

具體可以查看并發(fā)扣款,如何保證結(jié)果一致性

涉及到表可能有哪些?

出金方

轉(zhuǎn)賬流水表

此表可以進行對賬,也可以進行定時任務(wù)重新發(fā)起重試

- 主鍵
- 流水號
- 用戶 ID
- 方向:轉(zhuǎn)出轉(zhuǎn)入
- 金額
- 目標方流水號
- 時間
- 狀態(tài) (等待調(diào)用、調(diào)用成功、調(diào)用失?。?
賬戶表

此表的作用不用多說,主要說下凍結(jié)資金密度,防止真正扣款時賬戶上沒錢,導致交易失敗,所以一般都是先進行凍結(jié),如果失敗則進行解凍

- 用戶 id
- 總金額
- 凍結(jié)資金
- 賬戶狀態(tài)(正常 凍結(jié))
- 時間
凍結(jié)記錄表

記錄凍結(jié)流水,防止出問題沒法追溯

- 主鍵
- 流水號
- 用戶 Id
- 金額
- 類型:凍結(jié)、解凍
- 關(guān)聯(lián)的業(yè)務(wù)流水號
- 時間

入金方

以下表為最核心的表,但不是最全的表,比如應(yīng)該還有賬賬務(wù)流水表、賬務(wù)訂單、熱點賬戶表等

渠道轉(zhuǎn)賬流水表

此表可以進行對賬,也可以進行定時任務(wù)重新發(fā)起重試

- 主鍵
- 流水號
- 渠道
- 業(yè)務(wù)方流水號 //后期冪等要根據(jù)此字段進行判斷,所以此字段+渠道號為唯一索引
- 用戶 ID
- 方向:轉(zhuǎn)出轉(zhuǎn)入
- 金額
- 時間
- 狀態(tài)  (1成功 2失?。?
賬務(wù)表
- 用戶 id
- 總金額
- 凍結(jié)資金
- 賬戶狀態(tài)(正常 凍結(jié))
- 時間

最終流程應(yīng)該是什么樣的?

流程有4個,分別為

  • 正常的轉(zhuǎn)賬流程
  • 補償轉(zhuǎn)賬流程
  • 總賬對賬流程
  • 明細對賬流程

其實這也是分布式事務(wù)最通用的實現(xiàn)方式,失敗就重試,直到最終成功,不管你是 tcc、還是其他的實現(xiàn)方式,只要出現(xiàn)異常,系統(tǒng)最終都要通過定時去重試,直到最終 一致,感興趣可以去看看 SEATA 源碼,遇到異常也是通過定時任務(wù)進行重試。

轉(zhuǎn)賬流程

轉(zhuǎn)賬補償流程

這個流程是定時任務(wù)定時發(fā)起的,查詢小于等于當前時間-指定時間,狀態(tài)為等待調(diào)用的轉(zhuǎn)賬記錄并重新發(fā)起轉(zhuǎn)賬

select * from transfer_list where   update_time <= #{queryEndDate}

總賬對賬流程

明細對賬流程

明細對賬,如果數(shù)量不大,一天天對沒問題,現(xiàn)在銀行大多數(shù)是基于這種做法,如果文件比較大,可以考慮使用Merkle樹,這里就說傳統(tǒng)的方式

直接查詢對比

這種方式最快,數(shù)據(jù)不大可以這樣搞,同時也需要對方系統(tǒng)提供接口支持

基于文件對比

這種方式也是比較常用的方式,適合數(shù)據(jù)量大的對比,一般銀行會這么做

總結(jié)

以上我們介紹了如何設(shè)計一個高可靠的系統(tǒng)轉(zhuǎn)賬,可以看到還是比較復雜的,細節(jié)很多,主要要考慮補償、安全、并發(fā)扣款幾方面,這幾方面做好才能設(shè)計一個高可靠的系統(tǒng)轉(zhuǎn)賬。

掃描下面的二維碼關(guān)注我的微信公眾帳號,在微信公眾帳號中回復?加群?即可加入到我們的技術(shù)討論群里面共同學習。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    美女被啪的视频在线观看 | 91精品蜜臀一区二区三区| 国产传媒中文字幕东京热| 日本 一区二区 在线| 91精品日本在线视频| 精品国产亚洲一区二区三区| 能在线看的视频你懂的| 久七久精品视频黄色的| 精品国产av一区二区三区不卡蜜| 亚洲国产黄色精品在线观看| 91人妻人澡人人爽人人精品| 国产精品亚洲二区三区| 98精品永久免费视频| 午夜免费精品视频在线看| 国产精品久久精品毛片| 加勒比系列一区二区在线观看| 人妻亚洲一区二区三区| 精品国模一区二区三区欧美| 中文字幕亚洲精品在线播放| 成人国产激情福利久久| 极品少妇嫩草视频在线观看| 日韩中文字幕欧美亚洲| 欧美日韩精品久久亚洲区熟妇人| 东北女人的逼操的舒服吗| 99久久国产精品免费| 九九久久精品久久久精品| 日韩高清毛片免费观看| 在线懂色一区二区三区精品| 欧美二区视频在线观看| 久久精品国产99精品亚洲| 国产精品第一香蕉视频| 91老熟妇嗷嗷叫太91| 精品国产av一区二区三区不卡蜜| 中文字幕乱码一区二区三区四区| 熟女体下毛荫荫黑森林自拍| 最近中文字幕高清中文字幕无| 草草视频福利在线观看| 日韩丝袜诱惑一区二区| 欧美日韩免费黄片观看| 99热九九热这里只有精品| 日本一级特黄大片国产|