如何設計一個秒殺系統
如何設計一個秒殺系統
- 分流
- 動靜分離。靜態資源不佔用秒殺服務器系統資源,瀏覽器緩存或者cdn緩存,或者專門的靜態服務器(如OSS)負責響應。後端統一不作任何渲染操做,全部渲染均在js中完成,後端只負責數據傳遞。
- 後端服務代碼支持水平擴展,能夠隨時手動或者自動擴容。若是有條件,能夠申請阿里雲彈性擴容。
- 網關選擇,若是瞬間流量過5W,單nginx是承受不住的,能夠在DNS上就多配置些機子,讓DNS負載均衡,後端還能夠LVS+NGINGX一塊兒提供分發服務。
- 限流
- 客戶端與服務端均作好人機校驗,防止非正經常使用戶流量。
- 服務端作好限流操做,好比ip限流,資源限流,超出限流標準拒絕提供服務或者降級服務
- 提早發放令牌,全部用戶持令牌入場
- 服務分級
- 將搶購相關的全部服務進行分級。QPS,TPS太高致使服務端資源不足的時候將優先度較低的服務予以降級(好比發貨退貨)。保證核心成單功能,其他功能可搶購完成後補作。
- 削峯異步消費
- 前端與專門的通知服務器進行長鏈接,若是創建不了長鏈接則系統繁忙,搶購失敗
- 搶購請求統一放入MQ中,後端異步消費,完成後調用通知服務器予以通知
- 緩存
- 商品基礎信息提早緩存預熱,商品相關的數據信息均由緩存提供,若是是預計單場瞬時流量過大,能夠將商品頁面靜態化並緩存在CDN上。
- 庫存信息能夠使用redis自增來處理,先減庫存再成單。
- 代碼優化
- 後端調用鏈路儘可能短,全部的服務都不可以單點(均要集羣部署,全部的數據服務至少是主從級別,若是流量過大,可提供多主多從,將數據分區),都要有兜底措施(好比緩存系統若是全部的都掛了,也有有本地緩存兜住)
歡迎關注本站公眾號,獲取更多信息