目錄
-
- 從架構師視角出發
- 具體要做哪些事情
- 功能性和非功能性
- 如何編寫設計文檔
- 如何考慮技術選型
- 其他相關設計要點
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. 功能性與非功能性需求
功能性需求
商家:上架秒殺商品和庫存,定義活動規則。
平台:(自營的話,不需要)
使用者:滿足條件,參與秒殺,搶購商品。 購買後的流程,與普通活動流程相同
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOwEzN0YTY2MDM1kTYwYGZxYzX5IjNwEDMzEzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
非功能性需求
根據業務名額,估算并發名額,以此來反推非功能性需求。 但是實際情況往往是,壓力到底多大,不知道怎麼辦?
1、根據線上壓測,現有系統名額的測量和計算
2、參考業内水準,設定并發流量的倍數
3、建立基線
注意事項
脫離場景談性能,都是耍流氓 需要注意:不同網際網路電商發展階段,不同的現實條件下,對于秒殺系統的實際需求和 解決辦法,是有非常大的差異的。
4. 如何編寫設計文檔
系統設計文檔
傳統軟體開發一般有概要設計和詳細設計。 網際網路相關系統不會這麼複雜,關鍵在于描述清楚我們的系統。
回憶一下,我們上一節講的,什麼方法可以達到這一點。
系統設計文檔
-
- 需求分析
- 整體設計
- 系統架構圖 - 業務架構圖 - 技術架構圖 - 資料架構圖 - 部署架構圖
擴充到整個研發項目應該使用的文檔結構
5.如何編考慮技術選型
技術選型的原則和方法
原則上,綜合考慮采用相當成熟穩定的合适技術。
符合公司技術發展路線和選型規範(如果有)。
方法:基于關鍵場景編寫case,實作demo,驗證多種類似技術的各項名額。