微服務電商秒殺系統


一、學習目標

  • 了解秒殺的業務

  • 掌握秒殺的設計思路及技術架構

  • 掌握SpringCloud針對於秒殺業務的應用

  • 掌握redis對於性能的提升作用

  • 掌握RabbitMQ對於業務拆分異步的處理應用

二、了解秒殺的業務及使用的技術架構

2.1. 什么是秒殺

【秒殺】一詞在網絡的最早起源,應該要追溯到日本的綜合格斗技團體Pancrase在1993年9月21日發行的WEEKLY PRO-WRESTLING(每周職業摔跤)雜志中出現的自創詞,在2000年發行的一款回合制網絡游戲【石器時代】傳入中國並被發揚光大。

【石器時代】在戰斗時會出現【合擊】現象,就算大家敏捷素質不同,在倒計時28秒時,同時選擇攻擊一個目標,也會極大概率發動攻擊群毆一個目標。特別是在玩家的PK戰,經常出現群體合擊或者人寵合擊,造成強大的殺傷,瞬間打飛或者打暈對手。

由於游戲戰斗采用的是倒計時模式,強大的殺傷往往只在一秒沒過就結束,所以這類瞬間或幾下擊敗對手就被稱作:【秒殺】

到后來演化漸變成通俗用語,甚至用來替代一些暴力詞匯:

“小心我秒你”;“昨天PK遇到高手,我被秒了”;“lj快走,不然秒你”;“終於120級,轉生可以秒機暴啦”等等。

並在之后的【傳奇】【MU】【CS】等各種經典游戲中廣為流傳。直至被商家促銷活動所用。

所謂“秒殺”,是網上競拍的一種新方式,就是網絡賣家發布一些超低價格的商品,所有買家在同一時間網上搶購的一種銷售方式。通俗一點講就是網絡商家為促銷等目的組織的網上限時搶購活動。由於商品價格低廉,往往一上架就被搶購一空,有時只用一秒鍾。2011年以來,在淘寶等大型購物網站中,“秒殺店”的發展可謂迅猛。

對於商家來說,按照商家的規模,秒殺分為三種形式:

1、平台要求准時准點做秒殺,類似於天貓雙11,11月11日0點開始搶購,或者京東的整點搶購,都由平台發起。

2、商家對於自己的店鋪做秒殺,一般是廠家的旗艦店,在平台首頁占據有利廣告位,進入店鋪做秒殺。

3、微信公眾號鏈接網頁做秒殺,由公眾號運營的商家發起。

 

按照商家的促銷活動內容,秒殺分為三種方式:

1、限價秒殺:最常見的秒殺形式,秒殺價格絕對低到令人無法相信也無法抗拒而不去參與,此種秒殺一般在開始之后1-3秒之內就會秒殺完畢。

2、低價限量秒殺:此種形式也可以理解為低折扣秒殺,限量不限時,秒完即止,此種秒殺形式商家提供一定數量的商品,直至秒完即止。

3、低價限時限量秒殺:此種形式也可以理解為低折扣秒殺,限時限量,在規定的時間內,無論商品是否秒殺完畢,該場秒殺都會結束。

2.2. 秒殺的業務特點

1、瞬時並發量大:大量用戶會在同一時間搶購,網站流量瞬間激增。

2、庫存少:一般都是低價限量,而訪問的數量遠遠大於庫存數量,只有極少數人成功。

3、業務流程簡單:流程短,立即購買,下訂單,減庫存。

4、前期預熱:對於還未開啟活動的秒殺商品,以倒計時的方式顯示,只能訪問不能下單。

2.3. 設計思路

1、限流:只能讓秒殺成功的一小部分人進入到后台,和數據庫進行交互,來減少數據庫服務器的壓力。

2、緩存:將部分業務邏輯寫到緩存里,例如:商品限購數量、秒殺政策等。

3、異步:將業務邏輯拆分,減少服務器壓力,例如:正常業務流程是下訂單、付款、減庫存同一時間完成,秒殺時可以將業務邏輯拆分。

4、預熱:商家進行宣傳,並提前設置好秒殺的商品、秒殺時間、限購數量,將設置的商品寫入 redis 緩存。

5、展示:頁面分為兩層,第一層是商品列表頁,第二層是商品詳情頁,通過商品列表頁鏈接進入商品詳情頁,秒殺開始前,展示商品秒殺倒計時,不允許操作提交訂單,只允許查看商品詳情。秒殺開始時,展示商品秒殺到期時間。

6、提交訂單:秒殺提交完訂單將 redis 緩存里的數量減少,並提示支付。

7、隊列操作:當支付成功之后,將秒殺成功詳情寫入 rabbitMQ,訂單服務進行監聽接收消息寫入訂單,庫存服務進行監聽接收消息減少庫存。

8、時間服務器:頁面服務端通過負載進行布署,各服務器時間可能會不一致,因此增加時間服務,來提供統一的時間。

2.4. 技術架構

整體架構圖:

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、政策到期之后,自動刪除。

 

RabbitMQ的應用:

 

消費者提交訂單,自動寫入訂單隊列:

訂單隊列:訂單服務監聽訂單隊列,接收到消息之后將隊列信息寫入數據庫訂單表。

消費者付款之后,更新訂單狀態,更新成功之后寫入庫存隊列

庫存隊列:庫存服務監聽庫存隊列,接收到消息之后將庫存信息寫入數據庫減少庫存。

2.5. 數據庫結構 

 

 關注本博客微信公眾號

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM