天天看點

阿裡雙十一秒殺系統架構設計,有哪些技術關鍵點?

馬上要到雙11了,就來談談如何設計一個秒殺系統架構

阿裡雙十一秒殺系統架構設計,有哪些技術關鍵點?

技術挑戰

1. 對原有業務形成沖擊

秒殺活動隻是網站營銷的一個附加活動,特點是:時間短、并發通路量大,如果和網站原有應用部署在一起,必然會對現有業務造成沖擊。

解決方案:将秒殺系統獨立部署,甚至使用獨立域名,使其與網站完全隔離。

2. 高并發下資料庫、應用負載

使用者在秒殺開始前,通過不停重新整理浏覽器頁面以保證不會錯過秒殺,這些請求如果按照一般的網站應用架構,通路

應用伺服器、連接配接資料庫,

會對應用伺服器和資料庫伺服器造成負載壓力。

解決方案:重新設計秒殺商品頁面,不使用網站原來的商品詳細頁面,頁面内容靜态化,使用者請求不需要經過

應用服務

3. 突然增大的伺服器和網絡帶寬

假設商品頁面大小200K,10000個請求的帶寬就是2G。

解決方案:因為秒殺新增的網絡帶寬,必須和營運商重新購買或者租借。為了減輕網站伺服器的壓力,

需要将秒殺商品頁面緩存到CDN

4. 防止秒殺前下單

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

解決方案:為了避免使用者直接通路下單頁面URL,需要将改URL動态化,即使秒殺系統的開發者也無法在秒殺開始前通路下單頁面的URL。辦法是在下單頁面URL加入由伺服器端生成的随機數作為參數,在秒殺開始的時候才能得到。

應對政策

1. 獨立部署

和原有業務部署在不同伺服器,防止高并發拖垮整個網站

2. 頁面靜态化

将商品詳情、描述靜态化到頁面

3. 租借秒殺網絡帶寬

向營運商租借帶寬

4. 動态生成随機下單頁面URL

無法在秒殺前通路下單頁面的URL:加入伺服器端生成的随機數作為參數,在秒殺開始前才能得到

架構設計

1. 控制秒殺購買頁面的點亮

購買按鈕隻有在活動開始的時候才能點亮,在此之前是灰色的。如果是動态頁面,可以很容易解決這個問題,但為了減輕伺服器端負載壓力,

更好的利用CDN、反向代理等性能優化手段,

該頁面被設計為靜态頁面,緩存在CDN、反向代理伺服器上,甚至使用者浏覽器上。秒殺開始時,使用者重新整理頁面,請求根本不會到達應用伺服器。

解決方案:秒殺商品頁面加入一個javascript引用,該javascript中加入秒殺是否開始的标志和下單頁面URL的随機數參數,該javascript使用随機版本号,不可被浏覽器緩存

當秒殺開始時,生成一個新的javascript檔案并被使用者浏覽器加載

阿裡雙十一秒殺系統架構設計,有哪些技術關鍵點?

2. 允許第一個訂單送出

秒殺開始,由于最終能夠成功秒殺到商品的使用者隻有一個,是以需要在使用者送出訂單時,檢查是否已經有訂單送出。

解決方案:為了減輕下單頁面伺服器的負載壓力,可以控制進入下單頁面入口,隻有先送出的少數使用者可進入,後邊的使用者直接進入秒殺結束頁面

阿裡雙十一秒殺系統架構設計,有哪些技術關鍵點?
阿裡雙十一秒殺系統架構設計,有哪些技術關鍵點?

下單伺服器檢查本機已處理的下單請求數目

*如果超過10條,直接傳回已結束頁面給使用者;

*如果未超過10條,則使用者可進入填寫訂單及确認頁面;

檢查全局已送出訂單數目

*已超過秒殺商品總數,傳回已結束頁面給使用者;

*未超過秒殺商品總數,送出到子訂單系統。

這樣就大大地減少了資料庫的負載壓力。