微服務電商秒殺系統

汪強勝發表於2021-08-09

一、學習目標

  • 瞭解秒殺的業務

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

  • 掌握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. 資料庫結構 

 

 關注本部落格微信公眾號

 

 

 

相關文章