自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高并發(fā)秒殺系統(tǒng)如何實(shí)現(xiàn)正確的扣減庫(kù)存?

開(kāi)發(fā) 架構(gòu)
為了方便大家的理解,我們先來(lái)討論下扣減庫(kù)存有哪幾種方式??傮w來(lái)說(shuō),扣減庫(kù)存可以分為:下單減庫(kù)存、付款減庫(kù)存和預(yù)扣庫(kù)存三種。

[[419555]]

在【精通高并發(fā)系列】的《實(shí)踐出真知:全網(wǎng)最強(qiáng)秒殺系統(tǒng)架構(gòu)解密!》一文中,冰河詳細(xì)的闡述了高并發(fā)秒殺系統(tǒng)的架構(gòu)設(shè)計(jì),也簡(jiǎn)單提到了如何扣減商品的庫(kù)存。

也許不少小伙伴會(huì)問(wèn):扣減商品的庫(kù)存很簡(jiǎn)單啊,用戶下單的時(shí)候扣除對(duì)應(yīng)的商品庫(kù)存不就行了嗎?有那么難嗎?

確實(shí),理論上就是用戶下單后,減去商品的庫(kù)存就完事了。但是,如果你的系統(tǒng)流量很大,并發(fā)度非常高,比如淘寶的雙十一,有一款爆款商品參加了活動(dòng),庫(kù)存只有1000件,有幾十萬(wàn)上百萬(wàn)用戶搶購(gòu),商品售完1000件為止,一件不能多,一件也不能少。你還會(huì)覺(jué)得簡(jiǎn)單嗎?搞不好就會(huì)出現(xiàn)“超賣(mài)”的情況,后果就會(huì)很?chē)?yán)重了。

今天,我們就一起來(lái)簡(jiǎn)單討論下在高并發(fā)秒殺系統(tǒng)中,如何正確的扣減商品的庫(kù)存。

扣減庫(kù)存的方式

為了方便大家的理解,我們先來(lái)討論下扣減庫(kù)存有哪幾種方式。總體來(lái)說(shuō),扣減庫(kù)存可以分為:下單減庫(kù)存、付款減庫(kù)存和預(yù)扣庫(kù)存三種。

下單減庫(kù)存

我們先來(lái)說(shuō)說(shuō)下單扣減庫(kù)存的方式,這種方式很好理解,就是用戶提交訂單后,在商品的總庫(kù)存中減去用戶購(gòu)買(mǎi)的商品數(shù)量。這種減庫(kù)存的方式是最簡(jiǎn)單的,也是對(duì)商品庫(kù)存控制的最準(zhǔn)確的。但是,經(jīng)常會(huì)碰到的問(wèn)題就是:用戶提交訂單之后,未必就會(huì)付款。

這就會(huì)存在一個(gè)問(wèn)題:惡意刷單。試想,你作為一個(gè)商家參與了淘寶的雙十一秒殺活動(dòng),如果淘寶平臺(tái)扣減庫(kù)存的方式為下單減庫(kù)存,你的競(jìng)爭(zhēng)對(duì)手得知你參與了雙十一秒殺活動(dòng),他們通過(guò)惡意下單的方式將你參與秒殺的商品全部下單,讓你的庫(kù)存減為0,但是他們并不會(huì)付款。那么你參與雙十一秒殺的商品就不能正常售賣(mài)了。

此時(shí)的你會(huì)是什么樣的心情呢?這就是下單減庫(kù)存存在的問(wèn)題。

付款減庫(kù)存

既然下單減庫(kù)存存在問(wèn)題,我們?cè)賮?lái)看看付款減庫(kù)存。庫(kù)存減庫(kù)存就是用戶提交訂單后,并不會(huì)立刻扣減商品的庫(kù)存。而是等到用戶真正付款后才會(huì)扣減庫(kù)存。這種方式經(jīng)常遇到的問(wèn)題就是:用戶明明下單成功了,卻不能付款。 原因就是用戶下單時(shí),不會(huì)扣減庫(kù)存,而是等到真正付款后才會(huì)扣減庫(kù)存,當(dāng)某個(gè)用戶下單后,執(zhí)行付款操作時(shí),相應(yīng)的商品可能已經(jīng)被其他人買(mǎi)走了。

付款減庫(kù)存有可能會(huì)造成另一個(gè)更為嚴(yán)重的后果:**庫(kù)存超賣(mài)。**這主要就是用戶提交訂單的時(shí)候不會(huì)扣減庫(kù)存,造成用戶成功下單的訂單數(shù)量可能會(huì)遠(yuǎn)遠(yuǎn)大于商品的庫(kù)存數(shù)量。

預(yù)扣減庫(kù)存

預(yù)扣減庫(kù)存比起前面兩種扣減庫(kù)存的方式,相對(duì)來(lái)說(shuō)復(fù)雜一些。用戶提交訂單后,為用戶預(yù)留購(gòu)買(mǎi)數(shù)量的商品庫(kù)存,例如預(yù)留10分鐘,超過(guò)10分鐘,則釋放為用戶預(yù)留的庫(kù)存,其他的用戶可以繼續(xù)下單購(gòu)買(mǎi)。

用戶下單預(yù)扣減庫(kù)存之后,在付款時(shí),系統(tǒng)會(huì)檢驗(yàn)對(duì)應(yīng)的訂單是否存在有效的預(yù)留庫(kù)存,如果存在,則真正扣減庫(kù)存并付款。如果不存在,則會(huì)再次嘗試預(yù)扣減庫(kù)存。如果庫(kù)存不足,則不再付款。如果預(yù)扣減庫(kù)存成功,則真正扣減庫(kù)存并付款。

那么,預(yù)扣減庫(kù)存是否能夠解決前面兩種扣減庫(kù)存的問(wèn)題呢?

答案是,并沒(méi)有徹底解決。

例如,對(duì)惡意下單來(lái)說(shuō),雖然將有效的付款時(shí)間控制在一小段時(shí)間內(nèi),但是惡意用戶完全有可能在一段時(shí)間后再次下單。也有可能會(huì)在開(kāi)始下單時(shí),就會(huì)一次性選擇所有的庫(kù)存下單。仍然不能徹底解決問(wèn)題。

那有沒(méi)有什么辦法解決這些問(wèn)題呢?我們繼續(xù)往下看。

扣減庫(kù)存問(wèn)題的解決

針對(duì)惡意用戶下單的情況,我這里簡(jiǎn)單羅列了如下幾種解決方案:

(1)我們可以為經(jīng)常提交訂單之后不付款的用戶添加對(duì)應(yīng)的標(biāo)簽,當(dāng)這些用戶下單時(shí),進(jìn)行特殊處理,例如不扣減庫(kù)存等(具體可以根據(jù)需求確定)。

(2)在秒殺期間,為商品設(shè)置同一個(gè)人的最大購(gòu)買(mǎi)件數(shù),比如最多購(gòu)買(mǎi)2件。

(3)對(duì)不付款重復(fù)下單的操作進(jìn)行限制,例如,對(duì)同一商品下單時(shí),首先校驗(yàn)當(dāng)前用戶是否存在未付款的訂單,并且訂單中的商品與再次下單的商品是同一款商品,則提示先讓用戶付款后再提交訂單等。

針對(duì)庫(kù)存超賣(mài)的情況,我這里簡(jiǎn)單羅列了如下幾種解決方案:

(1)通過(guò)補(bǔ)貨解決。

(2)用戶下單時(shí)提示庫(kù)存不足。

秒殺系統(tǒng)如何扣減庫(kù)存?

也許有不少小伙伴會(huì)說(shuō)高并發(fā)秒殺系統(tǒng)會(huì)采用預(yù)扣減庫(kù)存的方式,其實(shí),在真正的高并發(fā)、大流量場(chǎng)景下,大部分秒殺系統(tǒng)會(huì)采用 下單減庫(kù)存 的方式。

在下單扣減庫(kù)存的業(yè)務(wù)場(chǎng)景中,需要保證大流量、高并發(fā)下商品的庫(kù)存不能為負(fù)。

這里,我們可以通過(guò)如下方案解決商品庫(kù)存不能為負(fù)的問(wèn)題、

(1)在扣減庫(kù)存后,通過(guò)在應(yīng)用程序的事務(wù)中判斷商品庫(kù)存是否為負(fù)數(shù),如果變成了負(fù)數(shù),則回滾事務(wù)不再扣減庫(kù)存。

(2)在數(shù)據(jù)庫(kù)中設(shè)置庫(kù)存字段為無(wú)符號(hào)整數(shù),從數(shù)據(jù)庫(kù)層面保證無(wú)法出現(xiàn)負(fù)數(shù)的情況。 

說(shuō)了這么多,原來(lái)在高并發(fā)、大流量的秒殺系統(tǒng)中,實(shí)現(xiàn)正確的扣減商品的庫(kù)存確實(shí)不是一件容易的事情呀!

責(zé)任編輯:武曉燕 來(lái)源: 冰河技術(shù)
相關(guān)推薦

2024-09-10 10:42:27

2022-09-19 09:49:17

MCube網(wǎng)絡(luò)引擎

2018-09-15 04:59:01

2025-03-11 08:36:52

高并發(fā)場(chǎng)景性能

2025-02-20 00:01:00

2024-09-23 08:03:13

2020-10-14 07:20:53

高并發(fā)

2024-10-10 08:32:28

Redis高并發(fā)Lua

2024-07-03 11:01:55

2024-08-01 11:38:40

2020-04-22 10:43:49

高并發(fā)數(shù)據(jù)阿里巴巴

2021-06-09 18:52:05

方案設(shè)計(jì)庫(kù)存數(shù)

2025-04-08 05:00:00

2019-10-30 16:54:08

golangredis數(shù)據(jù)庫(kù)

2020-04-13 08:33:39

高并發(fā)秒殺系統(tǒng)

2025-03-10 09:20:00

庫(kù)存異常Redis架構(gòu)

2025-01-20 00:00:03

高并發(fā)秒殺業(yè)務(wù)

2024-01-31 13:02:00

高并發(fā)熱點(diǎn)散列庫(kù)存分桶

2023-11-27 18:07:05

Go并發(fā)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)