(四)秒殺扣庫存、訂單創建、支付、讀各種信息

扣庫存方案

下單減庫存?

  1. 併發請求
  2. 創建訂單(惡意下單&不會超賣)
  3. 扣庫存
  4. 支付

支付減庫存?

  1. 併發請求
  2. 創建訂單(訂單超賣)
  3. 支付 (訂單支付不了)
  4. 扣庫存

預扣庫存?

  1. 併發請求
  2. 扣庫存
  3. 創建訂單
  4. 支付(不支付庫存賣不出去)

先扣庫存然後創建訂單、支付
10分鐘不支付則取消訂單,避免不支付庫存賣不出去問題

極高併發下單服務極致性能
減少上下文切換
較少阻塞式I/O

I/O主要包括

  • rpc調用
  • 磁盤讀寫

無I/O

  • 拆解-扣庫存與寫訂單分開
  • 用內存
  • 用本地內存

單服務
單服務
多服務
多服務

  1. 初始化庫存到本地庫存
  2. 本地減庫存,成功則進行統一減庫存,失敗則返回
  3. 統一減庫存成功則寫入MQ,異步創建訂單
  4. 告知用戶搶購成功

創建、支付訂單

  • 與扣庫存服務隔離
    創建支付
  • 用戶收到搶購成功、頁面跳轉到訂單中心去支付

讀商品信息頁面

  • 與庫存服務隔離
  • 商品庫一主多從提高讀能力
  • 頁面靜態化+緩存+db實現即可

排隊進度查看

  • 數組A儲存排隊中,待創建訂單的用戶;數組B用作索引,存儲uid對應在數組A中的索引位置
  • 每次從數組A中依次消費數據,並記錄最近消費的索引值X
  • 用戶來查排隊進度時,從hash表B中取出該uid對應存儲的索引值Y;
  • 索引值Y-索引值X=排隊進度值

高性能讀庫存

無I/O

  1. 讀取本地庫存,無則主動拉去一次,有則返回
  2. 異步腳本定時同步庫存至本地
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章