下單&庫存扣減項(xiàng)目實(shí)戰(zhàn)

風(fēng)和日麗的一天遗菠,接到產(chǎn)品的一個(gè)需求:直播間需要增加主播服務(wù)套餐購買的能力,每個(gè)套餐包含n次連麥服務(wù)华蜒;用戶購買之后主播給用戶提供連麥服務(wù)辙纬,每完成一次連麥服務(wù)扣減一次。
下單和庫存扣減是經(jīng)典的后端入門項(xiàng)目叭喜,我們這里主要針對(duì)項(xiàng)目中的難點(diǎn)以及一些注意事項(xiàng)進(jìn)行詳細(xì)闡述贺拣。首先進(jìn)行簡(jiǎn)單的需求拆解,項(xiàng)目的主要模塊包括支付捂蕴、訂單纵柿、服務(wù)記錄等,我們將從這幾個(gè)模塊來針對(duì)性分析启绰。

一、下單

首先沟使,我們會(huì)給用戶展示一個(gè)商品列表頁委可,包含商品的簡(jiǎn)單介紹和商品id、商品價(jià)格等腊嗡。用戶選定某種商品之后着倾,調(diào)起購買接口,傳入商品價(jià)格和商品id燕少。

商品價(jià)格

這里注意卡者,雖然購買接口需要傳入商品的實(shí)際價(jià)格,但實(shí)際下單時(shí)商品的價(jià)格應(yīng)該以后端維護(hù)的價(jià)格為準(zhǔn)客们,主要是防止有人修改接口傳入的價(jià)格導(dǎo)致購買金額和實(shí)際金額不符崇决。另外,一般需要校驗(yàn)接口傳入價(jià)格和后端維護(hù)的價(jià)格是否一致底挫,如果不一致恒傻,返回錯(cuò)誤提示,類似“商品金額發(fā)生變化建邓,請(qǐng)刷新后重試”盈厘;如果一致,走后續(xù)的下單流程官边。

支付&訂單數(shù)據(jù)的一致性

支付系統(tǒng)的數(shù)據(jù)庫維護(hù)在支付側(cè)沸手,訂單數(shù)據(jù)維護(hù)在我們這一側(cè)外遇,屬于兩個(gè)不同的服務(wù)。不同于傳統(tǒng)的一個(gè)數(shù)據(jù)庫使用本地事務(wù)契吉,要保證兩個(gè)服務(wù)的數(shù)據(jù)一致性跳仿,我們先引入分布式事務(wù)的概念。

常用的分布式事務(wù)一致性解決方案包含二階段和三階段提交栅隐,但傳統(tǒng)的分布式事務(wù)不適用于微服務(wù)下的事務(wù)管理塔嬉,主要有以下幾點(diǎn)原因:

1、微服務(wù)之間無法直接進(jìn)行數(shù)據(jù)訪問租悄,通常通過rpc或者api進(jìn)行數(shù)據(jù)訪問谨究,無法使用統(tǒng)一的事務(wù)管理器管理RM。

2泣棋、不同微服務(wù)使用的數(shù)據(jù)源類型可能不同胶哲,可能包含NoSql等不支持事務(wù)的數(shù)據(jù)庫;

3潭辈、即使微服務(wù)的數(shù)據(jù)源都支持事務(wù)鸯屿,用一個(gè)大事務(wù)將微服務(wù)管理起來,大事務(wù)維持的時(shí)間較長(zhǎng)把敢,影響系統(tǒng)性能寄摆。

我們此處的支付和訂單采用業(yè)務(wù)補(bǔ)償模式,業(yè)務(wù)補(bǔ)償模式是指業(yè)務(wù)在調(diào)用時(shí)正常提交修赞,當(dāng)一個(gè)服務(wù)失敗時(shí)婶恼,對(duì)其依賴的所有上游服務(wù)都進(jìn)行業(yè)務(wù)補(bǔ)償操作。這種方案可以達(dá)到最終一致性的方案柏副,但此方案的實(shí)時(shí)性較差勾邦,但對(duì)于一般的支付場(chǎng)景的話可以使用。

我們這里采用的是附錄2中的重試模式割择,對(duì)于一條鏈路上的操作眷篇,通過定時(shí)任務(wù),對(duì)每個(gè)環(huán)節(jié)不斷重試直至成功為止荔泳;對(duì)應(yīng)到我們的流程里就是下單操作蕉饼。對(duì)于需要重試的接口,需要做成冪等性换可。

二椎椰、庫存扣減

我們上架的主播服務(wù)套餐主要是n次主播連麥服務(wù),每次用戶購買完成后沾鳄,可享受n次連麥服務(wù)慨飘,這里就涉及到一個(gè)庫存扣減的問題。我們需要保證主播的服務(wù)次數(shù)不多于用戶的付費(fèi)次數(shù)。

鑒于我們的服務(wù)qps比較小瓤的,我們這里直接使用數(shù)據(jù)庫行鎖+CAS來實(shí)現(xiàn)簡(jiǎn)單的庫存扣減不超賣的能力休弃。

數(shù)據(jù)庫行鎖是指在sql里指定庫存>0時(shí)再進(jìn)行update操作;CAS主要是指在sql里指定初始庫存圈膏,以初始庫存為update的查詢條件塔猾,如果當(dāng)前庫存等于初始庫存,再執(zhí)行update操作稽坤。我們這里只簡(jiǎn)單使用了數(shù)據(jù)庫行鎖指定條件來保證丈甸,CAS的操作暫無必要。

三尿褪、主播服務(wù)能力的限制

// todo 未完待續(xù) 等待繼續(xù)補(bǔ)充


附錄:

1.?為什么每個(gè)面試官都和數(shù)據(jù)一致性過不去睦擂? https://juejin.cn/post/6844904162115878919?searchId=2023091914554426EA38C03A317997C38D

2. 聊聊 分布式系統(tǒng) 中的補(bǔ)償機(jī)制設(shè)計(jì)問題?https://blog.csdn.net/2301_78526383/article/details/131348926

3.?基于MySQL 和 Redis 扣減庫存的方法?https://juejin.cn/post/7230042979549478970?searchId=20230919202136A430C03E43F9E21E4C3D

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杖玲,隨后出現(xiàn)的幾起案子顿仇,更是在濱河造成了極大的恐慌,老刑警劉巖摆马,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臼闻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡囤采,警方通過查閱死者的電腦和手機(jī)述呐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕉毯,“玉大人市埋,你說我怎么就攤上這事∷×酰” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵抒倚,是天一觀的道長(zhǎng)褐着。 經(jīng)常有香客問我,道長(zhǎng)托呕,這世上最難降的妖魔是什么含蓉? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮项郊,結(jié)果婚禮上馅扣,老公的妹妹穿的比我還像新娘。我一直安慰自己着降,他們只是感情好差油,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般蓄喇。 火紅的嫁衣襯著肌膚如雪发侵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天妆偏,我揣著相機(jī)與錄音刃鳄,去河邊找鬼。 笑死钱骂,一個(gè)胖子當(dāng)著我的面吹牛叔锐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播见秽,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼愉烙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了张吉?” 一聲冷哼從身側(cè)響起齿梁,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肮蛹,沒想到半個(gè)月后勺择,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伦忠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年省核,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昆码。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡气忠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赋咽,到底是詐尸還是另有隱情旧噪,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布脓匿,位于F島的核電站淘钟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陪毡。R本人自食惡果不足惜米母,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毡琉。 院中可真熱鬧铁瞒,春花似錦、人聲如沸桅滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜂绎,卻和暖如春栅表,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背师枣。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工怪瓶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人践美。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓洗贰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親陨倡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敛滋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容