7.如何實現一個秒殺系統,保證只有幾位用戶能買到某件商品


設計這個系統是一個考慮全面的問題,可以發散出很多問題,考察很多方面,不是僅僅回答通過redis的自減操作完成

比如簡單的方案:

1,頁面開啟倒計時,要保證不能把下單接口暴露過早暴露出來,防止機器刷下單接口

2,前端限流,比如nginx對下單接口限流,命中限流則返回302到秒殺頁

3,后端單獨部署,獨立域名和nginx,與線上正常運行的系統隔離開來,避免影響到線上環境

4,由於生成訂單操作比較耗時,采用隊列的方式來解耦下單成功和生成訂單,針對進入后端的請求,采用redis自減,針對自減結果>0的請求則認為下單成功,觸發一個生成訂單的消息,然后立即返回給用戶結果

5,用戶方面,針對秒殺成功有兩種處理方式

  a,用戶端收到秒殺成功的結果,則開啟提示頁面,並進入倒計時,倒計時時間為訂單生成的預估時間

  b,秒殺成功后,給當前用戶在redis中生成一個訂單生成狀態的標識,用戶端開啟提示頁面,loading,並輪詢后端訂單生成狀態,生成成功之后讓前端跳轉到訂單頁面

6,訂單服務訂閱下單系統發送的消息,並開始生成訂單,生成訂單成功之后更新redis中用戶秒殺訂單的狀態為已生成訂單

 

系統應該有頁面和接口

頁面用於展示用戶界面,接口用於獲取數據

界面:秒殺頁面,秒殺成功頁面,秒殺失敗頁面,命中限流頁面(查看訂單頁面不算秒殺系統的功能)

接口:秒殺下單接口,秒殺成功獲取訂單生成狀態接口


免責聲明!

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



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