如何設計一個秒殺系統

如何設計一個秒殺系統

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