如何設計一個秒殺系統?

如何設計一個秒殺系統?使用者939121540102020-02-18 10:15:18

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

如何設計一個秒殺系統?網路圈2019-05-29 06:32:34

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

秒殺系統具備哪些特點?

1、

瞬時高併發

,短時間內的流量洪峰,使用者量的激增促使網站流量突破上限;

2、出現

超賣現象

,成功下單的人數比庫存量還要多;

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

如何設計一個秒殺系統?

秒殺系統該如何設計?

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

1、前臺靜態資源走

CDN加速

將JS、CSS、圖片、音影片等檔案放在CDN上採用預熱形式將資源重新整理到各CDN節點上,使得使用者“就近讀取”,加快訪問速度,另外也減小源站伺服器的壓力。

2、

限流

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

3、任務

非同步化處理

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

4、合理的

快取

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

5、其它

業務降級

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

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

如何設計一個秒殺系統?

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

1、操作快取資料,快取可以存放商品當前總量,如果Redis是分散式部署,可以採用分散式鎖來解決髒資料問題。

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

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

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

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

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