阿里双十一秒杀系统架构设计,有哪些技术关键点?
馬上要到雙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條,則用戶可進入填寫訂單及確認頁面;
檢查全局已提交訂單數目
*已超過秒殺商品總數,返回已結束頁面給用戶;
*未超過秒殺商品總數,提交到子訂單系統。
這樣就大大地減少了數據庫的負載壓力。
那如何學習才能進入一線互聯網公司呢?
歡迎工作一到五年的 Java 的工程師朋友們加入的 Java 架構開發:685167672
本群提供免費的學習指導架構資料以及免費的解答
不懂得問題都可以在本群提出來之后還會有職業生涯規劃以及面試指導
最后,做一個愛思考,懂思考,會思考的程序員。
作者:美的讓人心動
鏈接:https://www.jianshu.com/p/43dfc0d942f6
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。
總結
以上是生活随笔為你收集整理的阿里双十一秒杀系统架构设计,有哪些技术关键点?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九年级相见欢原文(相见欢原文)
- 下一篇: 鸡肝(说一说鸡肝的简介)