秒杀系统相关
參考:https://my.oschina.net/xianggao/blog/524943
1.正常電子商務流程;
查詢商品——>創建訂單——>扣減庫存——>更新訂單——>付款——>賣家發貨;
2.秒殺業務的特征;
低廉價格、大幅推廣、瞬時售空、一般是定時上架、時間短、瞬時并發量高;
**秒殺技術挑戰**假如某網站秒殺活動只推出一件商品,預計會吸引1萬人參加活動,也就是說最大并發請求數是10000,秒殺系統需要面對的技術挑戰有:
1).對現有網站業務造成沖擊;
秒殺活動只是網站營銷的一個附加活動,這個活動具有時間短,并發訪問量大的特點,如果和網站原有應用部署在一起,必然會對現有業務造成沖擊,稍有不慎可能導致整個網站癱瘓;
解決方案:將秒殺系統獨立部署,甚至使用獨立域名,使其與網站完全隔離;
2).高并發下的應用、數據庫負載;
用戶在秒殺開始前,通過不停刷新瀏覽器頁面以保證不會錯過秒殺,這些請求如果按照一般的網站應用架構,訪問應用服務器、連接數據庫,會對應用服務器和數據庫造成負載壓力;
解決方案:通過緩存,如,使用redis,避免直接操作數據庫;
3).增加網絡及服務器帶寬;
4).秒殺前避免通過接口下單成功;解決辦法:下單頁面url加入由服務器端生成的隨機數作為參數,在秒殺開始的時候才能得到;
5).如何控制秒殺商品頁面購買按鈕的點亮;可通過javascript腳本控制;
6).如何只允許第一個提交的訂單被發送到訂單子系統;
解決辦法:需要在用戶提交訂單時,檢查是否已經有了訂單提交,如果已經有訂單提交成功,則需要更新javascript文件,更新秒殺開始標志為否,購買按鈕變灰;可以控制進入下單頁面的入口,只有少數用戶能進入下單頁面,其它用戶直接進入秒殺結束頁面;
用戶體驗到的場景:亮色購買——>下單頁面,提交訂單——>付款——>下單成功;
亮色購買——>下單頁面,提交訂單——>秒殺結束
亮色購買——>秒殺結束
灰色購買;
7).減庫存的操作
有兩種選擇,一種是拍下減庫存,另外一種是付款減庫存;可以采用“拍下減庫存”的方式,拍下就是一瞬間的事,對用戶體驗會好些(沒有支付的,處理方案:設置一個最長付款時間,比如30分鐘,后臺有個定時任務,輪訓超過30分鐘的待付款訂單,然后關閉訂單,恢復庫存);
8).庫存會帶來“超賣”的問題:售出數量多于庫存數量;
由于庫存并發更新的問題,導致在實際庫存已經不足的情況下,庫存依然在減,導致賣家的商品賣得件數超過秒殺的預期。方式:采用樂觀鎖;減庫存前,先查一下庫存數a,更新庫存時,若是查到庫存數b=a,則執行更新操作;
還有一種方式,會更好些,叫做嘗試扣減庫存,扣減庫存成功才會進行下單邏輯;先檢查某商品,銷售數據是否<預期數,若成立,則執行更新操作;
此時需要搭建集群服務器;windows每個進程的線程數不超過2000;linux每個進程的線程數不超過1000;
總結
- 上一篇: Mysql乐观锁与悲观锁的区别
- 下一篇: vue生命周期中文图