秒殺網站如何用雲支撐?
- 2019 年 10 月 6 日
- 筆記
我們的互聯網客戶經常用「秒殺」營銷技巧吸引客戶的觀注,比如秒殺購房優惠券、秒殺汽車使用權等活動。正是巨大的優惠,讓很多平常沒有需求的客戶也集中在一個時間點關注這個營銷活動網頁,對後台的IT支撐能力帶來巨大的挑戰。今天我們用實際案例看一看上雲後,如何承接秒殺業務。

一、秒殺業務帶來的挑戰
1、對現有網站業務造成衝擊。
秒殺活動是營銷的一次性活動,時間短、並發量大。如果與原網站業務採用部署在同一套系統中,造成對現有業務造成巨大衝擊,或者將主網站直接擊垮,類似於一次DDOS攻擊。
2、高並發下的應用伺服器、資料庫伺服器負載。
用戶在秒殺前,會不斷地刷新網站,如果採用傳統的數據訪問方式,訪問應用程式伺服器、連接資料庫,會對這類動態程式伺服器造成巨大的負載。
3、網路頻寬突然增加。
如果訪問量達到1萬人,而該網站的秒殺商品頁的大小是200K,則此時需要的頻寬是2G,而平台也許正常流量頻寬只有100M。
4、下單網址泄露,被惡意下單
只有到了伺服器的秒殺時間精確秒,才允許訪問該秒殺下單的網址,如果該網站被提前公布,則可以繞開控制頁面直接提前下單。
二、如何應對這些挑戰
1、秒殺系統與主網站分開部署
為了避免因秒殺活動的高並發性帶來對整個業務系統的不可控,建議秒殺系統獨立部署。即使秒殺系統死掉,也不會影響主網站。同時,可以採用按小時的按需雲服務方式,秒殺活動結束,將這些資源釋放掉。
2、秒殺商品頁面靜態化
為避免秒殺商品頁面訪問應用伺服器(如Apache)、資料庫(如MySQL)帶來的壓力,建議將秒殺商品的詳情頁直接採用html靜態頁面承載。這樣可以充分利用CDN、反向代理伺服器的快取功能,在真實的伺服器外圍將訪問情況攔截掉。
3、將資料庫的內容快取至Redis記憶體資料庫中
秒殺開始前,應用程式將MySQL資料庫中的庫存數據提前讀取至Redis中,秒殺頁面直接從Redis進行讀取、扣除庫存的操作。Redis、MySQL通過MQ消息中間件進行數據的同步操作。
3、臨時增加網站頻寬或購買CDN
可以臨時購買雲服務商的互聯網頻寬,秒殺活動結束就釋放這些頻寬。或按上一條,購買CDN服務。
4、最複雜的一步,將秒殺頁面的URL設置為隨機數,並進行比較
程式設計師將秒殺頁面的URL通過某參數(如商品id,秒殺時間)進行md5加密,然後設置為秒殺頁面的URL地址。秒殺活動開始之前,商品id、 秒殺時間的md5值與資料庫中的URL md5值不相同,禁止訪問該URL。只有到了設置的條件,秒殺時間,md5值相同,該頁面才允許被繼續通過訪問。