摘要:通過對秒殺系統(tǒng)的業(yè)務(wù)及性能需求進(jìn)行分析,著重考慮系統(tǒng)的可靠性和可擴(kuò)展性,提出一種適用于互聯(lián)網(wǎng)秒殺應(yīng)用的業(yè)務(wù)系統(tǒng)框架,主要包括商品維護(hù)、商品展示、庫存管理和訂單處理4大功能模塊,并引入緩存技術(shù)對數(shù)據(jù)庫讀寫邏輯進(jìn)行優(yōu)化,以達(dá)到系統(tǒng)高并發(fā)性和高可用性的設(shè)計(jì)目標(biāo)。
關(guān)鍵詞關(guān)鍵詞:電子商務(wù);秒殺;緩存;高并發(fā)
DOIDOI:10.11907/rjdk.143917
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2015)002009703
作者簡介作者簡介:邵斐(1982-),男,上海人,碩士,上海清算所工程師,研究方向?yàn)榛ヂ?lián)網(wǎng)電子商務(wù)相關(guān)應(yīng)用系統(tǒng)。
0引言
隨著電子商務(wù)的不斷發(fā)展,秒殺\[1\]作為一種嶄新的互聯(lián)網(wǎng)營銷模式也日益受到關(guān)注。由于秒殺這種網(wǎng)絡(luò)促銷行為能夠在短時間內(nèi)聚集大量人氣,所以對企業(yè)具有極高的商業(yè)價值。但也由于很多電子商務(wù)平臺\[2\]對于秒殺系統(tǒng)本身設(shè)計(jì)上的不足,使得在推廣秒殺活動時,無法有效應(yīng)付因活動時激增的用戶訪問量導(dǎo)致的平臺運(yùn)行不穩(wěn)定問題,如訪問超時、響應(yīng)速度慢,甚至服務(wù)癱瘓等。為避免企業(yè)經(jīng)濟(jì)損失,挽回用戶信心,設(shè)計(jì)一套專門的秒殺系統(tǒng)成為各家電商平臺需要重點(diǎn)解決的問題。然而目前學(xué)術(shù)界專門論述如何建設(shè)電商領(lǐng)域的秒殺類應(yīng)用系統(tǒng)的相關(guān)文獻(xiàn)較少,因此本文從分析秒殺應(yīng)用的特點(diǎn)出發(fā),對如何構(gòu)建具有實(shí)用性的秒殺系統(tǒng)進(jìn)行了探索。
1秒殺系統(tǒng)框架設(shè)計(jì)
1.1秒殺系統(tǒng)分析
從電商平臺的角度,秒殺類商品總是在某個特定的時間段內(nèi)進(jìn)行銷售,有極強(qiáng)的時效性;從用戶的角度,為了成功獲得商品,往往會集中在秒殺活動開始時的一個較短時間內(nèi)完成商品購買的整個流程,即搶購式的購買方法,因此導(dǎo)致了秒殺系統(tǒng)的并發(fā)訪問是一種突發(fā)的高并發(fā)。另外秒殺歸根到底是電商的一種促銷手段,這種以超低價吸引買家的性質(zhì)決定了對應(yīng)的秒殺商品的庫存數(shù)往往會控制在一個很少的量級單位。通過以上分析可以得出,要構(gòu)建一套實(shí)用合理的秒殺業(yè)務(wù)系統(tǒng)需要從3個方面入手:①如何提供快速有效的商品信息展示;②如何做到商品庫存實(shí)時更新;③如何實(shí)現(xiàn)穩(wěn)定可靠的訂單處理。
1.2秒殺系統(tǒng)功能設(shè)計(jì)
通常情況下高并發(fā)類型的系統(tǒng)\[3\]性能瓶頸往往集中在數(shù)據(jù)庫的讀寫操作上,而通過分析,基于秒殺類商品的庫存數(shù)量不會太大,且時間持續(xù)不會太長這一現(xiàn)實(shí)特點(diǎn),可以得出秒殺系統(tǒng)的瓶頸更偏向于對數(shù)據(jù)庫的讀操作性能上。為提升秒殺系統(tǒng)的整體性能,可以在業(yè)務(wù)層和數(shù)據(jù)庫層之間增加一個數(shù)據(jù)緩存層\[4\],使用緩存技術(shù)\[5\]將對數(shù)據(jù)庫本身的讀寫請求降至最低。秒殺系統(tǒng)的總體功能模塊如圖1所示。
圖1秒殺系統(tǒng)功能模塊
秒殺系統(tǒng)中的緩存使用主要體現(xiàn)在以下3個方面:①用于商品基本信息的展示。通過將商品的動態(tài)網(wǎng)頁內(nèi)容轉(zhuǎn)換成靜態(tài)頁面形式保存,以避免對相同商品的重復(fù)訪問而導(dǎo)致的大量數(shù)據(jù)庫讀操作;②用于商品庫存的實(shí)時管理。在秒殺活動過程中先通過緩存維護(hù)庫存信息,活動結(jié)束后再統(tǒng)一更新入庫,有效降低活動進(jìn)行中對數(shù)據(jù)庫的頻繁修改操作;③用于商品訂單管理。所有秒殺商品訂單先統(tǒng)一存入緩存中,待秒殺活動結(jié)束后再統(tǒng)一進(jìn)行結(jié)算處理,這樣可以盡可能地將所有計(jì)算能力都放在應(yīng)對用戶的訪問請求服務(wù)上。
1.2.1商品維護(hù)模塊設(shè)計(jì)
商品維護(hù)作為獨(dú)立的后臺模塊專門用于對秒殺商品的設(shè)置,包括商品描述、特征分類、商品價格、庫存、售賣時間等信息。管理員可在此模塊中進(jìn)行商品的添加、修改、刪除等操作。由于商品信息本身不是一成不變的,尤其是在商品秒殺活動過程中遇到需要變更商品信息的情況更是不可避免,因此必須有一套與緩存策略相適應(yīng)的數(shù)據(jù)更新策略。具體做法是在商品維護(hù)模塊中對商品進(jìn)行任何變更后,除了更新數(shù)據(jù)庫中的商品信息外,還需要在數(shù)據(jù)庫中記錄商品更新的時間戳信息。此表將作為商品緩存管理時檢測商品信息新鮮度的重要標(biāo)識。商品維護(hù)業(yè)務(wù)流程如圖2所示。
圖2商品維護(hù)業(yè)務(wù)流程
1.2.2商品展示模塊設(shè)計(jì)
秒殺系統(tǒng)主要通過頁面緩存\[6\]來解決提供穩(wěn)定可靠的商品基本信息查詢服務(wù)的問題,即將秒殺商品網(wǎng)頁預(yù)先生成靜態(tài)HTML頁面并存放在緩存中,而不是重新通過IO讀取。商品展示模塊的業(yè)務(wù)流程如圖3所示。
圖3商品展示業(yè)務(wù)流程
當(dāng)用戶訪問相關(guān)頁面時先判斷商品頁面是否存在緩存,如果存在則直接調(diào)用靜態(tài)頁面,否則才從數(shù)據(jù)庫中讀取動態(tài)數(shù)據(jù)信息。本文中的緩存使用MemCached進(jìn)行HTML網(wǎng)頁的數(shù)據(jù)存儲,當(dāng)緩存不存在時系統(tǒng)將調(diào)用API從數(shù)據(jù)庫獲取數(shù)據(jù),而此操作將會成為整個系統(tǒng)的性能瓶頸。為盡量避免對數(shù)據(jù)庫的操作,需要在系統(tǒng)中單獨(dú)部署一個Job服務(wù),在秒殺活動開始前遍歷相關(guān)商品,預(yù)先生成頁面緩存信息。如果在某些特殊情況下依然需要對數(shù)據(jù)庫進(jìn)行直接讀取操作,則在讀取完成后需要將當(dāng)次讀取到的信息同步入緩存中,以保證下次再有對相同商品的訪問請求時可直接讀取緩存。為保證商品信息的時效性,本文采用一種時間戳維護(hù)機(jī)制,具體方法是:監(jiān)控?cái)?shù)據(jù)庫中的商品時間戳信息表,當(dāng)后臺監(jiān)控服務(wù)發(fā)現(xiàn)某個商品的時間戳信息發(fā)生變化后,則即時刷新緩存數(shù)據(jù),以此確保終端用戶讀取到的數(shù)據(jù)是最新的。商品緩存維護(hù)流程如圖4所示。
圖4商品緩存維護(hù)流程
緩存同步Job部署在獨(dú)立的內(nèi)部應(yīng)用服務(wù)器上,由于服務(wù)需要從商品時間戳信息表中獲取商品及其時間戳數(shù)據(jù),為了盡量降低每次從數(shù)據(jù)庫獲取的數(shù)據(jù)量,除了第一次數(shù)據(jù)初始化外,之后每次僅獲取上次運(yùn)行完成的時間點(diǎn)之后的數(shù)據(jù),同時考慮到性能因素,將“商品-時間戳”的字典維護(hù)在服務(wù)器的本地緩存中。Job的運(yùn)行頻率正常情況下控制在分鐘級即可。由于整體系統(tǒng)架構(gòu)采取集群模式,當(dāng)發(fā)生當(dāng)前服務(wù)器集群無法承受的情況,也可通過增加服務(wù)器數(shù)量,然后將所有商品重新平均分配到各個服務(wù)器上來解決。
1.2.3庫存及訂單管理模塊設(shè)計(jì)
針對秒殺產(chǎn)品庫存數(shù)有限的特點(diǎn),解決庫存更新以及訂單處理的基本思路是先將庫存信息維護(hù)在緩存中,同時還需要維護(hù)一個訂單隊(duì)列,通過單獨(dú)的服務(wù)處理此隊(duì)列中的訂單請求,并完成最終的數(shù)據(jù)入庫操作。用戶在打開商品頁面時,首先從緩存中獲取商品基本信息,包括商品售賣時間以及可售標(biāo)識,這里的可售標(biāo)識僅表示當(dāng)前商品是否可以進(jìn)行銷售,并不維護(hù)實(shí)際的商品庫存數(shù)。當(dāng)秒殺活動開始后,用戶可以通過點(diǎn)擊“預(yù)訂”按鈕進(jìn)行搶購。如果當(dāng)前商品庫存大于0,則用戶可以進(jìn)行后續(xù)預(yù)訂操作并更新庫存數(shù),當(dāng)商品庫存數(shù)減為0后,需要額外刷新緩存中存儲的商品信息,將可售標(biāo)識置為False,以表示商品不可繼續(xù)出售。如果用戶成功搶購到商品,系統(tǒng)并不直接將用戶的預(yù)訂單寫入數(shù)據(jù)庫中,而是先統(tǒng)一保存入一個訂單隊(duì)列中,此訂單隊(duì)列本身也存儲在緩存之中。商品下單Job的任務(wù)就是輪詢此訂單隊(duì)列,依次處理隊(duì)列中的預(yù)訂請求,將預(yù)訂信息寫入數(shù)據(jù)庫中。由于秒殺商品數(shù)量有限,因而訂單隊(duì)列中的記錄數(shù)不能大于商品庫存數(shù)量。因此,通過獨(dú)立的Job服務(wù)進(jìn)行此類集中的數(shù)據(jù)處理在性能上是可以保證的。當(dāng)用戶訂單被同步入數(shù)據(jù)庫中之后,用戶可在專門的個人訂單頁面中看到自己的預(yù)訂信息并進(jìn)行最終的支付操作,至此整個秒殺過程全部完成。庫存更新及訂單處理的業(yè)務(wù)流程如圖5所示。
圖5商品庫存及訂單管理業(yè)務(wù)流程
在以上流程中最關(guān)鍵的是維護(hù)商品的庫存信息。目前部分秒殺系統(tǒng)的做法是在MemCached中以商品ID為鍵維護(hù)庫存數(shù)據(jù),這種設(shè)計(jì)很可能導(dǎo)致性能瓶頸。因?yàn)檫@使MemCached通過相同的商品ID計(jì)算Hash值得到目標(biāo)存儲服務(wù)器時每次都會是相同的結(jié)果,即指定商品一定會被存放在一臺固定的服務(wù)器上。當(dāng)此商品出現(xiàn)高并發(fā)訪問時,存放該商品庫存鍵值對的緩存服務(wù)器必將承受極大負(fù)載。為了避免類似的單點(diǎn)服務(wù)可能造成的系統(tǒng)瓶頸,本文中對于秒殺商品的庫存信息維護(hù)作了適當(dāng)優(yōu)化,在設(shè)計(jì)鍵值對時采用“服務(wù)器標(biāo)識+商品”作為Key,這樣即使同一個商品,由于Key不同最終可以得到不同的Hash值,使數(shù)據(jù)會被存儲到不同的緩存服務(wù)器上,以此達(dá)到分布式存儲的目的。
2秒殺系統(tǒng)性能測試
為驗(yàn)證秒殺系統(tǒng)的具體性能,進(jìn)行如下實(shí)驗(yàn):測試樣本為10個秒殺商品,每個商品庫存數(shù)為1 000;測試緩存包含4臺WWW服務(wù)器,2臺應(yīng)用服務(wù)器,2臺緩存服務(wù)器和1臺數(shù)據(jù)庫服務(wù)器。為測試方便,本測試中所有服務(wù)器采用相同配置,均為4核CPU,內(nèi)存16G。
圖6服務(wù)器事務(wù)操作性能
由圖6可見,在高并發(fā)情況下系統(tǒng)的壓力瓶頸主要來自于WWW服務(wù)器,在達(dá)到100 000個并發(fā)數(shù)的情況下,WWW服務(wù)器的CPU占用率已達(dá)到90%以上,而此時應(yīng)用服務(wù)器和緩存服務(wù)器仍有空閑資源。同時由于絕大部分操作均在前端服務(wù)實(shí)現(xiàn),數(shù)據(jù)庫服務(wù)器的CPU占用率始終保持平緩,不隨并發(fā)數(shù)增加而暴增。通過長期測試,在系統(tǒng)實(shí)際部署中推薦將WWW服務(wù)器與應(yīng)用服務(wù)器數(shù)量按照3:1比例進(jìn)行配置,可以使整個系統(tǒng)達(dá)到最大的并發(fā)訪問承受力。
3結(jié)語
本文針對秒殺系統(tǒng)的業(yè)務(wù)特點(diǎn),從秒殺系統(tǒng)的主要業(yè)務(wù)流程入手,設(shè)計(jì)了一套完整的秒殺應(yīng)用服務(wù)系統(tǒng)體系結(jié)構(gòu)。該系統(tǒng)充分應(yīng)用緩存技術(shù),基本達(dá)到了對于秒殺系統(tǒng)的高并發(fā)性、高可靠性及易擴(kuò)展性要求,有效解決了秒殺系統(tǒng)的瞬時高并發(fā)難題,對構(gòu)建秒殺應(yīng)用或類似的高并發(fā)Web應(yīng)用有一定參考價值。但對于秒殺系統(tǒng)中的公平性設(shè)計(jì)目前尚未有完美的解決方案,有待進(jìn)一步研究。
參考文獻(xiàn)參考文獻(xiàn):
\[1\]張小紅.電子商務(wù)營銷策略之秒殺\[J\].機(jī)械管理開發(fā),2011(2):150151.
\[2\]裴麗麗.基于B2C模式的電子商務(wù)平臺系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)\[D\].上海:同濟(jì)大學(xué),2009.
\[3\]薛質(zhì),彭海平.電子商務(wù)平臺的性能優(yōu)化和高可靠性研究與實(shí)現(xiàn)\[D\]. 上海:上海交通大學(xué),2007.
\[4\]程春蕊,劉萬軍.基于數(shù)據(jù)庫緩存的Web應(yīng)用性能優(yōu)化解決方案\[J\]. 世界科技研究與發(fā)展,2009,31(4): 603604,640.
\[5\]甘桂梅.基于Web應(yīng)用的緩存技術(shù)概述\[J\].中國科技信息, 2010(17):9596.
\[6\]蔡志珂,閻潔.基于緩存框架的Web緩存研究\[J\].電腦知識與技術(shù),2009,5(31): 87378739.
責(zé)任編輯(責(zé)任編輯:黃健)