抢购时,用异步队列处理下单,那怎么实时把下单结果通知用户呢?
生活随笔
收集整理的這篇文章主要介紹了
抢购时,用异步队列处理下单,那怎么实时把下单结果通知用户呢?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
client端用js輪詢一個接口,用來獲取處理狀態
搶購最重要的是要保證庫存數據的強一致性,搶購的瞬時流量非常大,如果使用MySql等一些關系型數據庫可能會扛不住這方面的壓力。一般會結合緩存中間件進行處理,例如redis。搶購開始前,將商品和庫存數據同步到redis中,所有的搶購操作都在redis中進行處理,后臺開啟一個異步任務,定時的將庫存數據刷到數據庫中。跟著開始對訂單進行付款,由于流量較大,第三方支付系統本身也對調用端的應用限制流量,所以你這邊所說的應該是我接下來需要描述的。這里必然要使用消息隊列(也就是你所說的異步隊列),可以參考淘寶雙11的限流措施,為了保護系統不受高流量的沖擊而導致系統崩潰的問題,消息隊列做了一層緩沖保護,系統需要設計一個窗口模型,窗口模型會實時的刷新用戶辦理手續的狀態。例如,用戶下單之后準備去付款,這個時候會跳到辦事大廳的服務窗口,如果此時窗口都滿了,也就是消費者的數量達到上線了,那么需要用戶開始排隊,系統可以通過彈出等待窗口,讓用戶等待一下,一旦有空閑的線程釋放出來,用戶就可以開始支付下單。上面的是以拍下減庫存的模型進行說明,如果你們設計的系統是付款減庫存,稍微會有些出入,但是同樣也需要這樣的窗口需要告知用戶狀態,及時用戶付款成功,雖然沒及時把狀態返回給用戶,用戶能夠通過一個頁面及時查看到他的窗口狀態就可以了。
搶購最重要的是要保證庫存數據的強一致性,搶購的瞬時流量非常大,如果使用MySql等一些關系型數據庫可能會扛不住這方面的壓力。一般會結合緩存中間件進行處理,例如redis。搶購開始前,將商品和庫存數據同步到redis中,所有的搶購操作都在redis中進行處理,后臺開啟一個異步任務,定時的將庫存數據刷到數據庫中。跟著開始對訂單進行付款,由于流量較大,第三方支付系統本身也對調用端的應用限制流量,所以你這邊所說的應該是我接下來需要描述的。這里必然要使用消息隊列(也就是你所說的異步隊列),可以參考淘寶雙11的限流措施,為了保護系統不受高流量的沖擊而導致系統崩潰的問題,消息隊列做了一層緩沖保護,系統需要設計一個窗口模型,窗口模型會實時的刷新用戶辦理手續的狀態。例如,用戶下單之后準備去付款,這個時候會跳到辦事大廳的服務窗口,如果此時窗口都滿了,也就是消費者的數量達到上線了,那么需要用戶開始排隊,系統可以通過彈出等待窗口,讓用戶等待一下,一旦有空閑的線程釋放出來,用戶就可以開始支付下單。上面的是以拍下減庫存的模型進行說明,如果你們設計的系統是付款減庫存,稍微會有些出入,但是同樣也需要這樣的窗口需要告知用戶狀態,及時用戶付款成功,雖然沒及時把狀態返回給用戶,用戶能夠通過一個頁面及時查看到他的窗口狀態就可以了。
總結
以上是生活随笔為你收集整理的抢购时,用异步队列处理下单,那怎么实时把下单结果通知用户呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黎明觉醒载具怎么获得?
- 下一篇: 芥香脆口樱桃萝卜的做法?