天天看點

【系統設計】如何設計一個秒殺系統

目錄

  1. 從架構師視角出發
  2. 具體要做哪些事情
  3. 功能性和非功能性
  4. 如何編寫設計文檔
  5. 如何考慮技術選型
  6. 其他相關設計要點

1.從架構師視角出發

像架構師一樣思考問題 為什麼要做秒殺?

為什麼秒殺難做?

秒殺的本質

​業務上:一場營銷促銷活動,具有明确的活動業務特點​

​技術上:一種主動DDos攻擊,具備技術的不确定性和複雜度​

早期的秒殺怎麼做

早期的單體系統,不具備很好的擴充性,一有突發流量就挂。

那麼如何實作抗住較大的突發壓力呢?

最開始大家是真不知道,摸石頭過河。

大促當機時常态。

技術上有哪些優化辦法

​1.丢棄訂單​:最早期,量太大扛不住,直接前端随機reject一些,傳回給搶單失敗,簡 單粗暴,但是有效,比如10萬人搶100個iPhone,隻要能提前預測有大概1萬以上的人 參與(通過資格确認、報名等方式收集資訊),那麼直接請求進來以後随機擋回去 99%的流量都沒有啥問題。

​2.優化吞吐​:中間有段時間,提前準備一大批機器,服務化、分庫分表搞定後端性能, 讓前端業務可以加一定量的機器,然後搞穩定性,依賴關系,容量規劃,做彈性,提升 吞吐量。

**3.異步隊列:**然後就是使用可堆積的消息隊列或者記憶體消息隊列了,如果搶單具有強順 序,那麼先都進隊列,然後拿前N(就是庫存數)個出來平滑處理,剩下的所有都可以 作為失敗進行批處理了,甚至還可以做一個定長的隊列,再往裡寫直接提示失敗。隊列 把并發變成串行,進而去掉了鎖。

**4.記憶體配置設定:**一些具體的業務,也會考慮預熱,提前在每個機器節點記憶體配置設定好庫存數 量,然後直接在記憶體裡處理自己的庫存數即可,這樣可能也會在極端情況下啊,

**5.拆分擴充:**針對不同類型、不同商家、不同來源的商品,部署不同的前端促銷叢集, 這樣就把壓力分散開了。具體到每個商家,其實量就不大了,雙十一銷售第一名的商家, 并發也不是特别高。

**6.服務降級:**越重要的搶單,大家越關心自己有沒有搶到,而不是特别在意訂單立即處 理完,也就是說,下單占到位置比處理完成訂單要更有價值。比如12306春運搶票,隻 要告訴使用者你搶到了票,但是預計1個小時後訂單才會處理完,使用者有這個明确預期, 就可以了,使用者不會立馬使用這張票,也不會在意1分鐘内處理完還是1小時處理完。 需要注意的是其中部分模式會導緻銷售不足或者超賣,銷售不足可以從搶購裡加一些名 單補發,也可以加一輪秒殺。超賣比較麻煩,是以一般會多備一點貨,比如搶100個 iPhone,提前準備105個之類的,也會證明在實際操作裡非常有價值。

系統設計上的改進和優化

将營銷促銷活動,從交易業務系統裡剝離出來,成為獨立的系統。 促銷活動:滿減,滿贈,折扣等。 業務因素:使用者範圍,商品範圍,使用時限,發放形式,還是賬務相關、預算與核銷等。

其他: • 優惠券 • 紅包 • 積分

​秒殺業務本質上是一個特殊的折扣活動​

2.具體要做哪些事情

做系統架構設計的步驟

1、分析現狀

1.1 明确具體需求。特别是要挖掘和明确非功能性需求。

1.2 分析可行性。明确可行性與相關技術名額。

2、尋找路徑

2.1 實作整體方案設計。

2.2 完成POC驗證和關鍵技術選型。

3、确定方案

3.1 根據分析設計出最終方案,并與各方達成一緻。

3.2 完善方案相關設計圖和文檔,成為項目研發的藍圖。

做系統架構設計的步驟

1、分析現狀

産出:新需求文檔,系統目前現狀(包括業務和技術名額)的相關文檔和設計圖,可行 性分析文檔。

2、尋找路徑

産出:設計方案初稿,關鍵問題分析,關鍵技術選型報告,POC驗證的場景設計文檔 和DEMO,測試/壓測結果等。

3、确定方案

産出:架構設計方案和設計圖終稿,組織會議同步和宣貫。

3. 功能性與非功能性需求

功能性需求

商家:上架秒殺商品和庫存,定義活動規則。

平台:(自營的話,不需要)

使用者:滿足條件,參與秒殺,搶購商品。 購買後的流程,與普通活動流程相同

【系統設計】如何設計一個秒殺系統

非功能性需求

根據業務名額,估算并發名額,以此來反推非功能性需求。 但是實際情況往往是,壓力到底多大,不知道怎麼辦?

1、根據線上壓測,現有系統名額的測量和計算

2、參考業内水準,設定并發流量的倍數

3、建立基線

注意事項

脫離場景談性能,都是耍流氓 需要注意:不同網際網路電商發展階段,不同的現實條件下,對于秒殺系統的實際需求和 解決辦法,是有非常大的差異的。

4. 如何編寫設計文檔

系統設計文檔

傳統軟體開發一般有概要設計和詳細設計。 網際網路相關系統不會這麼複雜,關鍵在于描述清楚我們的系統。

回憶一下,我們上一節講的,什麼方法可以達到這一點。

系統設計文檔

  1. 需求分析
  2. 整體設計
  3. 系統架構圖 - 業務架構圖 - 技術架構圖 - 資料架構圖 - 部署架構圖

擴充到整個研發項目應該使用的文檔結構

【系統設計】如何設計一個秒殺系統

5.如何編考慮技術選型

技術選型的原則和方法

原則上,綜合考慮采用相當成熟穩定的合适技術。

符合公司技術發展路線和選型規範(如果有)。

方法:基于關鍵場景編寫case,實作demo,驗證多種類似技術的各項名額。

是否要采用最新的技術

6.系統設計上的其他要考慮的要點

體系化的穩定性建設

架構團隊與架構能力建設

營銷活動工具的平台化建設