天天看點

高并發之下訂單

  1. 商品詳情頁-購買-訂單确認頁(此時還沒有生産訂單隻是商品資料可來自緩存)-送出訂單(執行2-7邏輯)-支付頁
  2. 緩存中預熱的(提前從資料庫中把資料放入緩存)是要參加秒殺商品資訊(包括庫存數量),并對商品設定過期時間,這個時間應該是秒殺商品的結束時間,這麼做主要是緩解資料庫壓力提升響應速度。
  3. 并發秒殺(送出訂單)時候先從緩存中查詢是否有此商品,沒有說明秒殺結束了,有的話去預扣商品的庫存數量。
  4. 如果預扣成功說明庫存充足可以下單,響應給前端一個狀态,并去發消息到消息中間件,訂單服務去消費此消息然後開始真正的資料庫庫存扣減,扣減成功開始生成訂單并入庫。異步解耦訂單生成邏輯提升下單接口吞吐量。
  5. 前端訂單确認頁面可以去輪詢查詢訂單生成結果,一般有三種結果:生成訂單失敗既秒殺失敗或者還未消費到消息(排隊中)如果成功則去支付頁面。
  6. 這裡的異步生成訂單不存在分布式事務問題,因為預扣庫存僅僅是去緩存中扣減庫存數量,如果此時失敗并不會發送消息,如果成功那麼消息也應該被消費。由于采用是輪詢結果的方式是以即便訂單生成失敗使用者重新下單即可并不是必須要保證最終一緻的場景。
  7. 訂單成功後是從資料庫擷取的訂單資訊緩存中并沒有。