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