-
-
掌握秒殺的設計思路及技術架構
-
掌握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. 數據庫結構
關注本博客微信公眾號