網購秒殺系統架構設計案例分析

在這裏插入圖片描述

大型網站技術架構-核心原理與案例分析
作者:李智慧
申明:文章版權歸作者所有,若有侵權,請聯繫刪除

秒殺是電子商務網站常見的一種營銷手段:將少量商品(通常只有一件)以極低的價格,在特定的時間點開始出售。比如一元錢的手機,五元錢的電腦,十 元錢的汽車等。

因爲商品價格誘人,而且數量有限,所以很多人趨之若鶩,在秒殺活動開始前涌入網站,等到秒殺活動開始的一-瞬間,點下購買按鈕(在此之前購買按鈕爲灰色,不可以點擊),搶購商品。這些商品因爲在活動開始的一秒內就被賣光了,所以被稱作秒殺。

網站通過這種營銷手段,製造某種轟動效應,從而達到網站推廣的目的。而最終能夠被幸運之神眷顧,秒到商品的只有一兩個人而已。很多電子商務網站已經把秒殺活動常態化了,經常性地舉行秒殺活動。

秒殺雖然對網站推廣有很多好處,也能給消費者帶來利益( 雖然是很少的幾個人),但是對網站技術卻是極大的挑戰:網站是爲正常運營設計的,而秒殺活動帶來的併發訪問用戶卻是平時的數百倍甚至上千倍。網站如果爲秒殺時的最高併發訪問量進行設計部署,就需要比正常運營多得多的服務器,而這些服務器在絕大部分時候都是用不着的,浪費驚人。所以網站的秒殺業務不能使用正常的網站業務流程,也不能和正常的網站交易業務共用服務器,必須設計部署專門的秒殺系統,進行專門應對。

12.1 秒殺活動的技術挑戰

假設某網站秒殺活動只推出一件商品,預計會吸引1萬人參加活動,也就是說最大併發請求數是10,000,秒殺系統需要面對的技術挑戰有如下幾點。

1.對現有網站業務造成衝擊

秒殺活動只是網站營銷的一個附加活動,這個活動具有時間短,併發訪問量大的特點,如果和網站原有應用部署在一起,必然會對現有業務造成衝擊,稍有不慎可能導致整個網站癱瘓。

2.高併發下的應用、數據庫負載

用戶在秒殺開始前,通過不停刷新瀏覽器頁面以保證不會錯過秒殺,這些請求如果按照一般的網站應用架構,訪問應用服務器、連接數據庫,會對應用服務器和數據庫服務器造成極大的負載壓力。

3.突然增加的網絡及服務器帶寬

假設商品頁面大小200K ( 主要是商品圖片大小),那麼需要的網絡和服務器帶寬是2G ( 200K x 10,000),這些網絡帶寬是因爲秒殺活動新增的,超過網站平時使用的帶寬。

4.直接下單

秒殺的遊戲規則是到了秒殺時間才能開始對商品下單購買,在此時間點之前,只能瀏覽商品信息,不能下單。而下單頁面也是一一個普通的URL,如果得到這個URL,不用等到秒殺開始就可以下單了。

12.2 秒殺系統的應對策略

爲了應對上述挑戰,秒殺系統的應對策略有如下幾點。

1.秒殺系統獨立部署

爲了避免因爲秒殺活動的高併發訪問而拖垮整個網站,使整個網站不必面對蜂擁而來的用戶訪問,可將秒殺系統獨立部署;如果需要,還可以使用獨立的域名,使其與網站完全隔離,即使秒殺系統崩潰了,也不會對網站造成任何影響。

2.秒殺商品頁面靜態化

重新設計秒殺商品頁面,不使用網站原來的商品詳情頁面,頁面內容靜態化:將商品描述、商品參數、成交記錄和用戶評價全部寫入-一個靜態頁面,用戶請求不需要經過應用服務器的業務邏輯處理,也不需要訪問數據庫。所以秒殺商品服務不需要部署動態的Web服務器和數據庫服務器。

3.租借秒殺活動網絡帶寬

因爲秒殺新增的網絡帶寬,必須和運營商重新購買或者租借。爲減輕網站服務器的壓力,需要將秒殺商品頁面緩存在CDN,同樣需要和CDN服務商臨時租借新增的出口帶寬。

4.動態生成隨機下單頁面URL

爲了避免用戶直接訪問下單頁面URL,需要將該URL動態化,即使秒殺系統的開發者也無法在秒殺開始前訪問下單頁面的URL。辦法是在下單頁面URL加入由服務器端生成的隨機數作爲參數,在秒殺開始的時候才能得到。

12.3 秒殺系統架構設計

秒殺系統爲秒殺而設計,不同於一般的網購行爲,參與秒殺活動的用戶更關心地是如何能快速刷新商品頁面,在秒殺開始的時候搶先進入下單頁面,而不是商品詳情等用戶體驗細節,因此秒殺系統的頁面設計應儘可能簡單。如圖12.1所示。商品頁面中的購買按鈕只有在秒殺活動開始的時候才變亮,在此之前及秒殺商品賣出後,該按鈕都是灰色的,不可以點擊。

在這裏插入圖片描述

下單表單也儘可能簡單,購買數量只能是一一個且不可以修改,送貨地址和付款方式都使用用戶默認設置,沒有默認也可以不填,允許等訂單提交後修改;只有第一個提交的訂單發送給網站的訂單子系統,其餘用戶提交訂單後只能看到秒殺結束頁面,如圖12.2所示。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FbV5WziV-1572577668569)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.jpg)]

除了上面提到的秒殺系統的技術挑戰及應對策略,還有一些其他問題需要處理。

1.如何控制秒殺商品頁面購買按鈕的點亮

購買按鈕只有在秒殺活動開始的時候才能點亮,在此之前是灰色的。如果該頁面是動態生成的,當然可以在服務器端構造響應頁面輸出,控制該按鈕是灰色還是點亮,但是爲了減輕服務器端負載壓力,更好地利用CDN、反向代理等性能優化手段,該頁面被設計爲靜態頁面,緩存在CDN、反向代理服務器上,甚至用戶瀏覽器上。秒殺開始時,用戶刷新頁面,請求根本不會到達應用服務器。解決辦法是使用JavaScript 腳本控制,在秒殺商品靜態頁面中加入一個JavaScript文件引用,該JavaScript文件中加入秒殺是否開始的標誌和下單頁面URL的隨機數參數,當秒殺開始的時候生成一個 新的JavaScript文件並被用戶瀏覽器加載, 控制秒殺商品頁面的展示。這個JavaScript文件使用隨機版本號,並且不被瀏覽器、CDN和反向代理服務器緩存。如圖12.3所示。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MVad1tW4-1572577668570)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image006.jpg)]

這個JavaScript文件非常小,即使每次瀏覽器刷新都訪問JavaScript文件服務器也不會對服務器集羣和網絡帶寬造成太大壓力。

2.如何只允許第一個提交的訂單被髮送到訂單子系統

由於最終能夠成功秒殺到商品的用戶只有一個,因此需要在用戶提交訂單時,檢查是否已經有訂單提交。事實上,由於最終能夠成功提交訂單的用戶只有一個,爲了減輕下單頁面服務器的負載壓力,可以控制進入下單頁面的入口,只有少數用戶能進入下單頁面,其他用戶直接進入秒殺結束頁面。假設下單服務器集羣有10臺服務器,每臺服務器只接受最多10個下單請求,如圖12.4所示。秒殺系統的整體架構如圖12.5所示。

在這裏插入圖片描述

12.4 小結

秒殺是對網站架構的極大考驗,在難以預計和控制的高併發訪問的衝擊下,稍有不慎,系統就會被用戶秒殺,導致整個系統宕機,活動失敗,構成重大事故。因此在遵循秒殺活動遊戲規則的基礎上,爲了保證系統的安全,保持適度的公平公正即可。即使系統出了故障,也不應該給用戶顯示出錯頁面,而是顯示秒殺活動結束頁面,避免不必要的困擾。除了上面提到的一-些針對秒殺活動進行的架構設計,在本書第10章中提到的許多性能優化設計都可以用於秒殺系統的優化。出錯頁面,而是顯示秒殺活動結束頁面,避免不必要的困擾。除了上面提到的一-些針對秒殺活動進行的架構設計,在本書第10章中提到的許多性能優化設計都可以用於秒殺系統的優化。

發佈了141 篇原創文章 · 獲贊 158 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章