摘 要: 根據(jù)互聯(lián)網(wǎng)服務(wù)的特色,從可靠性、可擴展性和安全性的角度著手,提出了一套面向電子商務(wù)領(lǐng)域的網(wǎng)絡(luò)秒殺系統(tǒng)的架構(gòu)設(shè)計方案。同時分析了秒殺系統(tǒng)的業(yè)務(wù)特點,設(shè)計了一套相應(yīng)的業(yè)務(wù)體系,并給出了主要業(yè)務(wù)流程的具體實現(xiàn)方法。基于該解決方案的秒殺系統(tǒng)可以達到高并發(fā)、高可靠、易擴展以及高安全性的設(shè)計目標。
關(guān)鍵詞: 秒殺;電子商務(wù);高并發(fā)
0 引言
CNNIC第33次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告[1]顯示,我國網(wǎng)絡(luò)購物用戶規(guī)模已達3.02億人。隨著網(wǎng)購人群的不斷增長,閃購、搶拍、整點購等新興的秒殺類促銷形式正逐步受到熱捧。然而目前學術(shù)界專門論述如何建設(shè)電商領(lǐng)域的秒殺類應(yīng)用系統(tǒng)的相關(guān)文獻較少,因此本文針對此領(lǐng)域進行了一定研究。
在電子商務(wù)領(lǐng)域,秒殺特指網(wǎng)絡(luò)賣家在某個時間點發(fā)布一些價格超低于平時市場價格的商品,所有買家在同一時間在網(wǎng)上進行搶購的銷售方式。由于網(wǎng)絡(luò)買家對于超低價商品的好奇心、好勝心,使得商品往往一上架就被搶購一空,有時只用一秒鐘,因此被形象地稱為“秒殺”[2]。正是買家的這種博彩心理決定了秒殺應(yīng)用的最大特點就是瞬時性的超高并發(fā),往往秒殺開始的最初幾秒至幾十秒內(nèi),網(wǎng)站的訪問量就迅速達到峰值,從而引起服務(wù)器響應(yīng)延遲、服務(wù)異常甚至服務(wù)器癱瘓等諸多問題。
在這種高并發(fā)的情況下,如何使網(wǎng)站能夠持續(xù)穩(wěn)定地服務(wù)是需要重點研究和解決的課題。本文提出的解決方案主要包含兩方面內(nèi)容:一方面在架構(gòu)層面上在考慮服務(wù)器成本的情況下通過負載均衡和CDN技術(shù)構(gòu)建一套具有較高魯棒性的系統(tǒng)架構(gòu);另一方面在業(yè)務(wù)層面上針對秒殺應(yīng)用的特點,配合緩存技術(shù)[3]設(shè)計一套穩(wěn)定可行的業(yè)務(wù)處理流程。
1 秒殺系統(tǒng)的架構(gòu)設(shè)計
1.1 架構(gòu)分析
秒殺系統(tǒng)的特點包含兩個要素:一是高并發(fā),因此系統(tǒng)架構(gòu)上應(yīng)充分考慮整體系統(tǒng)的高可靠性[4];二是瞬時,即高并發(fā)的情況并非時刻存在,應(yīng)從系統(tǒng)整體效費比考慮,使得系統(tǒng)具有一定伸縮性。
1.2 架構(gòu)設(shè)計
基于以上設(shè)計理念,本文將整個系統(tǒng)劃分為內(nèi)容展示層、應(yīng)用服務(wù)層和數(shù)據(jù)訪問層3個層次,如圖1所示。從硬件設(shè)備角度,系統(tǒng)主要由WWW服務(wù)器集群、Web應(yīng)用服務(wù)器集群、文件服務(wù)器集群、緩存服務(wù)器集群、數(shù)據(jù)庫服務(wù)器集群以及相關(guān)的負載均衡等設(shè)備組成。
1.2.1 內(nèi)容展示層設(shè)計
內(nèi)容展示層是與終端用戶直接交互的前端系統(tǒng)。考慮到秒殺系統(tǒng)中出售的商品信息多數(shù)內(nèi)容還是以靜態(tài)的網(wǎng)頁文字和圖片格式進行呈現(xiàn)的,為了實現(xiàn)系統(tǒng)的高可用性,可以在用戶和服務(wù)器之間構(gòu)建一個網(wǎng)絡(luò)緩存層,比較常用的做法就是用CDN,即內(nèi)容分發(fā)網(wǎng)絡(luò)。其目的是使用戶可就近取得所需內(nèi)容,解決Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問網(wǎng)站的響應(yīng)速度。
1.2.2 應(yīng)用服務(wù)層設(shè)計
應(yīng)用服務(wù)層是整合系統(tǒng)的核心層,其作用是連接前端用戶的服務(wù)請求和后臺系統(tǒng)的服務(wù)響應(yīng),所有的業(yè)務(wù)處理都在本層中實現(xiàn)。為了保障系統(tǒng)的高并發(fā)性和可靠性,應(yīng)當將服務(wù)器按集群模式[5]進行部署,這樣做既可以避免因為單點故障而導致的系統(tǒng)癱瘓,同時也可以保證對所有服務(wù)器硬件設(shè)備的集中管理和統(tǒng)一配置。WWW服務(wù)器集群主要用于接收和響應(yīng)用戶的訪問請求。應(yīng)用服務(wù)器集群則是對從WWW服務(wù)器集群中轉(zhuǎn)發(fā)的各類業(yè)務(wù)請求進行及時的處理。通過負載均衡系統(tǒng)將各個業(yè)務(wù)集群進行串聯(lián),將大量的并發(fā)訪問數(shù)據(jù)分配到多臺節(jié)點設(shè)備上分別進行處理,構(gòu)成完整的系統(tǒng)體系。通常采用專門的硬件設(shè)備(如F5、A10等)實現(xiàn)負載均衡。負載均衡策略應(yīng)采取動態(tài)的自適應(yīng)負載均衡策略[6],使得整個系統(tǒng)能夠根據(jù)當前應(yīng)用的實際訪問量情況調(diào)整服務(wù)器節(jié)點數(shù)量,在保證客戶網(wǎng)絡(luò)服務(wù)質(zhì)量的前提下盡可能減少資源浪費,降低系統(tǒng)費用。
對于一個擁有大量用戶真實數(shù)據(jù)的電子商務(wù)系統(tǒng)[7],必須充分考慮到系統(tǒng)的安全性[8]。為了保證系統(tǒng)不被非法用戶入侵或惡意攻擊,防火墻作為整個系統(tǒng)的橋頭堡必須被部署在整個系統(tǒng)的入口處,設(shè)備應(yīng)當盡量選取性能優(yōu)秀、穩(wěn)定可靠的硬件產(chǎn)品。除此之外,還應(yīng)部署專門的安全服務(wù)器以進行系統(tǒng)的漏洞掃描、入侵檢測分析和安全審計工作,輔助防火墻保證系統(tǒng)的安全。
1.2.3 數(shù)據(jù)訪問層設(shè)計
數(shù)據(jù)訪問層的任務(wù)是為應(yīng)用服務(wù)層提供所需的數(shù)據(jù)支持。為了降低對于數(shù)據(jù)庫I/O操作的壓力,必須在應(yīng)用服務(wù)與數(shù)據(jù)庫之間建立一個數(shù)據(jù)緩存層[9]。圖片、視頻等靜態(tài)信息都從專門的文件服務(wù)器集群上獲取;對于秒殺系統(tǒng)相關(guān)的產(chǎn)品數(shù)據(jù),應(yīng)在產(chǎn)品售賣之前將相關(guān)信息采用內(nèi)存緩存的方式存放在緩存服務(wù)器集群[10]中;而數(shù)據(jù)庫本身也應(yīng)以集群模式構(gòu)建,以MySQL為例,可采用主從結(jié)構(gòu),并在程序?qū)訉崿F(xiàn)讀寫分離,然后通過負載均衡進行分布式調(diào)用。
2 秒殺系統(tǒng)的業(yè)務(wù)應(yīng)用設(shè)計
2.1 秒殺系統(tǒng)業(yè)務(wù)分析
秒殺系統(tǒng)與典型的高并發(fā)Web系統(tǒng)的最大區(qū)別就在于并發(fā)訪問的發(fā)生場景。一般支持高并發(fā)的在線購物平臺(如淘寶、京東、一號店等)每時每刻都會存在大量的并發(fā)訪問,是一種常態(tài)化的高并發(fā);而秒殺系統(tǒng)本身通常都不是作為一個獨立平臺而往往是以這些電商平臺中的一個子系統(tǒng)的形式出現(xiàn),同時秒殺產(chǎn)品的發(fā)售也有極強的時間限制,因此導致了秒殺系統(tǒng)的并發(fā)訪問是一種突發(fā)的高并發(fā)。另外,秒殺歸根到底是電商的一種促銷手段,這種以超低價吸引買家的性質(zhì)決定了對應(yīng)的秒殺產(chǎn)品的庫存數(shù)絕不會是無限大的,相反往往會控制在一個相對很少的量級單位。通過以上分析可以得出,要構(gòu)建一套實用合理的秒殺業(yè)務(wù)系統(tǒng),主要是解決兩個問題:一是如何提供穩(wěn)定可靠的產(chǎn)品基本信息查詢服務(wù);二是如何保證產(chǎn)品庫存的及時更新及訂單處理。
2.2 秒殺系統(tǒng)業(yè)務(wù)設(shè)計
2.2.1 產(chǎn)品查詢服務(wù)流程設(shè)計
對于如何提供穩(wěn)定可靠的產(chǎn)品基本信息查詢服務(wù)的問題,主要通過頁面緩存[11]來解決。當用戶訪問相關(guān)頁面時,預先判斷產(chǎn)品頁面是否存在緩存,如果存在則直接調(diào)用靜態(tài)頁面,否則從數(shù)據(jù)庫中讀取動態(tài)數(shù)據(jù)信息,這樣做可以加快系統(tǒng)反應(yīng)時間,提高整個網(wǎng)站的性能[12]。另外,對于網(wǎng)頁中的圖片、視頻等文件,則從獨立的文件服務(wù)器中讀取,由于此類信息本身并不影響具體業(yè)務(wù),因此通常采用異步方式進行加載。產(chǎn)品查詢服務(wù)的業(yè)務(wù)流程圖如圖2所示。
由圖2可見,當緩存不存在時將不得不調(diào)用API從數(shù)據(jù)庫中直接獲取數(shù)據(jù),而此操作將會成為整個系統(tǒng)的性能瓶頸。為盡量避免對數(shù)據(jù)庫的操作,需要在系統(tǒng)中單獨部署一個Job服務(wù),在秒殺活動開始前遍歷相關(guān)產(chǎn)品預先生成頁面緩存信息。如果在某些特殊情況下依舊需要對數(shù)據(jù)庫進行直接讀取操作,則在讀取完成后需要將當次讀取到的信息同步入緩存中,以此保證下次再有對相同產(chǎn)品的訪問請求時可直接讀取緩存,從而避免對數(shù)據(jù)庫的二次訪問。同時為保證緩存中產(chǎn)品信息的時效性[13],引入時間戳概念,時間戳維護的業(yè)務(wù)流程圖如圖3所示。
當后臺維護人員修改產(chǎn)品信息后,產(chǎn)品對應(yīng)的時間戳就會同步到數(shù)據(jù)庫的產(chǎn)品時間戳信息表中,此時后臺監(jiān)控服務(wù)發(fā)現(xiàn)某個產(chǎn)品的時間戳信息發(fā)生變化后則會即時刷新緩存數(shù)據(jù),以此確保前臺用戶取到的數(shù)據(jù)是最新的。緩存同步Job部署在獨立的內(nèi)部應(yīng)用服務(wù)器上,由于服務(wù)需要從產(chǎn)品時間戳信息表中獲取產(chǎn)品及其時間戳數(shù)據(jù),為了盡量降低每次從數(shù)據(jù)庫獲取的數(shù)據(jù)量,除了第一次數(shù)據(jù)初始化外,之后每次僅獲取上次運行完成的時間點之后的數(shù)據(jù),同時考慮到性能因素,將“產(chǎn)品-時間戳”的字典維護在服務(wù)器的本地緩存中?,F(xiàn)實環(huán)境中,產(chǎn)品基本信息的更新頻率一般都會以小時甚至天為單位。Job運行的頻率可人為控制,正常情況下控制在分鐘級即可,經(jīng)過實際測試,當產(chǎn)品數(shù)量為十萬級時,由于字典本身維護的數(shù)據(jù)量并不大,即使單臺服務(wù)器的負載也足以能夠承受。由于整體系統(tǒng)架構(gòu)采取集群模式,即使發(fā)生當前服務(wù)器集群無法承受的情況,也可通過增加服務(wù)器數(shù)量,然后將所有產(chǎn)品重新平均分配到各個服務(wù)器上來解決。
2.2.2 產(chǎn)品庫存及訂單處理流程設(shè)計
考慮到秒殺產(chǎn)品通常都以實物產(chǎn)品為主,其固有的成本壓力以及超低價吸引買家的營銷模式?jīng)Q定了產(chǎn)品庫存數(shù)都是有限的,真正能夠成功下單的操作數(shù)相對有限,數(shù)據(jù)庫的寫操作壓力相比讀操作要小很多。因此解決庫存更新以及訂單處理的基本思路是:先將庫存信息維護在緩存中,同時維護一個訂單隊列,通過單獨的服務(wù)處理此隊列中的訂單請求并完成最終的數(shù)據(jù)入庫操作[14]。庫存刷新及訂單處理的業(yè)務(wù)流程圖如圖4所示。
用戶在打開產(chǎn)品頁面時首先從緩存中獲取產(chǎn)品的基本信息,包括產(chǎn)品售賣時間以及可售標識,這里的可售標識僅表示當前產(chǎn)品是否可以進行銷售,并不維護實際的產(chǎn)品庫存數(shù)。當秒殺活動開始后,用戶可以通過點擊“預訂”按鈕進行搶購。如果當前產(chǎn)品庫存大于0,則用戶可以進行后續(xù)預訂操作并更新庫存數(shù);若產(chǎn)品庫存數(shù)減為0后,需要額外刷新緩存中存儲的產(chǎn)品信息,將可售標識置為False,以此表示產(chǎn)品不可繼續(xù)出售。如果用戶成功搶購到產(chǎn)品,系統(tǒng)并不直接將用戶的預訂單寫入數(shù)據(jù)庫中,而是先統(tǒng)一保存入一個訂單隊列之中,此訂單隊列本身也是存儲在緩存之中。產(chǎn)品下單Job的任務(wù)就是輪詢此訂單隊列,依次處理隊列中的預訂請求,將預訂信息寫入數(shù)據(jù)庫中。由于秒殺產(chǎn)品數(shù)量是有限的,因此訂單隊列中的記錄數(shù)不能大于產(chǎn)品庫存數(shù)量,故通過獨立的Job服務(wù)進行此類集中的數(shù)據(jù)處理在性能上是可以保證的。當用戶的訂單被同步入數(shù)據(jù)庫中之后,用戶可在專門的個人訂單頁面中看到自己的預訂信息并進行最終的支付操作,至此整個秒殺過程全部完成。
在以上流程中,最關(guān)鍵的是維護產(chǎn)品的庫存信息,目前有些秒殺系統(tǒng)的做法是直接維護一個“產(chǎn)品ID-庫存”的鍵值對字典,并將數(shù)據(jù)存放在MemCached中,這種設(shè)計很可能導致性能瓶頸。因為直接使用產(chǎn)品ID作為Key,使得MemCached通過Key來計算Hash值得到目標存儲服務(wù)器時每次都是相同的結(jié)果,即指定產(chǎn)品一定會被存放在固定的一臺服務(wù)器上,當此產(chǎn)品出現(xiàn)高并發(fā)訪問時,存放該產(chǎn)品庫存鍵值對的緩存服務(wù)器必將承受極大負載。為了避免類似的單點服務(wù)可能造成的系統(tǒng)瓶頸,本文對于秒殺產(chǎn)品的庫存信息維護做了適當?shù)膬?yōu)化,在設(shè)計鍵值對時采用“服務(wù)器標識+產(chǎn)品”作為Key,這樣即使是同一個產(chǎn)品由于Key不同最終可以得到不同的Hash值,使得數(shù)據(jù)會被存儲到不同的緩存服務(wù)器上,以此達到分布式存儲的目的。
3 系統(tǒng)測試
基于本方案的秒殺系統(tǒng)無論在對產(chǎn)品內(nèi)容展示還是庫存及訂單處理上,都具有較強的可靠性。為驗證該解決方案的具體性能特進行以下實驗。
測試樣本為10個秒殺產(chǎn)品,每個產(chǎn)品庫存數(shù)為1 000;測試緩存包含4臺WWW服務(wù)器,2臺應(yīng)用服務(wù)器,2臺緩存服務(wù)器和1臺數(shù)據(jù)庫服務(wù)器。為測試方便,本測試中所有服務(wù)器采用相同配置,均為4核CPU,內(nèi)存為16 GB。服務(wù)器事務(wù)操作性能對比如圖5所示。由圖可見,在高并發(fā)情況下系統(tǒng)的壓力瓶頸主要來自于WWW服務(wù)器,在達到10萬個并發(fā)數(shù)的情況下WWW服務(wù)器的CPU占用率已經(jīng)達到了90%以上,而此時應(yīng)用服務(wù)器和緩存服務(wù)器仍有空閑資源;同時由于絕大部分操作均在前端服務(wù)實現(xiàn),數(shù)據(jù)庫服務(wù)器的CPU占用率始終保持平緩,不隨并發(fā)數(shù)增加而暴增。通過長期測試,在系統(tǒng)實際部署中推薦將WWW服務(wù)器與應(yīng)用服務(wù)器數(shù)量按照3:1比例進行配置,可以使得整個系統(tǒng)達到最大的并發(fā)訪問承受力。
4 結(jié)論
身處互聯(lián)網(wǎng)時代,網(wǎng)上購物已經(jīng)逐步成為億萬網(wǎng)民主流的購物方式,而秒殺、搶購類的網(wǎng)絡(luò)營銷模式也越來越受到電商和網(wǎng)民共同的關(guān)注和推崇。本文正是基于此類應(yīng)用的巨大市場發(fā)展?jié)摿?,專門針對秒殺系統(tǒng)的特點,從系統(tǒng)架構(gòu)和業(yè)務(wù)流程兩大方面分析和設(shè)計了一套具有高并發(fā)性、高可靠性和安全性的互聯(lián)網(wǎng)秒殺應(yīng)用系統(tǒng),基本滿足了電商平臺對于秒殺應(yīng)用的實際需求。同時對高并發(fā)性系統(tǒng)中的緩存技術(shù)的實際應(yīng)用以及秒殺系統(tǒng)的公平性等進行了探討,實際上這兩點都是秒殺系統(tǒng)設(shè)計中的重點和難點,目前尚未有完美的解決方案,還需要進一步研究。
參考文獻
[1] 中國互聯(lián)網(wǎng)絡(luò)信息中心.中文互聯(lián)網(wǎng)數(shù)據(jù)資訊中心[EB/OL].[2014-01-16].http://www.199it.com/archives/187745.html.
[2] 張小紅.電子商務(wù)營銷策略之秒殺[J].機械管理開發(fā),2011(2):150-151.
[3] 甘桂梅.基于Web應(yīng)用的緩存技術(shù)概述[J].中國科技信息,2010(17):95-96.
[4] 薛質(zhì),彭海平.電子商務(wù)平臺的性能優(yōu)化和高可靠性研究與實現(xiàn)[D].上海:上海交通大學,2007.
[5] 賴建峰,林永怡.服務(wù)器集群技術(shù)在數(shù)字化校園中的應(yīng)用[J].硅谷,2011(9):136.
[6] 段趙磊,黃艷.彈性Web Cache集群的自適應(yīng)負載均衡策略[J].小型微型計算機系統(tǒng),2013,34(7):1527-1530.
[7] 裴麗麗.基于B2C模式的電子商務(wù)平臺系統(tǒng)設(shè)計和實現(xiàn)[D].上海:同濟大學,2009.
[8] 包立輝,黃彥飛.高并發(fā)網(wǎng)站的架構(gòu)研究及解決方案[J].計算機科學,2012,39(10):184-187.
[9] 程春蕊,劉萬軍.基于數(shù)據(jù)庫緩存的Web應(yīng)用性能優(yōu)化解決方案[J].世界科技研究與發(fā)展,2009,31(4):603-604,640.
[10] 王鑫.基于動態(tài)緩存的電子商務(wù)平臺優(yōu)化研究[D].青島:山東科技大學,2004.
[11] 蔡志珂,閻潔.基于緩存框架的Web緩存研究[J].電腦知識與技術(shù),2009,5(31):8737-8739.
[12] 王春娟.基于緩存技術(shù)的Web應(yīng)用性能優(yōu)化研究[J].電腦知識與技術(shù),2008,1(3):438-440.
[13] 張旺俊.Web緩存替換策略與預取技術(shù)的研究[D].合肥:中國科學技術(shù)大學,2011.
[14] 郭世亮.一種高并發(fā)競爭庫存的訂單處理系統(tǒng)及其處理方法[P].中國:CN201310301455.2,2013-12-04.