引言
本文代碼已提交至Github,有興趣的同學可以下載來看看:https://github.com/ylw-github/taodong-shop
秒殺系統的代碼在前面博客已經實現了,有興趣的同學可以參閱下:
- 《淘東電商項目(73) -秒殺系統(前端優化)》
- 《淘東電商項目(74) -秒殺系統(庫存超賣解決方案》
- 《淘東電商項目(75) -秒殺系統(用戶操作頻率限制)》
- 《淘東電商項目(76) -秒殺系統(完整代碼實現)》
本文目錄結構:
l____引言
l____ 1.小結
1.小結
下面貼上我自己整理的原理圖,如下:
前端:
- 使用動靜分離、將靜態資源存放到第三方文件服務器中實現cdn加速,目的減輕秒殺搶購帶寬。
- 當用戶點擊秒殺按鈕的時候,應該將按鈕disabled(禁止),防止重複提交。
- 使用複雜的圖形驗證碼防止機器模擬。
- 秒殺詳情頁面,使用定時器根據用戶信息查詢秒殺結果。
- 商品的詳情頁面使用
nginx+lua+openresty
實現靜態化頁面。
網關:
- Ratelimter、Nginx、Hystrix、Redis實現限流( 令牌桶+漏桶算法) , 對用戶秒殺請求實現限流和服務保護。
- 用戶黑名單和白名單攔截。
秒殺接口:
- 服務降級級、隔離、熔斷。
- 從redis中獲取秒殺的令牌(能夠獲取到令牌就能夠秒殺成功,否則就秒殺失敗!)。
- 異步使用MQ執行修改庫存操作。
- 提供一個根據用戶信息查詢秒殺結果接口。
項目部署點:
- Nginx+lvs 實現服務高可用和集羣
- docker擴容
其他點:
- 分時段搶購
具體例子:現在有100個商品同時秒殺搶購,每個商品庫存爲100個? 基於mq+庫存令牌桶 100*100=10000, 數據庫執行修改庫存操作壓力還是非常大?
最靠譜的訪問,可仿照12306分時段秒殺(中午、下午) 。