成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

糟糕,老板讓我設計一個億級用戶秒殺系統!

系統
個人從事電商行業十幾年,經歷過大大小小的促銷活動和秒殺上百次,每次做秒殺瞬時訪問量會翻數十倍,甚至數百倍。對系統架構是巨大的考驗,期間也曾經歷過系統宕機,甚至整體雪崩。

個人從事電商行業十幾年,經歷過大大小小的促銷活動和秒殺上百次,每次做秒殺瞬時訪問量會翻數十倍,甚至數百倍。對系統架構是巨大的考驗,期間也曾經歷過系統宕機,甚至整體雪崩。

[[317056]]

圖片來自 Pexels

那么我們怎么設計秒殺系統,才能保證秒殺系統的高性能和穩定性,同時還要保證日常業務不受影響呢?

先看看秒殺場景特點:秒殺開始前幾分鐘,大量用戶開始進入秒殺商品詳情頁面,很多人開始頻繁刷新秒殺商品詳情頁,這時秒殺商品詳情頁訪問量會猛增。

秒殺開始,大量用戶開始搶購,這時創建訂單,扣庫存壓力會顯著增大。實際上,秒殺場景基本都是秒殺參與人多,秒殺成功的人卻寥寥無幾,經常是幾十萬人或者更多人搶幾百個商品庫存。

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

秒殺業務流程上的考慮

由于參加秒殺的商品售賣價格非常低,基本都是“搶到即賺到”,成功下單后卻不付款的情況非常少。

所以我們采用下單減庫存的方案,下單時扣減庫存,然后再進行支付。假如真有個別訂單不付款怎么辦?

沒關系,秒殺好活動最主要的目的是吸引流量,個別訂單不支付對秒殺活動本身影響不大。

況且,沒支付剩下的庫存還可以做為普通商品繼續售賣。不過要注意對機器人和自動腳本的防御,后面會詳細介紹。

頁面靜態化

“秒殺開始前幾分鐘,大量用戶開始進入秒殺商品詳情頁面,很多人開始頻繁刷新秒殺商品詳情頁,這時秒殺商品詳情頁訪問量會猛增”。

如果請求全部打到后端服務,那后端服務的壓力會非常大(后端服務要處理業務邏輯,而且還要訪問數據庫,吞吐量比較低)。

考慮到秒殺是運營同學提前安排的活動,要秒殺哪些商品、商品價格等信息在秒殺活動開始前已經確定下來。

所以我們可以把秒殺商品詳情頁做成靜態頁面,把商品詳情、商品價格等參數、評論評價等信息全部放在這個靜態頁面里,然后把這個靜態頁面上傳到 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 條訂單,批量寫入數據庫一次。

前端頁面下單后定時向后端拉取訂單信息,獲取到訂單信息后跳轉到支付頁面。

用這種批量異步寫入數據庫的方式大幅減少了數據庫寫入頻次,從而明顯降低了訂單數據庫寫入壓力。

隔離

業務隔離

從業務上把秒殺和日常的售賣區分開來,把秒殺做為營銷活動,要參與秒殺的商品需要提前報名參加活動。

這樣我們就能提前知道哪些商家哪些商品要參與秒殺,可以根據提報的商品提前生成靜態頁面并上傳到 CDN 預熱,提報的商品庫存也需要提前預熱,可以將商品庫存在活動開始前預熱到 Redis,避免秒殺開始后大量的緩存穿透。

部署隔離

秒殺相關服務和日常服務要分組部署,不能因為秒殺出問題影響日常售賣業務。

可以申請單獨的秒殺域名,從網絡入口層就開始分流。網關也單獨部署,秒殺走自己單獨的網關,從而避免日常網關受到影響。

秒殺可以復用訂單,庫存,支付等日常服務,只是需要一些小的改造(比如下單流程走消息隊列,批量寫入訂單庫,以及在 Redis 中扣減庫存)。

數據隔離

為了避免秒殺活動影響到日常售賣業務,Redis 緩存需要單獨部署,甚至數據庫也需要單獨部署!數據隔離后,秒殺剩余的庫存怎么辦?

秒殺活動結束后,剩余庫存可以歸還到日常庫存繼續做為普通商品售賣。數據隔離后,秒殺訂單和日常訂單不在相同的數據庫,之后的訂單查詢怎么展示?

可以在創建秒殺訂單后發消息到消息隊列,日常訂單服務采取拉的方式消費消息。

這時日常訂單服務是主動方,可以采用線程池的方式,根據機器的性能來增加或縮小線程池的大小,控制拉取消息的速度,來控制訂單數據庫的寫入壓力。

網絡

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

還有哪些細節要考慮:

①如何避免超賣?如果在 Redis 中扣減庫存,可以利用 decr 命令扣減庫存,decr 是原子操作,在分布式環境下也不會有并發問題,decr 扣減庫存后,判斷返回值,如果返回值小于 0,扣減庫存失敗,秒殺也就失敗了。

如果在數據庫中扣減庫存可以在 where 后面加上庫存大于 0 的條件,來避免庫存被減成負值。這樣就可以避免超賣情況發生了。

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

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

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

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

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

 

責任編輯:武曉燕 來源: 架構師進階之路
相關推薦

2019-09-18 09:41:25

億級流量網站

2021-04-09 08:13:14

API網關互聯網

2021-06-02 06:49:18

Redis緩存設計.

2022-10-14 08:29:18

DNS系統地址

2018-11-01 13:23:02

網關APIHTTP

2021-12-03 10:47:28

WOT技術峰會技術

2024-08-28 08:38:51

2018-11-26 08:06:24

API網關億級

2025-01-22 08:00:00

架構秒殺系統Java

2022-07-18 08:02:16

秒殺系統后端

2019-06-27 09:50:49

高性能秒殺系統

2024-06-21 08:15:25

2019-10-31 13:58:32

阿里電商系統

2024-06-17 11:59:39

2020-08-05 07:37:29

任務系統定時

2019-11-27 15:19:44

系統緩存架構

2025-02-03 00:00:20

2019-08-01 08:36:51

緩存系統并發

2025-04-28 07:46:03

2020-10-22 07:05:28

數據服務器秒殺
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区中文字幕 | 成人午夜 | jizz亚洲人| 黄色片大全在线观看 | 国产日韩精品久久 | 精品久久久久久久久久 | 在线不卡视频 | 蜜桃臀av一区二区三区 | 天天操网| 亚洲视频三区 | 国产.com| 免费成年网站 | 日本中文字幕日韩精品免费 | 欧美精品综合在线 | 久久不卡视频 | 国产精品一区二区av | 九九天堂网 | 欧美人人| 精品视频一区二区三区在线观看 | 在线一区 | 天天爽夜夜骑 | 美女视频一区二区三区 | 久久精品男人的天堂 | 欧美色综合 | caoporn国产精品免费公开 | 95国产精品 | 色欧美片视频在线观看 | 亚洲精品久久久蜜桃 | 狠狠色综合网站久久久久久久 | 亚洲精品视频播放 | 岛国午夜 | 日韩欧美中文 | 羞羞视频在线观看 | 亚洲天堂色 | 成人三级在线观看 | 911影院| 观看毛片| 亚洲网站在线播放 | 国产精品一区二区三区四区 | 欧美a区| 国产午夜精品久久久 |