国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

如何解決秒殺的性能問題和超賣的討論

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 19:15:13
文檔

如何解決秒殺的性能問題和超賣的討論

如何解決秒殺的性能問題和超賣的討論:最近業(yè)務(wù)試水電商,接了一個(gè)秒殺的活。之前經(jīng)常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結(jié)合實(shí)際一次了。ps:進(jìn)入正文前先說一點(diǎn)個(gè)人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時(shí)候發(fā)現(xiàn)還是有很多想不到的地方其實(shí)都沒懂
推薦度:
導(dǎo)讀如何解決秒殺的性能問題和超賣的討論:最近業(yè)務(wù)試水電商,接了一個(gè)秒殺的活。之前經(jīng)常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結(jié)合實(shí)際一次了。ps:進(jìn)入正文前先說一點(diǎn)個(gè)人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時(shí)候發(fā)現(xiàn)還是有很多想不到的地方其實(shí)都沒懂

最近業(yè)務(wù)試水電商,接了一個(gè)秒殺的活。之前經(jīng)常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結(jié)合實(shí)際一次了。

ps:進(jìn)入正文前先說一點(diǎn)個(gè)人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時(shí)候發(fā)現(xiàn)還是有很多想不到的地方其實(shí)都沒懂,再次驗(yàn)證了“細(xì)節(jié)是魔鬼”的理論。并且一個(gè)人的能力有限,只有大家一起討論才能想的更周全,更細(xì)致。好了,閑話少說,下面進(jìn)入正文。

一、秒殺帶來了什么?


秒殺或搶購活動(dòng)一般會(huì)經(jīng)過【預(yù)約】【搶訂單】【支付】這3個(gè)大環(huán)節(jié),而其中【搶訂單】這個(gè)環(huán)節(jié)是最考驗(yàn)業(yè)務(wù)提供方的抗壓能力的。

搶訂單環(huán)節(jié)一般會(huì)帶來2個(gè)問題:

1、高并發(fā)

比較火熱的秒殺在線人數(shù)都是10w起的,如此之高的在線人數(shù)對于網(wǎng)站架構(gòu)從前到后都是一種考驗(yàn)。

2、超賣

任何商品都會(huì)有數(shù)量上限,如何避免成功下訂單買到商品的人數(shù)不超過商品數(shù)量的上限,這是每個(gè)搶購活動(dòng)都要面臨的難題。

二、如何解決?


首先,產(chǎn)品解決方案我們就不予討論了。我們只討論技術(shù)解決方案

1、前端

面對高并發(fā)的搶購活動(dòng),前端常用的三板斧是【擴(kuò)容】【靜態(tài)化】【限流】

A:擴(kuò)容

加機(jī)器,這是最簡單的方法,通過增加前端池的整體承載量來抗峰值。

B:靜態(tài)化

將活動(dòng)頁面上的所有可以靜態(tài)的元素全部靜態(tài)化,并盡量減少動(dòng)態(tài)元素。通過CDN來抗峰值。

C:限流

一般都會(huì)采用IP級別的限流,即針對某一個(gè)IP,限制單位時(shí)間內(nèi)發(fā)起請求數(shù)量。

或者活動(dòng)入口的時(shí)候增加游戲或者問題環(huán)節(jié)進(jìn)行消峰操作。

D:有損服務(wù)

最后一招,在接近前端池承載能力的水位上限的時(shí)候,隨機(jī)拒絕部分請求來保護(hù)活動(dòng)整體的可用性。

2、后端

那么后端的數(shù)據(jù)庫在高并發(fā)和超賣下會(huì)遇到什么問題呢?主要會(huì)有如下3個(gè)問題:(主要討論寫的問題,讀的問題通過增加cache可以很容易的解決)

I: 首先MySQL自身對于高并發(fā)的處理性能就會(huì)出現(xiàn)問題,一般來說,MySQL的處理性能會(huì)隨著并發(fā)thread上升而上升,但是到了一定的并發(fā)度之后會(huì)出現(xiàn)明顯的拐點(diǎn),之后一路下降,最終甚至?xí)葐蝨hread的性能還要差。

II: 其次,超賣的根結(jié)在于減庫存操作是一個(gè)事務(wù)操作,需要先select,然后insert,最后update -1。最后這個(gè)-1操作是不能出現(xiàn)負(fù)數(shù)的,但是當(dāng)多用戶在有庫存的情況下并發(fā)操作,出現(xiàn)負(fù)數(shù)這是無法避免的。

III:最后,當(dāng)減庫存和高并發(fā)碰到一起的時(shí)候,由于操作的庫存數(shù)目在同一行,就會(huì)出現(xiàn)爭搶InnoDB行鎖的問題,導(dǎo)致出現(xiàn)互相等待甚至死鎖,從而大大降低MySQL的處理性能,最終導(dǎo)致前端頁面出現(xiàn)超時(shí)異常。

針對上述問題,如何解決呢? 我們先看眼淘寶的高大上解決方案:

I: 關(guān)閉死鎖檢測,提高并發(fā)處理性能。

II:修改源代碼,將排隊(duì)提到進(jìn)入引擎層前,降低引擎層面的并發(fā)度。

III:組提交,降低server和引擎的交互次數(shù),降低IO消耗。

以上內(nèi)容可以參考丁奇在DTCC2013上分享的《秒殺場景下MySQL的低效》一文。在文中所有優(yōu)化都使用后,TPS在高并發(fā)下,從原始的150飆升到8.5w,提升近566倍,非常嚇人!!!

不過結(jié)合我們的實(shí)際,改源碼這種高大上的解決方案顯然有那么一點(diǎn)不切實(shí)際。于是小伙伴們需要討論出一種適合我們實(shí)際情況的解決方案。以下就是我們討論的解決方案:

首先設(shè)定一個(gè)前提,為了防止超賣現(xiàn)象,所有減庫存操作都需要進(jìn)行一次減后檢查,保證減完不能等于負(fù)數(shù)。(由于MySQL事務(wù)的特性,這種方法只能降低超賣的數(shù)量,但是不可能完全避免超賣)

update number set x=x-1 where (x -1 ) >= 0;

解決方案1:

將存庫從MySQL前移到Redis中,所有的寫操作放到內(nèi)存中,由于Redis中不存在鎖故不會(huì)出現(xiàn)互相等待,并且由于Redis的寫性能和讀性能都遠(yuǎn)高于MySQL,這就解決了高并發(fā)下的性能問題。然后通過隊(duì)列等異步手段,將變化的數(shù)據(jù)異步寫入到DB中。

優(yōu)點(diǎn):解決性能問題

缺點(diǎn):沒有解決超賣問題,同時(shí)由于異步寫入DB,存在某一時(shí)刻DB和Redis中數(shù)據(jù)不一致的風(fēng)險(xiǎn)。

解決方案2:

引入隊(duì)列,然后將所有寫DB操作在單隊(duì)列中排隊(duì),完全串行處理。當(dāng)達(dá)到庫存閥值的時(shí)候就不在消費(fèi)隊(duì)列,并關(guān)閉購買功能。這就解決了超賣問題。

優(yōu)點(diǎn):解決超賣問題,略微提升性能。

缺點(diǎn):性能受限于隊(duì)列處理機(jī)處理性能和DB的寫入性能中最短的那個(gè),另外多商品同時(shí)搶購的時(shí)候需要準(zhǔn)備多條隊(duì)列。

解決方案3:

將寫操作前移到MC中,同時(shí)利用MC的輕量級的鎖機(jī)制CAS來實(shí)現(xiàn)減庫存操作。

優(yōu)點(diǎn):讀寫在內(nèi)存中,操作性能快,引入輕量級鎖之后可以保證同一時(shí)刻只有一個(gè)寫入成功,解決減庫存問題。

缺點(diǎn):沒有實(shí)測,基于CAS的特性不知道高并發(fā)下是否會(huì)出現(xiàn)大量更新失敗?不過加鎖之后肯定對并發(fā)性能會(huì)有影響。

解決方案4:

將提交操作變成兩段式,先申請后確認(rèn)。然后利用Redis的原子自增操作(相比較MySQL的自增來說沒有空洞),同時(shí)利用Redis的事務(wù)特性來發(fā)號,保證拿到小于等于庫存閥值的號的人都可以成功提交訂單。然后數(shù)據(jù)異步更新到DB中。

優(yōu)點(diǎn):解決超賣問題,庫存讀寫都在內(nèi)存中,故同時(shí)解決性能問題。

缺點(diǎn):由于異步寫入DB,可能存在數(shù)據(jù)不一致。另可能存在少買,也就是如果拿到號的人不真正下訂單,可能庫存減為0,但是訂單數(shù)并沒有達(dá)到庫存閥值。

三、總結(jié)


1、前端三板斧【擴(kuò)容】【限流】【靜態(tài)化】

2、后端兩條路【內(nèi)存】+【排隊(duì)】

四、非技術(shù)感想


1、團(tuán)隊(duì)的力量是無窮的,各種各樣的解決方案(先不談可行性)都是在小伙伴們七嘴八舌中討論出來的。我們需要讓所有人都發(fā)出自己的聲音,不要著急去否定。

2、優(yōu)化需要從整體層面去思考,不要只糾結(jié)于自己負(fù)責(zé)的部分,如果只盯著一個(gè)點(diǎn)思考,最后很可能就走進(jìn)死胡同中了。

3、有很多東西以為讀過了就懂了,其實(shí)不然。依然還是需要實(shí)踐,否則別人的知識永遠(yuǎn)不可能變成自己的。

4、多思考為什么,會(huì)發(fā)生什么,不要想當(dāng)然。只有這樣才能深入進(jìn)去,而不是留在表面。

ps:以上僅僅是我們討論的一些方案設(shè)想,歡迎大家一起討論各種可行方案。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

如何解決秒殺的性能問題和超賣的討論

如何解決秒殺的性能問題和超賣的討論:最近業(yè)務(wù)試水電商,接了一個(gè)秒殺的活。之前經(jīng)常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結(jié)合實(shí)際一次了。ps:進(jìn)入正文前先說一點(diǎn)個(gè)人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時(shí)候發(fā)現(xiàn)還是有很多想不到的地方其實(shí)都沒懂
推薦度:
標(biāo)簽: 淘寶 如何 電商
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: a免费国产一级特黄aa大 | 亚洲第一区视频 | 欧美首页 | 精品日韩一区二区三区 | 欧美日韩中 | 国产第二十页 | 久久国产精品成人免费 | 免费在线观看的视频 | 欧美日韩亚洲国产无线码 | 亚洲欧美日韩另类 | 影音先锋亚洲综合小说在线 | 国产精品久久久精品三级 | 五月激情综合网 | 国产精品成久久久久三级 | 日韩欧美国产另类 | 亚洲欧美综合另类 | 欧美亚洲视频在线观看 | 日韩成人国产精品视频 | 欧美日本一区二区三区 | 亚洲一区二区三区四区在线 | 五月婷婷中文字幕 | 国产欧美日韩另类va在线 | 国产精品久久久久久久久久久久 | 亚洲欧美日韩激情在线观看 | 日韩欧美亚洲 | 欧美一区二区在线播放 | 亚洲香蕉 | 亚洲欧美中文日韩综合 | 国产精品欧美激情在线播放 | 久久久久国产成人精品亚洲午夜 | 一区二区在线观看高清 | 亚洲欧美综合网 | 亚洲综合一区二区精品久久 | 香蕉久久一区二区三区 | 精品日韩一区二区三区 | 日韩毛毛片 | 在线观看亚洲视频 | 国产一级片在线 | 欧美日韩午夜 | 久操久热 | 在线观看国产亚洲 |