淺談多用戶商城Himall的搶購(gòu)設(shè)計(jì)
現(xiàn)在的互聯(lián)網(wǎng)用戶越來(lái)越很多,互聯(lián)網(wǎng)服務(wù)的高并發(fā)的場(chǎng)景也變得越來(lái)越多。Himall多用戶商城系統(tǒng)限時(shí)購(gòu)功能則是一個(gè)典型的短時(shí)間高并發(fā)搶購(gòu)場(chǎng)景。雖然我們解決問(wèn)題的具體技術(shù)方案可能千差萬(wàn)別,但是遇到的挑戰(zhàn)卻是相似的,因此解決問(wèn)題的思路也異曲同工。
什么是限時(shí)購(gòu)?限時(shí)購(gòu)跟大部分電商搶購(gòu)業(yè)務(wù)相同,即限時(shí)且限量搶購(gòu)。不管小米還是華為,或是其它電商公司,對(duì)搶購(gòu)業(yè)務(wù)運(yùn)營(yíng)總是最為火爆,每發(fā)一款新品,都限量發(fā)售,每次搞的大家心里癢癢的。搶購(gòu)太火爆有時(shí)引起站點(diǎn)打不開(kāi),崩潰了;還有就是賣出的數(shù)量比設(shè)置可購(gòu)買(mǎi)的數(shù)量要多。那么問(wèn)題來(lái)了:我們?nèi)绾卧谠O(shè)計(jì)中如何解決。通常我們需要從設(shè)計(jì)中考慮以下問(wèn)題:
針對(duì)高并發(fā),我們?nèi)绾谓怦詈蠖藟毫?,特別是數(shù)據(jù)庫(kù)的壓力。
如何保障庫(kù)存可靠。
我們可以試想一下?lián)屬?gòu)時(shí)哪些頁(yè)面會(huì)請(qǐng)求最多。搶購(gòu)之前人們通常會(huì)通常刷頁(yè)面等待,一般在搶購(gòu)開(kāi)始前一點(diǎn)時(shí)間會(huì)頻繁刷新?lián)屬?gòu)倒數(shù)的頁(yè)面或購(gòu)買(mǎi)詳情頁(yè)面。搶購(gòu)開(kāi)始以后前一段時(shí)間下單的人會(huì)很多。付款并發(fā)量相對(duì)較小,通常訂單在下單后幾小時(shí)內(nèi)都能付款,緩解了并發(fā)壓力。針對(duì)以上問(wèn)題及場(chǎng)景,我們做了以下處理,增加限時(shí)購(gòu)緩存訂單系統(tǒng),去支持限時(shí)購(gòu)高并發(fā)處理,并保持限時(shí)購(gòu)業(yè)務(wù)的可靠性。
Hiamll在2.3版本做了如下改進(jìn):
1.引入Redis做緩存。
2.在用戶搶購(gòu)開(kāi)始前頻繁刷頁(yè)面時(shí),系統(tǒng)只從緩存中取商品數(shù)據(jù),解耦了數(shù)據(jù)庫(kù)查詢的壓力。
3.用戶下單時(shí)系統(tǒng)只把訂單數(shù)據(jù)存入訂單緩存隊(duì)列后然后告訴用戶你的訂單正在處理。然后由Redis Pub/Sub服務(wù)通知Web服務(wù)器,服務(wù)器把庫(kù)存訂單進(jìn)行串行化處理,解耦數(shù)據(jù)庫(kù)并發(fā)下單壓力,保證庫(kù)存可靠。
4.支付功能保持原來(lái)實(shí)現(xiàn)不變。
具體實(shí)現(xiàn)如下:
買(mǎi)家前端查詢限時(shí)購(gòu)商品數(shù)據(jù)時(shí)只走緩存。
賣家后臺(tái)更新限時(shí)購(gòu)或庫(kù)存信息時(shí)需同步更新數(shù)據(jù)庫(kù)及緩存。
系統(tǒng)為每個(gè)正在開(kāi)賣的限時(shí)購(gòu)商品庫(kù)存創(chuàng)建鎖,買(mǎi)家對(duì)某庫(kù)存下單時(shí)鎖住該庫(kù)存的下單操作,每一個(gè)商品庫(kù)存只允許一個(gè)會(huì)員下單,下單的訂單數(shù)據(jù)直接加入訂單緩存后告訴買(mǎi)家[您的訂單正在處理,請(qǐng)稍等]。然后通過(guò)Redis Pub/Sub服務(wù)通知服務(wù)器處理訂單,將訂單按庫(kù)存串行化處理,訂單處理完成后,則更新限時(shí)購(gòu)訂單緩存的處理狀態(tài)。
買(mǎi)家得知訂單正在處理后,則不斷查詢緩存的訂單處理狀態(tài)。直到獲取訂單處理結(jié)果,下單成功則進(jìn)行支付頁(yè)面,失敗則提示失敗原因并引導(dǎo)買(mǎi)家重新下單。
最后就是在Web服務(wù)啟動(dòng)時(shí),需要對(duì)限時(shí)購(gòu)訂單緩存系統(tǒng)初始化,把商品數(shù)據(jù)加入緩存中,并處理上次未處理完成的訂單。
總結(jié):無(wú)論你用什么方式處理性能問(wèn)題,性能優(yōu)化的核心思想是分治。這種思想在日常生活中無(wú)處不在,大家都知道一次做不了的事,就分多次做,這就是分治。
相關(guān)推薦