秒殺業務的特色就是多我的讀一個數據,難點就是讀寫衝突,鎖狀況特別的嚴重。 因此咱們儘可能不要讓請求落在數據庫上去,讓請求攔截在系統的上游。解決思路:前端
一、限流:屏蔽掉無用的流量,容許少部分流量流向後端。redis
二、削峯:瞬時大流量峯值容易壓垮系統。經常使用的消峯方法有異步處理、緩存和消息中間件等技術數據庫
前端優化後端
一、前端靜態資源緩存,頁面靜態化和使用cdn緩存或redis緩存緩存
二、限流:1使用驗證碼防止機器人爬蟲腳本自動提交2禁止重複提交,用戶提交後按鈕置灰併發
後端優化負載均衡
一、利用負載均衡,使用多個機器處理併發請求前端優化
二、秒殺開始前,前臺不能獲得秒殺地址,防止提早獲得秒殺地址,模擬秒殺請求異步
三、限制同一個用戶id訪問頻率高併發
四、限制同一時間請求次數,達到請求上限時,隨機拒絕部分請求來保證服務可用
五、業務分離,將秒殺系統和其它業務分離,單獨放在高配機器上,防止影響其它業務系統
六、將秒殺請求放入到消息隊列隊列,後臺訂閱消息減庫存,檢測消息隊列長度,達到最大庫存不加消息隊列,直接返回秒殺失敗的消息
七、利用緩存應對讀請求,利用緩存減輕數據庫壓力
八、利用緩存應對寫請求,將數據庫的庫存數據轉到redis裏面,全部減庫存操做都在redis裏面進行,而後經過後臺進程把redis裏面的用戶秒殺請求同步到數據庫