go 商品秒杀系统架构设计
秒殺搶購背景
秒殺搶購架構(gòu)設(shè)計(jì)和模塊劃分
秒殺搶購接入層實(shí)現(xiàn)
電商網(wǎng)站的常規(guī)架構(gòu)
常規(guī)狀態(tài)下電商網(wǎng)站的架構(gòu)體系如下:
秒殺搶購業(yè)務(wù)分析
正常電子商務(wù)流程:
查詢商品 》 創(chuàng)建訂單 》 扣減庫存 》更新訂單 》付款 》賣家發(fā)貨 》確認(rèn)收貨
秒殺業(yè)務(wù)的特性:
(1)低廉價(jià)格;(2)大幅推廣;(3)瞬時(shí)售空;(4)一般是定時(shí)上架;(5)時(shí)間短、瞬時(shí)并發(fā)量高;
?假設(shè)某網(wǎng)站秒殺活動(dòng)只推出一件商品,預(yù)計(jì)會(huì)吸引1萬人參加活動(dòng),也就說最大并發(fā)請(qǐng)求數(shù)是10000,秒殺系統(tǒng)需要面對(duì)的技術(shù)挑戰(zhàn)有:
1.對(duì)現(xiàn)有網(wǎng)站業(yè)務(wù)造成沖擊
秒殺活動(dòng)只是網(wǎng)站營銷的一個(gè)附加活動(dòng),這個(gè)活動(dòng)具有時(shí)間短,并發(fā)訪問量大的特點(diǎn),如果和網(wǎng)站原有應(yīng)用部署在一起,必然會(huì)對(duì)現(xiàn)有業(yè)務(wù)造成沖擊,稍有不慎可能導(dǎo)致整個(gè)網(wǎng)站癱瘓。
解決方案:將秒殺系統(tǒng)獨(dú)立部署,甚至使用獨(dú)立域名,使其與網(wǎng)站完全隔離。
2. 高并發(fā)下的應(yīng)用、數(shù)據(jù)庫負(fù)載
用戶在秒殺開始前,通過不停刷新瀏覽器頁面以保證不會(huì)錯(cuò)過秒殺,這些請(qǐng)求如果按照一般的網(wǎng)站應(yīng)用架構(gòu),訪問應(yīng)用服務(wù)器、連接數(shù)據(jù)庫,會(huì)對(duì)應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器造成負(fù)載壓力。
解決方案:重新設(shè)計(jì)秒殺商品頁面,不使用網(wǎng)站原來的商品詳細(xì)頁面,頁面內(nèi)容靜態(tài)化,用戶請(qǐng)求不需要經(jīng)過應(yīng)用服務(wù)。
3. 突然增加的網(wǎng)絡(luò)及服務(wù)器帶寬
假設(shè)商品頁面大小200K(主要是商品圖片大小),那么需要的網(wǎng)絡(luò)和服務(wù)器帶寬是2G(200K×10000),這些網(wǎng)絡(luò)帶寬是因?yàn)槊霘⒒顒?dòng)新增的,超過網(wǎng)站平時(shí)使用的帶寬。
解決方案:因?yàn)槊霘⑿略龅木W(wǎng)絡(luò)帶寬,必須和運(yùn)營商重新購買或者租借。為了減輕網(wǎng)站服務(wù)器的壓力,需要將秒殺商品頁面緩存在CDN,同樣需要和CDN服務(wù)商臨時(shí)租借新增的出口帶寬。
4. 直接下單
秒殺的游戲規(guī)則是到了秒殺才能開始對(duì)商品下單購買,在此時(shí)間點(diǎn)之前,只能瀏覽商品信息,不能下單。而下單頁面也是一個(gè)普通的URL,如果得到這個(gè)URL,不用等到秒殺開始就可以下單了。
解決方案:為了避免用戶直接訪問下單頁面URL,需要將改URL動(dòng)態(tài)化,即使秒殺系統(tǒng)的開發(fā)者也無法在秒殺開始前訪問下單頁面的URL。辦法是在下單頁面URL加入由服務(wù)器端生成的隨機(jī)數(shù)作為參數(shù),在秒殺開始的時(shí)候才能得到。
5. 如何控制秒殺商品頁面購買按鈕的點(diǎn)亮
購買按鈕只有在秒殺開始的時(shí)候才能點(diǎn)亮,在此之前是灰色的。如果該頁面是動(dòng)態(tài)生成的,當(dāng)然可以在服務(wù)器端構(gòu)造響應(yīng)頁面輸出,控制該按鈕是灰色還 是點(diǎn)亮,但是為了減輕服務(wù)器端負(fù)載壓力,更好地利用CDN、反向代理等性能優(yōu)化手段,該頁面被設(shè)計(jì)為靜態(tài)頁面,緩存在CDN、反向代理服務(wù)器上,甚至用戶瀏覽器上。秒殺開始時(shí),用戶刷新頁面,請(qǐng)求根本不會(huì)到達(dá)應(yīng)用服務(wù)器。
解決方案:使用JavaScript腳本控制,在秒殺商品靜態(tài)頁面中加入一個(gè)JavaScript文件引用,該JavaScript文件中包含 秒殺開始標(biāo)志為否;當(dāng)秒殺開始的時(shí)候生成一個(gè)新的JavaScript文件(文件名保持不變,只是內(nèi)容不一樣),更新秒殺開始標(biāo)志為是,加入下單頁面的URL及隨機(jī)數(shù)參數(shù)(這個(gè)隨機(jī)數(shù)只會(huì)產(chǎn)生一個(gè),即所有人看到的URL都是同一個(gè),服務(wù)器端可以用redis這種分布式緩存服務(wù)器來保存隨機(jī)數(shù)),并被用戶瀏覽器加載,控制秒殺商品頁面的展示。這個(gè)JavaScript文件的加載可以加上隨機(jī)版本號(hào)(例如xx.js?v=32353823),這樣就不會(huì)被瀏覽器、CDN和反向代理服務(wù)器緩存。
這個(gè)JavaScript文件非常小,即使每次瀏覽器刷新都訪問JavaScript文件服務(wù)器也不會(huì)對(duì)服務(wù)器集群和網(wǎng)絡(luò)帶寬造成太大壓力。
…………
更多內(nèi)容參考:
秒殺系統(tǒng)架構(gòu)分析與實(shí)戰(zhàn) - 陶邦仁的個(gè)人空間 - OSCHINA - 中文開源技術(shù)交流社區(qū)
秒殺搶購功能的演進(jìn)
秒殺搶購的發(fā)展經(jīng)歷如下:
秒殺搶購架構(gòu)
秒殺搶購架構(gòu)圖如下,其內(nèi)部還有一個(gè)日志收集模塊用于數(shù)據(jù)挖掘篩選黑名單等。
代碼實(shí)現(xiàn)
接入層
邏輯層
總結(jié)
以上是生活随笔為你收集整理的go 商品秒杀系统架构设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G+4G双模双卡助力5G专网监测
- 下一篇: java信息管理系统总结_java实现科