-
-
掌握秒殺的設計思路及技術架構
-
掌握SpringCloud針對於秒殺業務的應用
-
掌握redis對於效能的提升作用
-
【石器時代】在戰鬥時會出現【
由於遊戲戰鬥採用的是倒數計時模式,強大的殺傷往往只在一秒沒過就結束,所以這類瞬間或幾下擊敗對手就被稱作:【秒殺】
到後來演化漸變成通俗用語,甚至用來替代一些暴力詞彙:
“小心我秒你”;“昨天PK遇到高手,我被秒了”;“lj快走,不然秒你”;“終於120級,轉生可以秒機暴啦”等等。
並在之後的【傳奇】【
所謂“秒殺”,是網上競拍的一種新方式,就是網路
對於商家來說,按照商家的規模,秒殺分為三種形式:
1、平臺要求準時準點做秒殺,類似於天貓雙11,11月11日0點開始搶購,或者京東的整點搶購,都由平臺發起。
2、商家對於自己的店鋪做秒殺,一般是廠家的旗艦店,在平臺首頁佔據有利廣告位,進入店鋪做秒殺。
3、微信公眾號連結網頁做秒殺,由公眾號運營的商家發起。
按照商家的促銷活動內容,秒殺分為三種方式:
1、限價秒殺:最常見的秒殺形式,秒殺價格絕對低到令人無法相信也無法抗拒而不去參與,此種秒殺一般在開始之後1-3秒之內就會秒殺完畢。
2、低價限量秒殺:此種形式也可以理解為低折扣秒殺,限量不限時,秒完即止,此種秒殺形式商家提供一定數量的商品,直至秒完即止。
3、低價限時限量秒殺:此種形式也可以理解為低折扣秒殺,限時限量,在規定的時間內,無論商品是否秒殺完畢,該場秒殺都會結束。
2、庫存少:一般都是低價限量,而訪問的數量遠遠大於庫存數量,只有極少數人成功。
3、業務流程簡單:流程短,立即購買,下訂單,減庫存。
4、前期預熱:對於還未開啟活動的秒殺商品,以倒數計時的方式顯示,只能訪問不能下單。
1、限流:只能讓秒殺成功的一小部分人進入到後臺,和資料庫進行互動,來減少資料庫伺服器的壓力。
2、快取:將部分業務邏輯寫到快取裡,例如:商品限購數量、秒殺政策等。
3、非同步:將業務邏輯拆分,減少伺服器壓力,例如:正常業務流程是下訂單、付款、減庫存同一時間完成,秒殺時可以將業務邏輯拆分。
4、預熱:商家進行宣傳,並提前設定好秒殺的商品、秒殺時間、限購數量,將設定的商品寫入 redis 快取。
5、展示:頁面分為兩層,第一層是商品列表頁,第二層是商品詳情頁,通過商品列表頁連結進入商品詳情頁,秒殺開始前,展示商品秒殺倒數計時,不允許操作提交訂單,只允許檢視商品詳情。秒殺開始時,展示商品秒殺到期時間。
6、提交訂單:秒殺提交完訂單將 redis 快取裡的數量減少,並提示支付。
7、佇列操作:當支付成功之後,將秒殺成功詳情寫入 rabbitMQ,訂單服務進行監聽接收訊息寫入訂單,庫存服務進行監聽接收訊息減少庫存。
8、時間伺服器:頁面服務端通過負載進行佈署,各伺服器時間可能會不一致,因此增加時間服務,來提供統一的時間。
整體架構圖:
Eureka Client:
時間服務(埠號8000):為頁面服務提供時間統一的介面。
商品服務(埠號7000):對外提供的介面(商品列表、商品詳情、秒殺政策)。
庫存服務(埠號6001):佇列監聽,在佇列中提取訊息與資料庫互動減少庫存。
會員服務(埠號5000):為頁面服務提供會員資料介面,會員的新增、修改、登入。
訂單服務(埠號4000):佇列監聽,在佇列中提取訊息與資料庫互動生成訂單。
頁面服務(埠號3000):為前端頁面提供資料介面。
Eureka Server:
註冊中心(埠號9000):各服務都在註冊中心進行註冊。
配置中心 :提供所有服務需要的配置。
Redis的應用:
快取商品數量、秒殺政策。
商家對秒殺政策、商品限量進行設定,設定完成寫入Redis。
消費者訪問商品詳情,提交訂單之後,從Redis中減少商品數量。
Redis裡存取內容:
1、在政策新增的時候存入,key的值為:LIMIT_POLICY_{sku_id},value的值為政策內容
2、商品列表取資料時,通過key(LIMIT_POLICY_{sku_id}),取出政策內容。
3、政策到期之後,自動刪除。
消費者提交訂單,自動寫入訂單佇列:
訂單佇列:訂單服務監聽訂單佇列,接收到訊息之後將佇列資訊寫入資料庫訂單表。
消費者付款之後,更新訂單狀態,更新成功之後寫入庫存佇列
庫存佇列:庫存服務監聽庫存佇列,接收到訊息之後將庫存資訊寫入資料庫減少庫存。
2.5. 資料庫結構
關注本部落格微信公眾號