《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 面向電子商務的秒殺系統(tǒng)設計與實現(xiàn)
面向電子商務的秒殺系統(tǒng)設計與實現(xiàn)
2015年微型機與應用第6期
邵 斐
(上海清算所,上海 200002)
摘要: 根據(jù)互聯(lián)網服務的特色,從可靠性、可擴展性和安全性的角度著手,提出了一套面向電子商務領域的網絡秒殺系統(tǒng)的架構設計方案。同時分析了秒殺系統(tǒng)的業(yè)務特點,設計了一套相應的業(yè)務體系,并給出了主要業(yè)務流程的具體實現(xiàn)方法?;谠摻鉀Q方案的秒殺系統(tǒng)可以達到高并發(fā)、高可靠、易擴展以及高安全性的設計目標。
Abstract:
Key words :

  摘  要: 根據(jù)互聯(lián)網服務的特色,從可靠性、可擴展性和安全性的角度著手,提出了一套面向電子商務領域的網絡秒殺系統(tǒng)的架構設計方案。同時分析了秒殺系統(tǒng)的業(yè)務特點,設計了一套相應的業(yè)務體系,并給出了主要業(yè)務流程的具體實現(xiàn)方法?;谠摻鉀Q方案的秒殺系統(tǒng)可以達到高并發(fā)、高可靠、易擴展以及高安全性的設計目標。

  關鍵詞: 秒殺;電子商務;高并發(fā)

0 引言

  CNNIC第33次中國互聯(lián)網絡發(fā)展狀況統(tǒng)計報告[1]顯示,我國網絡購物用戶規(guī)模已達3.02億人。隨著網購人群的不斷增長,閃購、搶拍、整點購等新興的秒殺類促銷形式正逐步受到熱捧。然而目前學術界專門論述如何建設電商領域的秒殺類應用系統(tǒng)的相關文獻較少,因此本文針對此領域進行了一定研究。

  在電子商務領域,秒殺特指網絡賣家在某個時間點發(fā)布一些價格超低于平時市場價格的商品,所有買家在同一時間在網上進行搶購的銷售方式。由于網絡買家對于超低價商品的好奇心、好勝心,使得商品往往一上架就被搶購一空,有時只用一秒鐘,因此被形象地稱為“秒殺”[2]。正是買家的這種博彩心理決定了秒殺應用的最大特點就是瞬時性的超高并發(fā),往往秒殺開始的最初幾秒至幾十秒內,網站的訪問量就迅速達到峰值,從而引起服務器響應延遲、服務異常甚至服務器癱瘓等諸多問題。

  在這種高并發(fā)的情況下,如何使網站能夠持續(xù)穩(wěn)定地服務是需要重點研究和解決的課題。本文提出的解決方案主要包含兩方面內容:一方面在架構層面上在考慮服務器成本的情況下通過負載均衡和CDN技術構建一套具有較高魯棒性的系統(tǒng)架構;另一方面在業(yè)務層面上針對秒殺應用的特點,配合緩存技術[3]設計一套穩(wěn)定可行的業(yè)務處理流程。

1 秒殺系統(tǒng)的架構設計

  1.1 架構分析

  秒殺系統(tǒng)的特點包含兩個要素:一是高并發(fā),因此系統(tǒng)架構上應充分考慮整體系統(tǒng)的高可靠性[4];二是瞬時,即高并發(fā)的情況并非時刻存在,應從系統(tǒng)整體效費比考慮,使得系統(tǒng)具有一定伸縮性。

  1.2 架構設計

001.jpg


  基于以上設計理念,本文將整個系統(tǒng)劃分為內容展示層、應用服務層和數(shù)據(jù)訪問層3個層次,如圖1所示。從硬件設備角度,系統(tǒng)主要由WWW服務器集群、Web應用服務器集群、文件服務器集群、緩存服務器集群、數(shù)據(jù)庫服務器集群以及相關的負載均衡等設備組成。

  1.2.1 內容展示層設計

  內容展示層是與終端用戶直接交互的前端系統(tǒng)??紤]到秒殺系統(tǒng)中出售的商品信息多數(shù)內容還是以靜態(tài)的網頁文字和圖片格式進行呈現(xiàn)的,為了實現(xiàn)系統(tǒng)的高可用性,可以在用戶和服務器之間構建一個網絡緩存層,比較常用的做法就是用CDN,即內容分發(fā)網絡。其目的是使用戶可就近取得所需內容,解決Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。

  1.2.2 應用服務層設計

  應用服務層是整合系統(tǒng)的核心層,其作用是連接前端用戶的服務請求和后臺系統(tǒng)的服務響應,所有的業(yè)務處理都在本層中實現(xiàn)。為了保障系統(tǒng)的高并發(fā)性和可靠性,應當將服務器按集群模式[5]進行部署,這樣做既可以避免因為單點故障而導致的系統(tǒng)癱瘓,同時也可以保證對所有服務器硬件設備的集中管理和統(tǒng)一配置。WWW服務器集群主要用于接收和響應用戶的訪問請求。應用服務器集群則是對從WWW服務器集群中轉發(fā)的各類業(yè)務請求進行及時的處理。通過負載均衡系統(tǒng)將各個業(yè)務集群進行串聯(lián),將大量的并發(fā)訪問數(shù)據(jù)分配到多臺節(jié)點設備上分別進行處理,構成完整的系統(tǒng)體系。通常采用專門的硬件設備(如F5、A10等)實現(xiàn)負載均衡。負載均衡策略應采取動態(tài)的自適應負載均衡策略[6],使得整個系統(tǒng)能夠根據(jù)當前應用的實際訪問量情況調整服務器節(jié)點數(shù)量,在保證客戶網絡服務質量的前提下盡可能減少資源浪費,降低系統(tǒng)費用。

  對于一個擁有大量用戶真實數(shù)據(jù)的電子商務系統(tǒng)[7],必須充分考慮到系統(tǒng)的安全性[8]。為了保證系統(tǒng)不被非法用戶入侵或惡意攻擊,防火墻作為整個系統(tǒng)的橋頭堡必須被部署在整個系統(tǒng)的入口處,設備應當盡量選取性能優(yōu)秀、穩(wěn)定可靠的硬件產品。除此之外,還應部署專門的安全服務器以進行系統(tǒng)的漏洞掃描、入侵檢測分析和安全審計工作,輔助防火墻保證系統(tǒng)的安全。

  1.2.3 數(shù)據(jù)訪問層設計

  數(shù)據(jù)訪問層的任務是為應用服務層提供所需的數(shù)據(jù)支持。為了降低對于數(shù)據(jù)庫I/O操作的壓力,必須在應用服務與數(shù)據(jù)庫之間建立一個數(shù)據(jù)緩存層[9]。圖片、視頻等靜態(tài)信息都從專門的文件服務器集群上獲??;對于秒殺系統(tǒng)相關的產品數(shù)據(jù),應在產品售賣之前將相關信息采用內存緩存的方式存放在緩存服務器集群[10]中;而數(shù)據(jù)庫本身也應以集群模式構建,以MySQL為例,可采用主從結構,并在程序層實現(xiàn)讀寫分離,然后通過負載均衡進行分布式調用。

2 秒殺系統(tǒng)的業(yè)務應用設計

  2.1 秒殺系統(tǒng)業(yè)務分析

  秒殺系統(tǒng)與典型的高并發(fā)Web系統(tǒng)的最大區(qū)別就在于并發(fā)訪問的發(fā)生場景。一般支持高并發(fā)的在線購物平臺(如淘寶、京東、一號店等)每時每刻都會存在大量的并發(fā)訪問,是一種常態(tài)化的高并發(fā);而秒殺系統(tǒng)本身通常都不是作為一個獨立平臺而往往是以這些電商平臺中的一個子系統(tǒng)的形式出現(xiàn),同時秒殺產品的發(fā)售也有極強的時間限制,因此導致了秒殺系統(tǒng)的并發(fā)訪問是一種突發(fā)的高并發(fā)。另外,秒殺歸根到底是電商的一種促銷手段,這種以超低價吸引買家的性質決定了對應的秒殺產品的庫存數(shù)絕不會是無限大的,相反往往會控制在一個相對很少的量級單位。通過以上分析可以得出,要構建一套實用合理的秒殺業(yè)務系統(tǒng),主要是解決兩個問題:一是如何提供穩(wěn)定可靠的產品基本信息查詢服務;二是如何保證產品庫存的及時更新及訂單處理。

  2.2 秒殺系統(tǒng)業(yè)務設計

  2.2.1 產品查詢服務流程設計

  對于如何提供穩(wěn)定可靠的產品基本信息查詢服務的問題,主要通過頁面緩存[11]來解決。當用戶訪問相關頁面時,預先判斷產品頁面是否存在緩存,如果存在則直接調用靜態(tài)頁面,否則從數(shù)據(jù)庫中讀取動態(tài)數(shù)據(jù)信息,這樣做可以加快系統(tǒng)反應時間,提高整個網站的性能[12]。另外,對于網頁中的圖片、視頻等文件,則從獨立的文件服務器中讀取,由于此類信息本身并不影響具體業(yè)務,因此通常采用異步方式進行加載。產品查詢服務的業(yè)務流程圖如圖2所示。

002.jpg

  由圖2可見,當緩存不存在時將不得不調用API從數(shù)據(jù)庫中直接獲取數(shù)據(jù),而此操作將會成為整個系統(tǒng)的性能瓶頸。為盡量避免對數(shù)據(jù)庫的操作,需要在系統(tǒng)中單獨部署一個Job服務,在秒殺活動開始前遍歷相關產品預先生成頁面緩存信息。如果在某些特殊情況下依舊需要對數(shù)據(jù)庫進行直接讀取操作,則在讀取完成后需要將當次讀取到的信息同步入緩存中,以此保證下次再有對相同產品的訪問請求時可直接讀取緩存,從而避免對數(shù)據(jù)庫的二次訪問。同時為保證緩存中產品信息的時效性[13],引入時間戳概念,時間戳維護的業(yè)務流程圖如圖3所示。

003.jpg

  當后臺維護人員修改產品信息后,產品對應的時間戳就會同步到數(shù)據(jù)庫的產品時間戳信息表中,此時后臺監(jiān)控服務發(fā)現(xiàn)某個產品的時間戳信息發(fā)生變化后則會即時刷新緩存數(shù)據(jù),以此確保前臺用戶取到的數(shù)據(jù)是最新的。緩存同步Job部署在獨立的內部應用服務器上,由于服務需要從產品時間戳信息表中獲取產品及其時間戳數(shù)據(jù),為了盡量降低每次從數(shù)據(jù)庫獲取的數(shù)據(jù)量,除了第一次數(shù)據(jù)初始化外,之后每次僅獲取上次運行完成的時間點之后的數(shù)據(jù),同時考慮到性能因素,將“產品-時間戳”的字典維護在服務器的本地緩存中。現(xiàn)實環(huán)境中,產品基本信息的更新頻率一般都會以小時甚至天為單位。Job運行的頻率可人為控制,正常情況下控制在分鐘級即可,經過實際測試,當產品數(shù)量為十萬級時,由于字典本身維護的數(shù)據(jù)量并不大,即使單臺服務器的負載也足以能夠承受。由于整體系統(tǒng)架構采取集群模式,即使發(fā)生當前服務器集群無法承受的情況,也可通過增加服務器數(shù)量,然后將所有產品重新平均分配到各個服務器上來解決。

  2.2.2 產品庫存及訂單處理流程設計

  考慮到秒殺產品通常都以實物產品為主,其固有的成本壓力以及超低價吸引買家的營銷模式決定了產品庫存數(shù)都是有限的,真正能夠成功下單的操作數(shù)相對有限,數(shù)據(jù)庫的寫操作壓力相比讀操作要小很多。因此解決庫存更新以及訂單處理的基本思路是:先將庫存信息維護在緩存中,同時維護一個訂單隊列,通過單獨的服務處理此隊列中的訂單請求并完成最終的數(shù)據(jù)入庫操作[14]。庫存刷新及訂單處理的業(yè)務流程圖如圖4所示。

004.jpg

  用戶在打開產品頁面時首先從緩存中獲取產品的基本信息,包括產品售賣時間以及可售標識,這里的可售標識僅表示當前產品是否可以進行銷售,并不維護實際的產品庫存數(shù)。當秒殺活動開始后,用戶可以通過點擊“預訂”按鈕進行搶購。如果當前產品庫存大于0,則用戶可以進行后續(xù)預訂操作并更新庫存數(shù);若產品庫存數(shù)減為0后,需要額外刷新緩存中存儲的產品信息,將可售標識置為False,以此表示產品不可繼續(xù)出售。如果用戶成功搶購到產品,系統(tǒng)并不直接將用戶的預訂單寫入數(shù)據(jù)庫中,而是先統(tǒng)一保存入一個訂單隊列之中,此訂單隊列本身也是存儲在緩存之中。產品下單Job的任務就是輪詢此訂單隊列,依次處理隊列中的預訂請求,將預訂信息寫入數(shù)據(jù)庫中。由于秒殺產品數(shù)量是有限的,因此訂單隊列中的記錄數(shù)不能大于產品庫存數(shù)量,故通過獨立的Job服務進行此類集中的數(shù)據(jù)處理在性能上是可以保證的。當用戶的訂單被同步入數(shù)據(jù)庫中之后,用戶可在專門的個人訂單頁面中看到自己的預訂信息并進行最終的支付操作,至此整個秒殺過程全部完成。

  在以上流程中,最關鍵的是維護產品的庫存信息,目前有些秒殺系統(tǒng)的做法是直接維護一個“產品ID-庫存”的鍵值對字典,并將數(shù)據(jù)存放在MemCached中,這種設計很可能導致性能瓶頸。因為直接使用產品ID作為Key,使得MemCached通過Key來計算Hash值得到目標存儲服務器時每次都是相同的結果,即指定產品一定會被存放在固定的一臺服務器上,當此產品出現(xiàn)高并發(fā)訪問時,存放該產品庫存鍵值對的緩存服務器必將承受極大負載。為了避免類似的單點服務可能造成的系統(tǒng)瓶頸,本文對于秒殺產品的庫存信息維護做了適當?shù)膬?yōu)化,在設計鍵值對時采用“服務器標識+產品”作為Key,這樣即使是同一個產品由于Key不同最終可以得到不同的Hash值,使得數(shù)據(jù)會被存儲到不同的緩存服務器上,以此達到分布式存儲的目的。

3 系統(tǒng)測試

  基于本方案的秒殺系統(tǒng)無論在對產品內容展示還是庫存及訂單處理上,都具有較強的可靠性。為驗證該解決方案的具體性能特進行以下實驗。

005.jpg

  測試樣本為10個秒殺產品,每個產品庫存數(shù)為1 000;測試緩存包含4臺WWW服務器,2臺應用服務器,2臺緩存服務器和1臺數(shù)據(jù)庫服務器。為測試方便,本測試中所有服務器采用相同配置,均為4核CPU,內存為16 GB。服務器事務操作性能對比如圖5所示。由圖可見,在高并發(fā)情況下系統(tǒng)的壓力瓶頸主要來自于WWW服務器,在達到10萬個并發(fā)數(shù)的情況下WWW服務器的CPU占用率已經達到了90%以上,而此時應用服務器和緩存服務器仍有空閑資源;同時由于絕大部分操作均在前端服務實現(xiàn),數(shù)據(jù)庫服務器的CPU占用率始終保持平緩,不隨并發(fā)數(shù)增加而暴增。通過長期測試,在系統(tǒng)實際部署中推薦將WWW服務器與應用服務器數(shù)量按照3:1比例進行配置,可以使得整個系統(tǒng)達到最大的并發(fā)訪問承受力。

4 結論

  身處互聯(lián)網時代,網上購物已經逐步成為億萬網民主流的購物方式,而秒殺、搶購類的網絡營銷模式也越來越受到電商和網民共同的關注和推崇。本文正是基于此類應用的巨大市場發(fā)展?jié)摿?,專門針對秒殺系統(tǒng)的特點,從系統(tǒng)架構和業(yè)務流程兩大方面分析和設計了一套具有高并發(fā)性、高可靠性和安全性的互聯(lián)網秒殺應用系統(tǒng),基本滿足了電商平臺對于秒殺應用的實際需求。同時對高并發(fā)性系統(tǒng)中的緩存技術的實際應用以及秒殺系統(tǒng)的公平性等進行了探討,實際上這兩點都是秒殺系統(tǒng)設計中的重點和難點,目前尚未有完美的解決方案,還需要進一步研究。

參考文獻

  [1] 中國互聯(lián)網絡信息中心.中文互聯(lián)網數(shù)據(jù)資訊中心[EB/OL].[2014-01-16].http://www.199it.com/archives/187745.html.

  [2] 張小紅.電子商務營銷策略之秒殺[J].機械管理開發(fā),2011(2):150-151.

  [3] 甘桂梅.基于Web應用的緩存技術概述[J].中國科技信息,2010(17):95-96.

  [4] 薛質,彭海平.電子商務平臺的性能優(yōu)化和高可靠性研究與實現(xiàn)[D].上海:上海交通大學,2007.

  [5] 賴建峰,林永怡.服務器集群技術在數(shù)字化校園中的應用[J].硅谷,2011(9):136.

  [6] 段趙磊,黃艷.彈性Web Cache集群的自適應負載均衡策略[J].小型微型計算機系統(tǒng),2013,34(7):1527-1530.

  [7] 裴麗麗.基于B2C模式的電子商務平臺系統(tǒng)設計和實現(xiàn)[D].上海:同濟大學,2009.

  [8] 包立輝,黃彥飛.高并發(fā)網站的架構研究及解決方案[J].計算機科學,2012,39(10):184-187.

  [9] 程春蕊,劉萬軍.基于數(shù)據(jù)庫緩存的Web應用性能優(yōu)化解決方案[J].世界科技研究與發(fā)展,2009,31(4):603-604,640.

  [10] 王鑫.基于動態(tài)緩存的電子商務平臺優(yōu)化研究[D].青島:山東科技大學,2004.

  [11] 蔡志珂,閻潔.基于緩存框架的Web緩存研究[J].電腦知識與技術,2009,5(31):8737-8739.

  [12] 王春娟.基于緩存技術的Web應用性能優(yōu)化研究[J].電腦知識與技術,2008,1(3):438-440.

  [13] 張旺俊.Web緩存替換策略與預取技術的研究[D].合肥:中國科學技術大學,2011.

  [14] 郭世亮.一種高并發(fā)競爭庫存的訂單處理系統(tǒng)及其處理方法[P].中國:CN201310301455.2,2013-12-04.


此內容為AET網站原創(chuàng),未經授權禁止轉載。