木沐_Y
說到秒殺系統,我們第一反應有可能是電商平臺花樣繁多的抽獎活動、12306的搶票系統等,的確這些都涉及到了秒殺概念。
秒殺系統具備哪些特點?
1、瞬時高併發,短時間內的流量洪峰,用戶量的激增促使網站流量突破上限;
2、出現超賣現象,成功下單的人數比庫存量還要多;
3、業務流程簡單,沒有過多花俏功能。
秒殺系統該如何設計?
基於上面提到的特點,秒殺系統需要做到以下幾點:
1、前臺靜態資源走CDN加速
將JS、CSS、圖片、音視頻等文件放在CDN上採用預熱形式將資源刷新到各CDN節點上,使得用戶“就近讀取”,加快訪問速度,另外也減小源站服務器的壓力。
2、限流
對用戶請求做限制,同一時間段內同賬號禁止發送大量請求。
3、任務異步化處理
比如下單、郵件通知、短信接收等,業務能作異步處理的一定要異步處理,避免同步阻塞。
4、合理的緩存
秒殺的商品數據多數都不需要實時更新(除庫存等字段外),對於這類不需要實時更新的熱點數據放在緩存裡,避免從數據庫中查詢,可降低數據庫的負載壓力。
5、其它業務降級
任何一個平臺的軟硬件資源是有限的,所以我們可以將一些不重要的業務暫停服務,將資源讓出來給秒殺系統使用。
下面我們來詳細探討一下接口層如何處理。
上圖主要描述了後端接口在處理請求所做的操作:
1、操作緩存數據,緩存可以存放商品當前總量,如果Redis是分佈式部署,可以採用分佈式鎖來解決髒數據問題。
2、將不需要及時響應的業務放入消息隊列。
3、定時將緩存數據更新到數據庫,為了避免髒數據產生可以採用悲觀鎖和樂觀鎖兩種方式,個人比較推薦樂觀鎖方式。
4、消費消息隊列消息,針對消息類別做不同的操作。
秒殺系統存在較多不確定性(如:請求數、併發數),所以秒殺系統也離不開監測系統對各項指標的監測,在發現異常時要做熔斷處理,另外在資源不夠時提交做好擴容準備。
網絡圈
我以前的老闆讓你用二千塊,會發明才是四千啊。我在想鋪地板磚的。也面試造火箭。二千塊的初級地板磚工程師問你,地板磚面積有多少種規格。119平房屋沒種要鋪多少塊地板磚,市面上有多少種水泥,多少種河沙,水泥河沙,水的比例多少,要鋪多厚。不平的地面怎麼找平。影響地板磚凝固時間的因素有哪些。影響空磚因素有哪些。回答不上二千塊一個月。中級就問會不會刷牆,吊頂,安裝水電氣,門窗,空調,刮白。每種又出好多題。中級四千。高級地板磚工程師問他會不會修環球中心。發明塔吊,發明挖掘機。