www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]個人從事電商行業(yè)十幾年,經(jīng)歷過大大小小的促銷活動和秒殺上百次,每次做秒殺瞬時訪問量會翻數(shù)十倍,甚至數(shù)百倍。

個人從事電商行業(yè)十幾年,經(jīng)歷過大大小小的促銷活動和秒殺上百次,每次做秒殺瞬時訪問量會翻數(shù)十倍,甚至數(shù)百倍。對系統(tǒng)架構(gòu)是巨大的考驗,期間也曾經(jīng)歷過系統(tǒng)宕機(jī),甚至整體雪崩。那么我們怎么設(shè)計秒殺系統(tǒng),才能保證秒殺系統(tǒng)的高性能和穩(wěn)定性,同時還要保證日常業(yè)務(wù)不受影響呢?

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

那么我們曾經(jīng)是怎么設(shè)計秒殺系統(tǒng)的呢?主要涉及以下幾個方面:

秒殺業(yè)務(wù)流程上的考慮:

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

頁面靜態(tài)化:

“秒殺開始前幾分鐘,大量用戶開始進(jìn)入秒殺商品詳情頁面,很多人開始頻繁刷新秒殺商品詳情頁,這時秒殺商品詳情頁訪問量會猛增”。如果請求全部打到后端服務(wù),那后端服務(wù)的壓力會非常大(后端服務(wù)要處理業(yè)務(wù)邏輯,而且還要訪問數(shù)據(jù)庫,吞吐量比較低)。

考慮到秒殺是運(yùn)營同學(xué)提前安排的活動,要秒殺哪些商品、商品價格等信息在秒殺活動開始前已經(jīng)確定下來,所以我們可以把秒殺商品詳情頁做成靜態(tài)頁面,把商品詳情、商品價格等參數(shù)、評論評價等信息全部放在這個靜態(tài)頁面里,然后把這個靜態(tài)頁面上傳到CDN上預(yù)熱(CDN是內(nèi)容分發(fā)網(wǎng)絡(luò),可以簡單理解成互聯(lián)網(wǎng)上的巨大的緩存,用于存放靜態(tài)頁面、圖片、視頻等,可以顯著提高訪問速度),用CDN扛流量,大量的商品詳情頁的訪問請求就不用訪問自己的網(wǎng)站(源站)。這樣既可以提高訪問速度,也沒有給網(wǎng)站增加壓力,同時也減少了網(wǎng)站帶寬壓力。

秒殺系統(tǒng)設(shè)計~億級用戶


請求攔截:

前端頁面,相關(guān)按鈕點(diǎn)擊后置灰,防止重復(fù)提交

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

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

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

另外,秒殺過程網(wǎng)關(guān)壓力會比較大,網(wǎng)關(guān)可以做成集群,多節(jié)點(diǎn)分?jǐn)傇L問壓力。

秒殺系統(tǒng)設(shè)計~億級用戶

后端服務(wù)設(shè)計:

如果秒殺庫存只有200,經(jīng)過網(wǎng)關(guān)攔截,再加上采用分段放行的方式,對于后端服務(wù)基本沒什么壓力了,日常的后端服務(wù)就完全可以支撐秒殺活動了。不用再做更復(fù)雜的設(shè)計。不過,假如秒殺庫存有幾萬個,放行的下單請求就有幾萬個,為了用戶體驗放行總時間也不能太長,這時后端服務(wù)該怎么設(shè)計呢?

這時主要壓力就在數(shù)據(jù)庫了,扣減庫存壓力,創(chuàng)建訂單壓力。
庫存可以放到Reids緩存中,來提高扣減庫存吞吐能力。對于熱點(diǎn)商品的庫存可以利用Redis分片存儲。

創(chuàng)建訂單可以走異步消息隊列。后端服務(wù)接到下單請求,直接放進(jìn)消息隊列,監(jiān)聽服務(wù)取出消息后,先將訂單信息寫入Redis,每隔100ms或者積攢100條訂單,批量寫入數(shù)據(jù)庫一次。前端頁面下單后定時向后端拉取訂單信息,獲取到訂單信息后跳轉(zhuǎn)到支付頁面。用這種批量異步寫入數(shù)據(jù)庫的方式大幅減少了數(shù)據(jù)庫寫入頻次,從而明顯降低了訂單數(shù)據(jù)庫寫入壓力。

秒殺系統(tǒng)設(shè)計~億級用戶

隔離:

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

秒殺系統(tǒng)設(shè)計~億級用戶

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

秒殺系統(tǒng)設(shè)計~億級用戶

3,數(shù)據(jù)隔離。為了避免秒殺活動影響到日常售賣業(yè)務(wù),Redis緩存需要單獨(dú)部署,甚至數(shù)據(jù)庫也需要單獨(dú)部署!數(shù)據(jù)隔離后,秒殺剩余的庫存怎么辦?秒殺活動結(jié)束后,剩余庫存可以歸還到日常庫存繼續(xù)做為普通商品售賣。數(shù)據(jù)隔離后,秒殺訂單和日常訂單不在相同的數(shù)據(jù)庫,之后的訂單查詢怎么展示?可以在創(chuàng)建秒殺訂單后發(fā)消息到消息隊列,日常訂單服務(wù)采取拉的方式消費(fèi)消息,這時日常訂單服務(wù)是主動方,可以采用線程池的方式,根據(jù)機(jī)器的性能來增加或縮小線程池的大小,控制拉取消息的速度,來控制訂單數(shù)據(jù)庫的寫入壓力。

網(wǎng)絡(luò):

秒殺前要和網(wǎng)絡(luò)運(yùn)營商CDN服務(wù)商提前申請帶寬。

還有哪些細(xì)節(jié)要考慮:

  1. 如何避免超賣?如果在redis中扣減庫存,可以利用decr命令扣減庫存,decr是原子操作,在分布式環(huán)境下也不會有并發(fā)問題,decr扣減庫存后,判斷返回值,如果返回值小于0,扣減庫存失敗,秒殺也就失敗了;如果在數(shù)據(jù)庫中扣減庫存可以在where后面加上庫存大于0的條件,來避免庫存被減成負(fù)值。這樣就可以避免超賣情況發(fā)生了。

  2. 接口防刷,前面已經(jīng)提到過,在網(wǎng)關(guān)層對下單等接口按userID限流。

  3. 網(wǎng)關(guān)層除了對userID做限流外,還要做整體限流。在實際訪問量超過預(yù)估訪問量時,整體限流可以起到保護(hù)作用,避免系統(tǒng)被壓垮。

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

  5. 可以結(jié)合風(fēng)控系統(tǒng),在網(wǎng)關(guān)層把羊毛黨等有問題的用戶請求直接拒掉。

  6. 可以在網(wǎng)關(guān)層上面再加一層防火墻或者高防服務(wù),來防御DDos等分布式網(wǎng)絡(luò)攻擊。

好啦,就分享到這里。


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉