秒殺系統設計面試


秒殺業務的特點就是多個人讀一個數據,難點就是讀寫沖突,鎖情況特別的嚴重。 所以我們盡量不要讓請求落在數據庫上去,讓請求攔截在系統的上游。解決思路:

1、限流:屏蔽掉無用的流量,允許少部分流量流向后端。

2、削峰:瞬時大流量峰值容易壓垮系統。常用的消峰方法有異步處理、緩存和消息中間件等技術

  • 異步處理:秒殺系統是一個高並發系統,采用異步處理模式可以極大地提高系統並發量,其實異步處理就是削峰的一種實現方式。
  • 緩存:秒殺系統本身是一個典型的讀多寫少的應用場景【一趟火車其實只有2000張票,200w個人來買,最多2000個人下單成功,其他人都是查詢庫存,寫比例只有0.1%,讀比例占99.9%】,非常適合使用緩存。
  • 消息隊列:消息隊列可以削峰,將攔截大量並發請求,這也是一個異步處理過程,后台業務根據自己的處理能力,從消息隊列中主動的拉取請求消息進行業務處理。

前端優化

1、前端靜態資源緩存,頁面靜態化和使用cdn緩存或redis緩存

2、限流:1使用驗證碼防止機器人爬蟲腳本自動提交2禁止重復提交,用戶提交后按鈕置灰

后端優化

1、利用負載均衡,使用多個機器處理並發請求

2、秒殺開始前,前台不能得到秒殺地址,防止提前得到秒殺地址,模擬秒殺請求

3、限制同一個用戶id訪問頻率

4、限制同一時間請求次數,達到請求上限時,隨機拒絕部分請求來保證服務可用

5、業務分離,將秒殺系統和其它業務分離,單獨放在高配機器上,防止影響其它業務系統

6、將秒殺請求放入到消息隊列隊列,后台訂閱消息減庫存,檢測消息隊列長度,達到最大庫存不加消息隊列,直接返回秒殺失敗的消息

7、利用緩存應對讀請求,利用緩存減輕數據庫壓力

8、利用緩存應對寫請求,將數據庫的庫存數據轉到redis里面,所有減庫存操作都在redis里面進行,然后通過后台進程把redis里面的用戶秒殺請求同步到數據庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM