如何設計電商行業億級用戶秒殺系統

2020-12-13 奈學課程分享

電商行業在近十幾年中,經歷過大大小小的促銷活動和秒殺上百次,每次做秒殺瞬時訪問量會翻數十倍,甚至數百倍。對系統架構是巨大的考驗,期間也曾經歷過系統宕機,甚至整體雪崩。那麼我們怎麼設計秒殺系統,才能保證秒殺系統的高性能和穩定性,同時還要保證日常業務不受影響呢?

先看看秒殺場景特點。秒殺開始前幾分鐘,大量用戶開始進入秒殺商品詳情頁面,很多人開始頻繁刷新秒殺商品詳情頁,這時秒殺商品詳情頁訪問量會猛增。秒殺開始,大量用戶開始搶購,這時創建訂單,扣庫存壓力會顯著增大。實際上,秒殺場景基本都是秒殺參與人多,秒殺成功的人卻寥寥無幾,經常是幾十萬人或者更多人搶幾百個商品庫存。

那麼我們曾經是怎麼設計秒殺系統的呢?主要涉及以下幾個方面:

秒殺業務流程上的考慮:

由於參加秒殺的商品售賣價格非常低,基本都是「搶到即賺到」,成功下單後卻不付款的情況非常少。所以我們採用下單減庫存的方案,下單時扣減庫存,然後再進行支付。假如真有個別訂單不付款怎麼辦?沒關係,秒殺好活動最主要的目的是吸引流量,個別訂單不支付對秒殺活動本身影響不大。況且,沒支付剩下的庫存還可以做為普通商品繼續售賣。不過要注意對機器人和自動腳本的防禦,後面會詳細介紹。

頁面靜態化:

「秒殺開始前幾分鐘,大量用戶開始進入秒殺商品詳情頁面,很多人開始頻繁刷新秒殺商品詳情頁,這時秒殺商品詳情頁訪問量會猛增」。如果請求全部打到後端服務,那後端服務的壓力會非常大(後端服務要處理業務邏輯,而且還要訪問資料庫,吞吐量比較低)。

考慮到秒殺是運營同學提前安排的活動,要秒殺哪些商品、商品價格等信息在秒殺活動開始前已經確定下來,所以我們可以把秒殺商品詳情頁做成靜態頁面,把商品詳情、商品價格等參數、評論評價等信息全部放在這個靜態頁面裡,然後把這個靜態頁面上傳到CDN上預熱(CDN是內容分發網絡,可以簡單理解成網際網路上的巨大的緩存,用於存放靜態頁面、圖片、視頻等,可以顯著提高訪問速度),用CDN扛流量,這樣大量的商品詳情頁的訪問請求就不用訪問自己的網站(源站)。這樣既可以提高訪問速度,也沒有給網站增加壓力,同時也減少了網站帶寬壓力。

請求攔截:

前端頁面,相關按鈕點擊後置灰,防止重複提交

網關(zuul,nginx)層,為了避免前端惡意請求,比如一些攻擊腳本,在網關層要對下單等接口按userID限流,幾秒鐘只能訪問一次。考慮到秒殺場景參與人多,秒殺成功的人極少,我們可以把絕大部分搶購下單請求在網關層直接拒掉,按秒殺失敗處理。這樣就極大減少了後端服務的壓力。

假設秒殺庫存是200個,我們可以只放行200個請求到後端服務。要注意,為了儘量避免庫存被機器人和自動腳本搶走,200個請求不能在秒殺開始瞬間同時放行,可以分段放行,比如秒殺開始後隨機選取100ms內的5個請求放行(這100ms內的其他請求直接拒掉,按秒殺失敗處理),之後每隔100ms放行5個請求,4秒鐘可以放行完200個請求。分段放行,除了限制了機器人和自動腳本,把請求分散在各個時間段,還進一步緩解了後端服務的壓力。

分段放行總時間不能太長,假如每100ms放行1個請求,放行完所有200個請求需要20秒時間,這樣用戶就會明顯感知到下單早的人沒秒殺成功,下單晚的人反而秒殺成功了,用戶體驗會變差。

另外,秒殺過程網關壓力會比較大,網關可以做成集群,多節點分攤訪問壓力。

後端服務設計:

如果秒殺庫存只有200,經過網關攔截,再加上採用分段放行的方式,對於後端服務基本沒什麼壓力了,日常的後端服務就完全可以支撐秒殺活動了。不用再做更複雜的設計。不過,假如秒殺庫存有幾萬個,放行的下單請求就有幾萬個,為了用戶體驗放行總時間也不能太長,這時後端服務該怎麼設計呢?

這時主要壓力就在資料庫了,扣減庫存壓力,創建訂單壓力。

庫存可以放到Reids緩存中,來提高扣減庫存吞吐能力。對於熱點商品的庫存可以利用Redis分片存儲。

創建訂單可以走異步消息隊列。後端服務接到下單請求,直接放進消息隊列,監聽服務取出消息後,先將訂單信息寫入Redis,每隔100ms或者積攢100條訂單,批量寫入資料庫一次。前端頁面下單後定時向後端拉取訂單信息,獲取到訂單信息後跳轉到支付頁面。用這種批量異步寫入資料庫的方式大幅減少了資料庫寫入頻次,從而明顯降低了訂單資料庫寫入壓力。

隔離:

1,業務隔離。從業務上把秒殺和日常的售賣區分開來,把秒殺做為營銷活動,要參與秒殺的商品需要提前報名參加活動,這樣我們就能提前知道哪些商家哪些商品要參與秒殺,可以根據提報的商品提前生成靜態頁面並上傳到CDN預熱,提報的商品庫存也需要提前預熱,可以將商品庫存在活動開始前預熱到Redis,避免秒殺開始後大量的緩存穿透。

2,部署隔離。秒殺相關服務和日常服務要分組部署,不能因為秒殺出問題影響日常售賣業務。可以申請單獨的秒殺域名,從網絡入口層就開始分流。網關也單獨部署,秒殺走自己單獨的網關,從而避免日常網關受到影響。秒殺可以復用訂單,庫存,支付等日常服務,只是需要一些小的改造(比如下單流程走消息隊列,批量寫入訂單庫,以及在Redis中扣減庫存)。

3,數據隔離。為了避免秒殺活動影響到日常售賣業務,Redis緩存需要單獨部署,甚至資料庫也需要單獨部署!數據隔離後,秒殺剩餘的庫存怎麼辦?秒殺活動結束後,剩餘庫存可以歸還到日常庫存繼續做為普通商品售賣。數據隔離後,秒殺訂單和日常訂單不在相同的資料庫,之後的訂單查詢怎麼展示?可以在創建秒殺訂單後發消息到消息隊列,日常訂單服務採取拉的方式消費消息,這時日常訂單服務是主動方,可以採用線程池的方式,根據機器的性能來增加或縮小線程池的大小,控制拉取消息的速度,來控制訂單資料庫的寫入壓力。

網絡:

秒殺前要和網絡運營商、CDN服務商提前申請帶寬。

還有哪些細節要考慮:

1.如何避免超賣?如果在redis中扣減庫存,可以利用decr命令扣減庫存,decr是原子操作,在分布式環境下也不會有並發問題,decr扣減庫存後,判斷返回值,如果返回值小於0,扣減庫存失敗,秒殺也就失敗了;如果在資料庫中扣減庫存可以在where後面加上庫存大於0的條件,來避免庫存被減成負值。這樣就可以避免超賣情況發生了。

2.接口防刷,前面已經提到過,在網關層對下單等接口按userID限流。

3.網關層除了對userID做限流外,還要做整體限流。在實際訪問量超過預估訪問量時,整體限流可以起到保護作用,避免系統被壓垮。

4.防止重複下單,按userID限流已經起到了防止重複下單的作用。假如限制同一個用戶10分鐘能下一次單,一般情況下10分鐘內,商品早已經被搶光了,用戶也就沒有再次下單的機會了。

5.可以結合風控系統,在網關層把羊毛黨等有問題的用戶請求直接拒掉。

6.可以在網關層上面再加一層防火牆或者高防服務,來防禦DDos等分布式網絡攻擊。

相關焦點

  • 阿里P9耗時28天,總結歷年億級活動高並發系統設計手冊
    就是在這些不斷地改進過程中,以解決系統中存在的問題為目的和驅動力的系統設計得以進行,而阿里,正是在這方面的最佳實踐者。有人可能會說,他們有伺服器啊(要不把你程序放在他們伺服器上抵抗億級並發的衝擊試試?)阿里作為國內網際網路行業的老大哥,也正是考慮到這一點,不是所有人都能投入那麼多的資金,所以對於系統優化部分,也是不遺餘力。
  • 詳解:如何設計出健壯的秒殺系統?
    前言:秒殺系統相信很多人見過,比如京東或者淘寶的秒殺,小米手機的秒殺。那麼秒殺系統的後臺是如何實現的呢?我們如何設計一個秒殺系統呢?對於秒殺系統應該考慮哪些問題?如何設計出健壯的秒殺系統?本期我們就來探討一下這個問題:
  • Java 資料庫設計 性能優化 電商秒殺系統附帶源碼
    課程名稱: JAVA 資料庫設計 性能優化 電商秒殺系統附帶源碼課程簡介: Java 資料庫設計 性能優化 電商秒殺系統附帶源碼----------------------課程目錄----------------------------
  • 「高並發」Redis如何助力高並發秒殺系統,看完這篇我徹底懂了!
    秒殺業務最大的特點就是瞬時並發流量高,在電商系統中,庫存數量往往會遠遠小於並發流量,比如:天貓的秒殺活動,可能庫存只有幾百、幾千件,而瞬間湧入的搶購併發流量可能會達到幾十到幾百萬。所以,我們可以將秒殺系統的業務特點總結如下。
  • 電商產品設計:會員系統
    對於電商系統,會員系統主要分為to C和to B,相比與傳統企業的CRM系統,功能相對簡單。會員系統主要是管理用戶信息,通過一系列滿足用戶心理、提高黏性的方法來實現開發新用戶、增加用戶活躍度的目的。會員系統有一個升級版的名稱:CRM(客戶關係管理系統),相比傳統的會員系統,CRM系統是一套完整的客戶關係開發、 管理及流程管理的解決方案,賦予企業完善的客戶交流能力,最大化客戶收益率。
  • 行業解決方案:如何玩轉電商營銷
    行業背景隨時網際網路時代的高速發展,電商行業也在日新月異的不斷升級變化,涉及的範圍越來越廣。現在大熱的移動電商也是最近幾年不斷發展的另一個趨勢,隨時隨地打開手機進行購買已經成為消費者的習慣。從線下購買轉變到線上,玩法也越來越多。
  • 考拉海購,是如何成為跨境電商行業「巨頭」的?
    那麼對行業和消費者會產生什麼樣的影響?在行業發展進入加速期後,入局的玩家增多,行業競爭愈加激烈,各平臺獲客成本持續攀高。這種情況下,如何以更低的成本獲取流量成為各大平臺所面臨的主要挑戰。跨境電商從交易模式分為B2B跨境電子商務和B2C跨境電子商務。接下來本文藉由分析「考拉海購」的「攀登之路」,帶你深入了解這家公司以及B2C領域中,跨境電商的運轉邏輯。
  • 封面電商200份茶葉「秒殺」走起 物美價廉用戶表示還想要
    6月15日,由封面新聞電商事業部傾力打造的「端·茶有禮」端午節茶葉秒殺活動正式上線,高端的品質,白菜一樣的價格,用戶表示:我還想要一份!低價吸引眾多用戶參與 能「秒」到不容易本次封面電商線上秒殺茶葉活動,我們利用封面新聞平臺,整合茶企電商資源,給出的秒殺價每份9.9元可以說是很良心了。
  • 哪個電商erp好用?新手如何找到適合自己的電商erp系統?
    而廣義的ERP概念就將客戶需求和企業內部的製造活動以及供應商的製造資源整合在一起,形成企業一個完整的供應鏈,而所有與這個供應鏈相關的電子商務系統都可以歸為電商ERP系統的一部分。 二、新手如何找到適合自己的電商erp系統 對於每個不同行業的商家來說,好的電商erp系統的判斷標準是不同的,所以,根據各個商機的側重點不同,選擇好的電商erp系統是很有講究的。
  • 從考拉海購,看整個跨境電商行業的運轉邏輯
    ,阿里巴巴集團以 20 億美元全資收購網易旗下跨境電商平臺考拉。2013年6月,小紅書創建於上海;2014年6月,小紅書完成金沙江創投領投的數百萬美元的 A 輪融資;2015年6月,小紅書完成 GGV 領投的千萬美元級 B 輪融資;2016年3月,小紅書完成 騰訊投資領投的1億美元級 C輪融資;2018年6月,小紅書完成阿里巴巴領投的3美元級 D輪融資;
  • 關於電商促銷系統的一系列思考
    本文是關於電商促銷系統的一系列思考,一起來看看~因為在思考的過程中發現,促銷系統要在各個維度講明白的確很複雜。促銷所涉及的行業很廣,玩法也很多並且持續在更新。本次只圍繞銷售實物的電商來思考,可能與線下實體,虛擬電商有相通之處。以下內容僅代表個人的客觀想法,由於大家經驗不同、思維角度不同在認知上會有差別,對同一事物可能會得到不同的結果,這裡說的促銷為泛促銷包括了活動等。為什麼要促銷?
  • 億級水果電商,流量實操,內容乾貨分享
    分享者:論語拼多多億級水果食品電商。只做拼系。實操,以及深度思考拼多多流量邏輯,趨勢,以及如何底層流量布局。歡迎拼系,以及對拼系感興趣的商家朋友,交流學習成長。只是良心分享,噴子勿擾,謝謝。微信號:mhjw0370總共有5個內容乾貨第一個內容:曬圖(有圖有真相)既然是億級曝光玩家,為證實自己億級曝光,先曬幾張圖。
  • 電商新零售:多平臺訂單履約系統該如何設計?
    很多公司,除了自營商城以外,還有其它渠道(如天貓、京東等),多個渠道的訂單該如何集中履約?訂單履約全流程是怎樣的?接著小Q的故事,為您揭曉多平臺訂單履約系統的系統設計思路。
  • 詳解考拉海購,看跨境電商行業
    編輯導語:考拉海購主打跨境電商行業,僅用五年的時間,考拉海購佔據跨境電商市場的超高份額,在2019年被阿里巴巴收購;考拉海購是怎麼做到發展如此之快?本文作者深入分析考拉海購,並了解跨境電商行業,我們一起來看一下。
  • 超5億的直播用戶咋變現,這場電商與服裝供應鏈交流沙龍上覓良言
    近年來,淘寶、抖音、快手、花椒等網絡直播平臺紛紛聚焦「流量變現」,「直播+銷售」的新型營銷模式也迅速被行業經營者所接受。如何藉助貨源集聚、物流齊備、電商發達、資訊窪地等優勢,實現「網紅直播」,深度挖掘「短視頻+直播」在服裝服飾行業銷售領域的潛能,成為業界熱議的話題。
  • 電商行業專題報告:流量博弈中的電商成長路徑分析
    綜合商城以不足 5%的用戶使用時間佔比,創造了極高的行業整體營收規 模,我們認為其背後展現清晰的用戶行為邏輯以及流量傳導路徑:流量從各種類型的移動 APP 端 接入,通過廣告等形式的消費者教育後流入電商平臺,最終完成交易變現。在這一清晰的流量傳導 路徑中,電商平臺承載了全域流量變現的重大作用。
  • 直播電商風口正勁:淘寶直播已積累4億用戶,去年成交額破兩千億
    淘寶內容電商事業部總經理俞峰公布,過去一年4億用戶成為淘寶直播觀眾,有接近百萬主播成為淘寶直播生態夥伴,其中117位主播年度交易額破億,有超過4000萬商品進入直播間,同時,商家參與同比增加了268%,整年成交額突破2000億元。值得一提的是,連續3年,淘寶直播的成交增速均超過150%,是當下增長最迅猛的新經濟業態。
  • 高並發解決方案之秒殺
    一、什麼是高並發高並發(High Concurrency)是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。並發用戶數:同時承載正常使用系統功能的用戶數量。例如一個即時通訊系統,同時在線量一定程度上代表了系統 的並發用戶數。二、什麼是秒殺秒殺場景一般會在電商網站舉行一些活動或者節假日在12306網站上搶票時遇到。
  • 電商產品經理必殺技:電商後臺設計要點全解
    我問過幾個朋友所在的公司,他們公司每個月流水都在億級,也屬於中型的電商企業,但是後臺系統普遍存在問題,比如:「庫存數據不準確,導致超賣」「財務結算複雜,很多線下流程」「權限管理不嚴謹,存在安全隱患」然而,對於新人來說,要在短時間內理清各系統之間的業務邏輯,卻並非易事:當前網絡上關於產品經理的文章主要偏向方法論、業界動向、產品分析、用戶體驗、交互等,關於後臺系統的文章和課程非常少,並且不系統。
  • 電商提升用戶體驗的幾個方面
    隨著電子商務的火熱,越來越多的電子商務網站出現在網際網路行業裡,除了傳統的專門做電子商務的公司外,現在很多企業都建有自己的電子商務網站,也有很多企業開始進軍這塊領域,導致競爭越發激烈,時不時會爆出價格戰這種事情。