網(wǎng)購秒殺系統(tǒng)架構(gòu)設(shè)計(jì)案例分析

秒殺活動的技術(shù)挑戰(zhàn)

假設(shè)某網(wǎng)站秒殺活動只推出一件商品,預(yù)計(jì)會吸引 1 萬人參加活動妖泄,也就是說最大并發(fā)請求數(shù)是 10000驹沿,秒殺系統(tǒng)需要面對的技術(shù)挑戰(zhàn)有如下幾點(diǎn)。

  1. 對現(xiàn)有網(wǎng)站業(yè)務(wù)造成沖擊
    秒殺活動只是網(wǎng)站營銷的一個附加活動蹈胡,這個活動具有時間短甚负,并發(fā)訪問量大的特點(diǎn),如果和網(wǎng)站原有應(yīng)用部署在一起审残,必然會對現(xiàn)有業(yè)務(wù)造成沖擊梭域,稍有不慎可能導(dǎo)致整個網(wǎng)站癱瘓。

  2. 高并發(fā)下的應(yīng)用搅轿、數(shù)據(jù)庫負(fù)載
    用戶在秒殺開始前病涨,通過不停刷新瀏覽器頁面以保證不會錯過秒殺,這些請求如果按照一般的網(wǎng)站應(yīng)用架構(gòu)璧坟,訪問應(yīng)用服務(wù)器既穆、連接數(shù)據(jù)庫,會對應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器造成極大的負(fù)載壓力雀鹃。

  3. 突然增加的網(wǎng)絡(luò)及服務(wù)器帶寬
    假設(shè)商品頁面大小 200K(主要是商品圖片大谢霉ぁ),那么需要的網(wǎng)絡(luò)和服務(wù)器帶寬是 2G(200K x 10000 ) 黎茎,這些網(wǎng)絡(luò)帶寬是因?yàn)槊霘⒒顒有略龅哪衣^網(wǎng)站平時使用的帶寬。

  4. 直接下單
    秒殺的游戲規(guī)則是到了秒殺時間才能開始對商品下單購買傅瞻,在此時間點(diǎn)之前踢代,只能瀏覽商品信息,不能下單嗅骄。而下單頁面也是一個普通的 URL胳挎,如果得到這個 URL,不用等到秒殺開始就可以下單了溺森。

秒殺系統(tǒng)的應(yīng)對策略

  1. 秒殺系統(tǒng)獨(dú)立部署
    為了避免因?yàn)槊霘⒒顒拥母卟l(fā)訪問而拖垮整個網(wǎng)站慕爬,使整個網(wǎng)站不必面對蜂擁而來的用戶訪問窑眯,可將秒殺系統(tǒng)獨(dú)立部署;如果需要医窿,還可以使用獨(dú)立的域名伸但,使其與網(wǎng)站完全隔離,即使秒殺系統(tǒng)崩潰了留搔,也不會對網(wǎng)站造成任何影響更胖。

  2. 秒殺商品頁面靜態(tài)化
    重新設(shè)計(jì)秒殺商品頁面,不使用網(wǎng)站原來的商品詳情頁面隔显,頁面內(nèi)容靜態(tài)化:將商品描述却妨、商品參數(shù)、成交記錄和用戶評價全部寫入一個靜態(tài)頁面括眠,用戶請求不需要經(jīng)過應(yīng)用服務(wù)器的業(yè)務(wù)邏輯處理彪标,也不需要訪問數(shù)據(jù)庫。所以秒殺商品服務(wù)不需要部署動態(tài)的 Web 服務(wù)器和數(shù)據(jù)庫服務(wù)器掷豺。

  3. 租借秒殺活動網(wǎng)絡(luò)帶
    因?yàn)槊霘⑿略龅木W(wǎng)絡(luò)帶寬捞烟,必須和運(yùn)營商重新購買或者租借。為了減輕網(wǎng)站服務(wù)器的壓力当船,需要將秒殺商品頁面緩存在 CDN题画,同樣需要和 CDN 服務(wù)商臨時租借新增的出口帶寬。

  4. 動態(tài)生成隨機(jī)下單頁面 URL
    為了避免用戶直接訪問下單頁面 URL德频,需要將該 URL 動態(tài)化苍息,即使秒殺系統(tǒng)的開發(fā)者也無法在秒殺開始前訪問下單頁面的 URL。辦法是在下單頁面 URL 加入由服務(wù)器端生成的隨機(jī)數(shù)作為參數(shù)壹置,在秒殺開始的時候才能得到竞思。

秒殺系統(tǒng)架構(gòu)設(shè)計(jì)

秒殺系統(tǒng)為秒殺而設(shè)計(jì),不同于一般的網(wǎng)購行為钞护,參與秒殺活動的用戶更關(guān)心地是如何能快速刷新商品頁面盖喷,在秒殺開始的時候搶先進(jìn)入下單頁面,而不是商品詳情等用戶體驗(yàn)細(xì)節(jié)难咕,因此秒殺系統(tǒng)的頁面設(shè)計(jì)應(yīng)盡可能簡單课梳。

商品頁面中的購買按鈕只有在秒殺活動開始的時候才變亮,在此之前及秒殺商品賣出后步藕,該按鈕都是灰色的惦界,不可以點(diǎn)擊挑格。

下單表單也盡可能簡單咙冗,購買數(shù)量只能是一個且不可以修改,送貨地址和付款方式都使用用戶默認(rèn)設(shè)置漂彤,沒有默認(rèn)也可以不填雾消,允許等訂單提交后修改灾搏;只有第一個提交的訂單發(fā)送給網(wǎng)站的訂單子系統(tǒng), 其余用戶提交訂單后只能看到秒殺結(jié)束頁面立润。

除了上面提到的秒殺系統(tǒng)的技術(shù)挑戰(zhàn)及應(yīng)對策略缺前,還有一些其他問題需要處理蚂子。

如何控制秒殺商品頁面購買按鈕的點(diǎn)亮

購買按鈕只有在秒殺活動開始的時候才能點(diǎn)亮,在此之前是灰色的。如果該頁面是動態(tài)生成的帚桩,當(dāng)然可以在服務(wù)器端構(gòu)造響應(yīng)頁面輸出,控制該按鈕是灰色還是點(diǎn)亮砂蔽,但是為了減輕服務(wù)器端負(fù)載壓力尔苦,更好地利用 CDN 、反向代理等性能優(yōu)化手段提陶,該頁面被設(shè)計(jì)為靜態(tài)頁面烫沙,緩存在 CDN、反向代理服務(wù)器上隙笆,甚至用戶瀏覽器上锌蓄。秒殺開始時,用戶刷新頁面撑柔,請求根本不會到達(dá)應(yīng)用服務(wù)器瘸爽。

解決辦法是使用 JavaScript 腳本控制,在秒殺商品靜態(tài)頁面中加入一個 JavaScript 文件引用铅忿,該 JavaScript 文件中加入秒殺是否開始的標(biāo)志和下單頁面 URL 的隨機(jī)數(shù)參數(shù)蝶糯,當(dāng)秒殺幵始的時候生成一個新的 JavaScript 文件并被用戶瀏覽器加載, 控制秒殺商品頁面的展示辆沦。這 個 JavaScript 文件使用隨機(jī)版本號昼捍,并且不被瀏覽器、 CDN 和反向代理服務(wù)器緩存肢扯。

秒殺商品點(diǎn)亮過程

這個 JavaScript 文件非常小妒茬,即使每次瀏覽器刷新都訪問 JavaScript 文件服務(wù)器也不會對服務(wù)器集群和網(wǎng)絡(luò)帶寬造成太大壓力。

如何只允許第一個提交的訂單被發(fā)送到訂單子系統(tǒng)

由于最終能夠成功秒殺到商品的用戶只有一個蔚晨,因此需要在用戶提交訂單時乍钻,檢查是否已經(jīng)有訂單提交。事實(shí)上铭腕,由于最終能夠成功提交訂單的用戶只有一個银择,為了減輕下單頁面服務(wù)器的負(fù)載壓力,可以控制進(jìn)入下單頁面的入口累舷,只有少數(shù)用戶能進(jìn)入下單頁面浩考,其他用戶直接進(jìn)入秒殺結(jié)束頁面。假設(shè)下單服務(wù)器集群有 10 臺服務(wù)器被盈,每臺服務(wù)器只接受最多 10 個下單請求析孽。

秒殺下單流程

秒殺系統(tǒng)的整體架構(gòu)圖

秒殺系統(tǒng)整體架構(gòu)

總結(jié)

秒殺是對網(wǎng)站架構(gòu)的極大考驗(yàn)搭伤,在難以預(yù)計(jì)和控制的高并發(fā)訪問的沖擊下,稍有不慎袜瞬,系統(tǒng)就會被用戶秒殺怜俐,導(dǎo)致整個系統(tǒng)宕機(jī),活動失敗邓尤,構(gòu)成重大事故拍鲤。因此在遵循秒殺活動游戲規(guī)則的基礎(chǔ)上,為了保證系統(tǒng)的安全汞扎,保持適度的公平公正即可殿漠。即使系統(tǒng)出了故障,也不應(yīng)該給用戶顯示出錯頁面佩捞,而是顯示秒殺活動結(jié)束頁面绞幌,避免不必要的困擾。另外維基百科的高性能架構(gòu)設(shè)計(jì)分析中提到的許多性能優(yōu)化設(shè)計(jì)都可以用于秒殺系統(tǒng)的優(yōu)化一忱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莲蜘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帘营,更是在濱河造成了極大的恐慌票渠,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芬迄,死亡現(xiàn)場離奇詭異问顷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)禀梳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門杜窄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人算途,你說我怎么就攤上這事塞耕。” “怎么了嘴瓤?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵扫外,是天一觀的道長。 經(jīng)常有香客問我廓脆,道長筛谚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任停忿,我火速辦了婚禮驾讲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己蝎毡,他們只是感情好厚柳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布氧枣。 她就那樣靜靜地躺著沐兵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪便监。 梳的紋絲不亂的頭發(fā)上扎谎,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音烧董,去河邊找鬼毁靶。 笑死,一個胖子當(dāng)著我的面吹牛逊移,可吹牛的內(nèi)容都是我干的预吆。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼胳泉,長吁一口氣:“原來是場噩夢啊……” “哼拐叉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扇商,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤凤瘦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后案铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬芥,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年控汉,在試婚紗的時候發(fā)現(xiàn)自己被綠了笔诵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡姑子,死狀恐怖嗤放,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壁酬,我是刑警寧澤次酌,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站舆乔,受9級特大地震影響岳服,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜希俩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一吊宋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颜武,春花似錦璃搜、人聲如沸拖吼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吊档。三九已至,卻和暖如春唾糯,著一層夾襖步出監(jiān)牢的瞬間怠硼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工移怯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留香璃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓舟误,卻偏偏與公主長得像葡秒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嵌溢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容