來自個人博客 秒殺活動的設計業務的基本說明
運營評估最高的并發會達到 10W(根據推廣的力度,以及以往的經驗)
業務現有的服務器架構 反向代理 4臺,前端機 8臺, db 2臺(主從),redis 2臺(主從)以下是服務器架構圖
動靜分離html 等靜態文件上CDN ,這方面壓力不大
后臺程序動態接口,必須支持高并發,用戶體驗必須做好
后端程序優化點(歡迎大家補充)
程序盡可能的減少加載的文件
程序減少不必要的網絡請求
redis 隊列來作 異步方式實現
// 后臺進程消費隊列 個人使用brpoplpush方法 取出數據并用存入另外隊列作數據備份 $block_expire_time = 0; # 設置阻塞等待時間為永久 $redis->brpoplpush($key, $backup_key, $block_expire_time);
redis 緩存
前端點擊按鈕請求后變灰,防止用戶重復點擊
靜態文件上CDN
nginx的最大連接數設置為550,防止連接數過大時全部到php,導致php服務掛了
針對每個用戶加并發鎖(redis),防止高并發情況判斷條件被繞過,程序執行完后解鎖。
$lock_status = $redis->set($lock_key, 1, array("NX", "EX"=>$expire_time));高并發下獎品超發問題
個人設計的方案:提前把每個獎品放入 redis隊列,每個key一個獎品,隊列的長度是獎品的數量,可以保證獎品不會超發放
另外,假設使用
悲觀鎖,在更新數據的時候加鎖,其它的都為等待狀態,不合適秒殺場景
樂觀鎖 基本是采用帶版本號更新,版本號匹配才能更新,其它的回滾,雖然保證的數據的安全不超發放,但是在高并發場景下,DB只有兩臺的時候,超過mysql 進程堆積肯定會的, 超過最大連接數是怎么辦,一系列的問題需要解決,所以該方案不合適
在平均響應時間300ms內,單臺qps 750 左右(保持300ms是公司壓測試的規范指標)
10臺機器(后面新增2臺到 8+2)一秒鐘能處理: 10 * 750 = 7500
保守的并發只有7500,與10w 差距大,需要在執行方案上解決,公司不可無限的申請web機器。
解決10W并發問題(資源有限的情況)方案
在代理層做處理,根據權重擋掉93%的量,返回800(自定義),前端判斷是否為800,是則提示火爆用戶重試(對應的方案設置友好一些)
接口程序不連接查詢mysql數據庫
獎品的數據存放redis隊列,每個獎品一個key,隊列長度是獎品的數量
用戶成功領取紅包(或搶購)時的代碼流程(不包括業務限制與防刷),從隊列獲取獎品成功,再入隊列(此隊列后臺消費入庫),返回給用戶領取成功。在用戶體驗上有所提升,但如果后臺隊列堆積太多,未能消費完成,用戶查看的紅包時是沒有對應記錄的,所以針對自己的需求作對應的優化。
活動流程圖(開爺畫的)文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22504.html
摘要:即使秒殺系統崩潰了,也不會對網站造成影響。動態生成隨機下單頁面的為了避免用戶直接訪問下單需要將動態化,用隨機數作為參數,只能秒殺開始的時候才生成。架構設計如何控制秒殺商品頁面搶購按鈕的可用禁用。該文件不被緩存的做法隨機數。 秒殺背景 電商中為了吸引顧客、聚集人氣,經常會策劃一些秒殺活動。活動中售賣的商品,要么價格遠低于市場價格,要么比較稀缺(如一些新發布的商品)。這些商品電商一般都會限...
摘要:即使秒殺系統崩潰了,也不會對網站造成影響。動態生成隨機下單頁面的為了避免用戶直接訪問下單需要將動態化,用隨機數作為參數,只能秒殺開始的時候才生成。架構設計如何控制秒殺商品頁面搶購按鈕的可用禁用。該文件不被緩存的做法隨機數。 秒殺背景 電商中為了吸引顧客、聚集人氣,經常會策劃一些秒殺活動。活動中售賣的商品,要么價格遠低于市場價格,要么比較稀缺(如一些新發布的商品)。這些商品電商一般都會限...
摘要:即使秒殺系統崩潰了,也不會對網站造成影響。動態生成隨機下單頁面的為了避免用戶直接訪問下單需要將動態化,用隨機數作為參數,只能秒殺開始的時候才生成。架構設計如何控制秒殺商品頁面搶購按鈕的可用禁用。該文件不被緩存的做法隨機數。 秒殺背景 電商中為了吸引顧客、聚集人氣,經常會策劃一些秒殺活動。活動中售賣的商品,要么價格遠低于市場價格,要么比較稀缺(如一些新發布的商品)。這些商品電商一般都會限...
摘要:動態生成隨機下單頁面的為了避免用戶直接訪問下單需要將動態化,用隨機數作為參數,只能秒殺開始的時候才生成。該文件不被緩存的做法隨機數。淺談秒殺系統架構設計如何只允許,第一個提交的單進入訂單系統。未超過秒殺商品總數,提交到子訂單系統。 秒殺是電子商務網站常見的一種營銷手段。 原則 不要整個系統宕機。 即使系統故障,也不要將錯誤數據展示出來。 盡量保持公平公正。 實現效果 秒殺開始前,...
摘要:但很顯然這些請求的處理性能并不好,有沒有更好的解決方案這時可以想到布隆過濾器。系統根據商品,先從布隆過濾器中查詢該是否存在,如果存在則允許從緩存中查詢數據,如果不存在,則直接返回失敗。所以布隆過濾器絕大部分使用在緩存數據更新很少的場景中。高并發下如何設計秒殺系統?這是一個高頻面試題。這個問題看似簡單,但是里面的水很深,它考查的是高并發場景下,從前端到后端多方面的知識。 秒殺一般出現在商...
閱讀 2158·2023-04-25 20:45
閱讀 1068·2021-09-22 15:13
閱讀 3641·2021-09-04 16:48
閱讀 2580·2019-08-30 15:53
閱讀 928·2019-08-30 15:44
閱讀 936·2019-08-30 15:43
閱讀 1002·2019-08-29 16:33
閱讀 3432·2019-08-29 13:08