微服務實現事務一致性實例

分布式系統架構中,分布式事務問題是一個繞不過去的挑戰。而微服務架構的流行,讓分布式事問題日益突出!

下面我們以電商購物支付流程中,在各大參與者系統中可能會遇到分布式事務問題的場景進行詳細的分析!

images/yCGMB8jPtrsxKWf5PCQBpGCeKZKhzPBb.jpg

如上圖所示,假設三大參與平臺(電商平臺、支付平臺、銀行)的系統都做了分布式系統架構拆分,按上數中的流程步驟進行分析:

1、電商平臺中創建訂單:預留庫存、預扣減積分、鎖定優惠券,此時電商平臺內各服務間會有分布式事務問題,因為此時已經要跨多個內部服務修改數據;

2、支付平臺中創建支付訂單(選銀行卡支付):查詢賬戶、查詢限制規則,符合條件的就創建支付訂單并跳轉銀行,此時不會有分布式事務問題,因為還不會跨服務改數據;

3、銀行平臺中創建交易訂單:查找賬戶、創建交易記錄、判斷賬戶余額并扣款、增加積分、通知支付平臺,此時也會有分布式事務問題(如果是服務化架構的話);

4、支付平臺收到銀行扣款結果:更改訂單狀態、給賬戶加款、給積分帳戶增加積分、生成會計分錄、通知電商平臺等,此時也會有分布式事務問題;

5、電商平臺收到支付平臺的支付結果:更改訂單狀態、扣減庫存、扣減積分、使用優惠券、增加消費積分等,系統內部各服務間調用也會遇到分布式事問題;

?

images/K4QcRFdKnbkT44AFFtzQYCAAX25FifDS.jpg

如上圖,支付平臺收到銀行扣款結果后的內部處理流程:

1、支付平臺的支付網關對銀行通知結果進行校驗,然后調用支付訂單服務執行支付訂單處理;

2、支付訂單服務根據銀行扣款結果更改支付訂單狀態;

3、調用資金賬戶服務給電商平臺的商戶賬戶加款(實際過程中可能還會有各種的成本計費;如果是余額支付,還可能是同時從用戶賬戶扣款,給商戶賬戶加款);

4、調用積分服務給用戶積分賬戶增加積分;

5、調用會計服務向會計(財務)系統寫進交易原始憑證生成會計分錄;

6、調用通知服務將支付處理結果通知電商平臺;

?

images/b387t8iM6nsBkNfbztBABaCRChTWc3Bd.jpg

如上圖,把支付系統中的銀行扣款成功回調處理流程提取出來,對應的分布式事務問題的代碼場景:

/** 支付訂單處理 **/

@Transactional(rollbackFor = Exception.class)

public void completeOrder() {

orderDao.update();? // 訂單服務本地更新訂單狀態

accountService.update(); ?// 調用資金賬戶服務給資金帳戶加款

pointService.update();? // 調用積分服務給積分帳戶增加積分

accountingService.insert();? // 調用會計服務向會計系統寫入會計原始憑證

merchantNotifyService.notify();? // 調用商戶通知服務向商戶發送支付結果通知

}

?

本地事務控制還可行嗎?

?

以上分布式事務問題,需要多種分布式事務解決方案來進行處理。

?

訂單處理:本地事務

?

資金賬戶加款、積分賬戶增加積分:TCC型事務(或兩階段提交型事務),實時性要求比較高,數據必須可靠。


?

會計記賬:異步確保型事務(基于可靠消息的最終一致性,可以異步,但數據絕對不能丟,而且一定要記賬成功)

?

商戶通知:最大努力通知型事務(按規律進行通知,不保證數據一定能通知成功,但會提供可查詢操作接口進行核對)

?

針對上以分布式事務問題,龍果學院(http://www.roncoo.com)的《微服務架構的分布式事務解決方案》視頻教程中將提供詳細完整的方案供大家學習和應用。

點擊鏈接加入群【分布式微服務架構-2群】:https://jq.qq.com/?_wv=1027&k=46KFCik

?

?

龍果支付系統(開源版)

face/2at3STmQikTePfpe6FRDEc3TRBeTw6NY.jpg

開源中國地址:http://www.oschina.net/p/roncoo-pay
?http://git.oschina.net/roncoocom/roncoo-pay
GitHub地址:https://github.com/roncoo/roncoo-pay
在線支付演示:http://demo.pay.roncoo.com
后臺運營管理:http://demo.pay.roncoo.com/boss

點擊鏈接加入群【龍果支付系統】:https://jq.qq.com/?_wv=1027&k=46KFTAA

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278359.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用ama0實現串口通信_“ AMA”是什么意思,以及如何使用它?

使用ama0實現串口通信BigTunaOnline/ShutterstockBigTunaOnline / ShutterstockThe term “AMA” is a staple of Reddit, and it has spread to the far corners of the internet. But what does AMA mean, who came up with the word, and how do you use it? “ AMA”一詞是…

火狐 url 亂碼_在Firefox中查看URL作為工具提示

火狐 url 亂碼Would you like a way to view link URLs wherever you mouse is located in a webpage rather than using the Status Bar? Now you can do so very easily with the URL Tooltip extension for Firefox. 您是否想通過一種方式而不是使用狀態欄來查看鏈接URL&am…

Juniper SRX防火墻批量導入set格式配置

Juniper SRX防火墻批量導入set格式配置 SRX在進行大量配置時可能會出現一些小問題,可以使用load set terminal命令導入大量set格式的配置。 root# load set terminal[Type ^D at a new line to end input] 輸入配置set applications application tcp-1521 protocol …

java虛擬機之內存分配

Java 的自動內存管理主要是針對對象內存的回收和對象內存的分配。同時,Java 自動內存管理最核心的功能是 堆 內存中對象的分配與回收。 JDK1.8之前的堆內存示意圖: 從上圖可以看出堆內存分為新生代、老年代和永久代。新生代又被進一步分為:Ed…

知道無人駕駛的網絡安全有多重要嗎?英國政府都決定插手開發了

這樣的策略也被解讀為,英國政府希望借此搶占未來無人駕駛汽車研發的先機。 相信看過下午我們有關速8中黑科技的文章的朋友們,一定對有關車輛網絡安全印象深刻,也足以見得未來無人駕駛時代的網絡安全問題有多重要。所以,英國政府決…

linux uniq命令_如何在Linux上使用uniq命令

linux uniq命令Fatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / ShutterstockThe Linux uniq command whips through your text files looking for unique or duplicate lines. In this guide, we cover its versatility and features, as well as how you c…

解決 display 和 transition 沖突的問題

問題: 既需要“顯示、隱藏”’效果,也需要動畫效果。此時使用了xxx.style.display "none / block" 之后,我們發現 transition 動畫效果就沒有了。 解決辦法一:用定時器(這種方法并不好) btn2.on…

win10任務欄和開始菜單_如何將網站固定到Windows 10任務欄或開始菜單

win10任務欄和開始菜單Having quick access to frequently-used or hard to remember websites can save you time and frustration. Whether you use Chrome, Firefox, or Edge, you can add a shortcut to any site right to your Windows 10 taskbar or Start menu. 快速訪問…

智能家居的尷尬:概念比用戶火

智能家居概念的走俏與用戶的接受程度成鮮明的對比,如何才能撬開這個市場,這是整個行業都需要思考的問題。 追溯起源,智能家居已經有20年的歷史,但由于技術缺陷、價格昂貴,實用性差、安裝復雜及產品同質化嚴重等原因&a…

WEB_矛盾

題目鏈接:http://123.206.87.240:8002/get/index1.php 題解: 打開題目,看題目信息,本題首先要弄清楚 is_numeric() 函數的作用 作用如下圖: 即想要輸出flag,num既不能是數字字符,不能為數1&…

如何在Windows上解決藍牙問題

Bluetooth gives you the freedom to move without a tether, but it isn’t always the most reliable way to use wireless devices. If you’re having trouble with Bluetooth on your Windows machine, you can follow the steps below to troubleshoot it. 藍牙使您可以不…

Multicast注冊中心

1234提供方啟動時廣播自己的地址。   消費方啟動時廣播訂閱請求。   提供方收到訂閱請求時&#xff0c;單播自己的地址給訂閱者&#xff0c;如果設置了unicastfalse&#xff0c;則廣播給訂閱者。   消費方收到提供方地址時&#xff0c;連接該地址進行RPC調用。 <du…

阻止a鏈接跳轉方法總結

總結下a標簽阻止默認行為的幾種簡單方法(1) <a href"javascript:void(0);" > 點我 </a> onclick方法負責執行js函數&#xff0c;而void是一個操作符&#xff0c;void(0)返回undefined&#xff0c;地址不發生跳轉。 <a href"javascript:;&qu…

美味奇緣_輕松訪問和管理您的美味書簽

美味奇緣Looking for an easy way to access and manage your Delicious Bookmarks collection with minimal UI impact? Now you can with SimpleDelicious for Firefox. 是否正在尋找一種簡單的方法來訪問和管理您的Delicious Bookmarks收藏&#xff0c;而對UI的影響最小&am…

談談如何使用Netty開發實現高性能的RPC服務器

RPC&#xff08;Remote Procedure Call Protocol&#xff09;遠程過程調用協議&#xff0c;它是一種通過網絡&#xff0c;從遠程計算機程序上請求服務&#xff0c;而不必了解底層網絡技術的協議。說的再直白一點&#xff0c;就是客戶端在不必知道調用細節的前提之下&#xff0c…

寒假萬惡之源3:抓老鼠啊~虧了還是賺了?

1.代碼&#xff1a; #include<iostream>using namespace std;int main(){ char a/*操作*/; int i/*計數工具*/,b0/*老鼠會開心幾天*/; int e/*正常的來*/,f/*老鼠會悲傷幾天*/; int c1/*老鼠來不來*/,d0/*奶酪數目*/,g0/*老鼠數目*/; for (i1;;i) { …

在Firefox中結合Wolfram Alpha和Google搜索結果

Do you wish there was a way to combine all that Wolfram Alpha and Google goodness together when you search for something? Now you can with the Wolfram Alpha Google extension for Firefox. 您是否希望有一種方法可以在搜索某些內容時將Wolfram Alpha和Google的所有…

Docker容器中開始.NETCore之路

一、引言  開始寫這篇博客前&#xff0c;已經嘗試練習過好多次Docker環境安裝,.Net Core環境安裝了&#xff0c;在這里替騰訊云做一個推廣,假如我們想學習、練手.net core 或是Docker卻苦于沒有開發環境&#xff0c;服務器也不想買&#xff0c;那么我們可以使用騰訊云提供的開…

分布式的數據一致性

一.前序 數據的一致性和系統的性能是每個分布式系統都需要考慮和權衡的問題。一致性的級別如下&#xff1a;1.強一致性這種一致性級別是最符合用戶直覺的&#xff0c;它要求系統寫入什么&#xff0c;讀出來的也會是什么&#xff0c;用戶體驗好&#xff0c;但實現起來往往對系統…

kompozer如何啟動_使用KompoZer創建網站

kompozer如何啟動Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在尋找一種輕松創建自己的網頁的方法&#…