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