03.07 如何設計一個秒殺系統?

木沐_Y


說到秒殺系統,我們第一反應有可能是電商平臺花樣繁多的抽獎活動、12306的搶票系統等,的確這些都涉及到了秒殺概念。

秒殺系統具備哪些特點?

1、瞬時高併發,短時間內的流量洪峰,用戶量的激增促使網站流量突破上限;

2、出現超賣現象,成功下單的人數比庫存量還要多;

3、業務流程簡單,沒有過多花俏功能。

秒殺系統該如何設計?

基於上面提到的特點,秒殺系統需要做到以下幾點:

1、前臺靜態資源走CDN加速

將JS、CSS、圖片、音視頻等文件放在CDN上採用預熱形式將資源刷新到各CDN節點上,使得用戶“就近讀取”,加快訪問速度,另外也減小源站服務器的壓力。

2、限流

對用戶請求做限制,同一時間段內同賬號禁止發送大量請求。

3、任務異步化處理

比如下單、郵件通知、短信接收等,業務能作異步處理的一定要異步處理,避免同步阻塞。

4、合理的緩存

秒殺的商品數據多數都不需要實時更新(除庫存等字段外),對於這類不需要實時更新的熱點數據放在緩存裡,避免從數據庫中查詢,可降低數據庫的負載壓力。

5、其它業務降級

任何一個平臺的軟硬件資源是有限的,所以我們可以將一些不重要的業務暫停服務,將資源讓出來給秒殺系統使用。


下面我們來詳細探討一下接口層如何處理。

上圖主要描述了後端接口在處理請求所做的操作:

1、操作緩存數據,緩存可以存放商品當前總量,如果Redis是分佈式部署,可以採用分佈式鎖來解決髒數據問題。

2、將不需要及時響應的業務放入消息隊列。

3、定時將緩存數據更新到數據庫,為了避免髒數據產生可以採用悲觀鎖和樂觀鎖兩種方式,個人比較推薦樂觀鎖方式。

4、消費消息隊列消息,針對消息類別做不同的操作。


秒殺系統存在較多不確定性(如:請求數、併發數),所以秒殺系統也離不開監測系統對各項指標的監測,在發現異常時要做熔斷處理,另外在資源不夠時提交做好擴容準備。

以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!

網絡圈


我以前的老闆讓你用二千塊,會發明才是四千啊。我在想鋪地板磚的。也面試造火箭。二千塊的初級地板磚工程師問你,地板磚面積有多少種規格。119平房屋沒種要鋪多少塊地板磚,市面上有多少種水泥,多少種河沙,水泥河沙,水的比例多少,要鋪多厚。不平的地面怎麼找平。影響地板磚凝固時間的因素有哪些。影響空磚因素有哪些。回答不上二千塊一個月。中級就問會不會刷牆,吊頂,安裝水電氣,門窗,空調,刮白。每種又出好多題。中級四千。高級地板磚工程師問他會不會修環球中心。發明塔吊,發明挖掘機。


分享到:


相關文章: