期望消失時,恐懼就產(chǎn)生。
????????????????????——格拉西安
大綱

案例介紹
1.業(yè)務(wù)分析
模擬電商網(wǎng)站購物場景中的【下單】和【支付】業(yè)務(wù)

(1)下單
用戶請求訂單系統(tǒng)下單
訂單系統(tǒng)通過RPC調(diào)用訂單服務(wù)下單
訂單服務(wù)調(diào)用調(diào)用庫存服務(wù),扣減庫存
訂單服務(wù)調(diào)用優(yōu)惠券服務(wù),扣減優(yōu)惠券
訂單支付完成后確認訂單
(2)支付
用戶請求支付系統(tǒng)
支付系統(tǒng)調(diào)用第三方支付平臺API進行發(fā)起支付流程
用戶通過第三方支付平臺支付成功后,第三方支付平臺回調(diào)通知支付系統(tǒng)
支付系統(tǒng)調(diào)用訂單服務(wù)確認訂單
問題分析
1.分布式系統(tǒng)宕機問題
整個系統(tǒng)是分布式部署,有訂單系統(tǒng)、商品系統(tǒng)、會員系統(tǒng)。三個系統(tǒng)通過RPC調(diào)用完成整個下單流程。RPC調(diào)用會導(dǎo)致下單中各系統(tǒng)耦合在一起,假如會員系統(tǒng)宕機,會導(dǎo)致下單流程的不可用。
如何異步解耦:
利用RocketMQ,訂單系統(tǒng)在下單后,作為生產(chǎn)者把“下單消息”寫入MQ,商品系統(tǒng)與會員系統(tǒng)作為消費者消費MQ中的“下單消息”。這樣可以達到異步解耦的目的,只要訂單系統(tǒng)正常,對于用戶來說下單業(yè)務(wù)都可以正常進行。
2.數(shù)據(jù)完整性問題
用戶提交訂單后,扣減庫存成功、扣減優(yōu)惠券成功,但是在確認訂單操作失?。ū热纾褐Ц妒。敲淳托枰獙齑?、優(yōu)惠券進行回退。
如何保證數(shù)據(jù)的完整性?
在收到確認訂單失敗通知后,向MQ發(fā)送“確認失敗消息”
商品系統(tǒng)與會員系統(tǒng)作為消費者監(jiān)聽“確認失敗消息”,進行對應(yīng)業(yè)務(wù)的回退。
3.無效訂單、同行攻擊!
用戶通過第三方支付平臺(支付寶、微信)支付,假如下了訂單,過了很久還沒支付,那么這個訂單應(yīng)該取消,所以這個地方涉及到限時訂單場景,系統(tǒng)在15分鐘之內(nèi)沒有支付成功,則需要取消訂單,同時回退庫存與優(yōu)惠券
4.秒殺、搶購高峰流程沖擊
項目代碼介紹
1.項目工程



2.數(shù)據(jù)庫

(1)訂單表

(2)商品表

(3)用戶表

(4)優(yōu)惠券表

3.框架及技術(shù)
? ??整體項目使用SpringBoot搭建,整合了Mybatis,Maven依賴如下:

????SpringBoot整合RocketMQ,同時使用gson作為MQ發(fā)送和消費的序列工具

另外使用mybaits-gengerator逆向工程針對數(shù)據(jù)表生成CURD持久層代碼


鏈接:?https://pan.baidu.com/s/1gCOLPI76hu1IJwLJnVOdfg? 提取碼: rc2r?
我是嬈疆_蚩夢,讓堅持成為一種習(xí)慣,感謝各位大佬的:點贊、收藏和評論,我們下期見!