• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
    當前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網 責編:小采 時間:2020-11-09 19:15:13
    文檔

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

    如何解決秒殺的性能問題和超賣的討論:最近業務試水電商,接了一個秒殺的活。之前經??吹教詫毜耐袀冇懻撁霘ⅲ懻撾娚?,這次終于輪到我們自己理論結合實際一次了。ps:進入正文前先說一點個人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時候發現還是有很多想不到的地方其實都沒懂
    推薦度:
    導讀如何解決秒殺的性能問題和超賣的討論:最近業務試水電商,接了一個秒殺的活。之前經??吹教詫毜耐袀冇懻撁霘ⅲ懻撾娚蹋@次終于輪到我們自己理論結合實際一次了。ps:進入正文前先說一點個人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時候發現還是有很多想不到的地方其實都沒懂

    最近業務試水電商,接了一個秒殺的活。之前經??吹教詫毜耐袀冇懻撁霘?,討論電商,這次終于輪到我們自己理論結合實際一次了。

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

    一、秒殺帶來了什么?


    秒殺或搶購活動一般會經過【預約】【搶訂單】【支付】這3個大環節,而其中【搶訂單】這個環節是最考驗業務提供方的抗壓能力的。

    搶訂單環節一般會帶來2個問題:

    1、高并發

    比較火熱的秒殺在線人數都是10w起的,如此之高的在線人數對于網站架構從前到后都是一種考驗。

    2、超賣

    任何商品都會有數量上限,如何避免成功下訂單買到商品的人數不超過商品數量的上限,這是每個搶購活動都要面臨的難題。

    二、如何解決?


    首先,產品解決方案我們就不予討論了。我們只討論技術解決方案

    1、前端

    面對高并發的搶購活動,前端常用的三板斧是【擴容】【靜態化】【限流】

    A:擴容

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

    B:靜態化

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

    C:限流

    一般都會采用IP級別的限流,即針對某一個IP,限制單位時間內發起請求數量。

    或者活動入口的時候增加游戲或者問題環節進行消峰操作。

    D:有損服務

    最后一招,在接近前端池承載能力的水位上限的時候,隨機拒絕部分請求來保護活動整體的可用性。

    2、后端

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

    I: 首先MySQL自身對于高并發的處理性能就會出現問題,一般來說,MySQL的處理性能會隨著并發thread上升而上升,但是到了一定的并發度之后會出現明顯的拐點,之后一路下降,最終甚至會比單thread的性能還要差。

    II: 其次,超賣的根結在于減庫存操作是一個事務操作,需要先select,然后insert,最后update -1。最后這個-1操作是不能出現負數的,但是當多用戶在有庫存的情況下并發操作,出現負數這是無法避免的。

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

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

    I: 關閉死鎖檢測,提高并發處理性能。

    II:修改源代碼,將排隊提到進入引擎層前,降低引擎層面的并發度。

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

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

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

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

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

    解決方案1:

    將存庫從MySQL前移到Redis中,所有的寫操作放到內存中,由于Redis中不存在鎖故不會出現互相等待,并且由于Redis的寫性能和讀性能都遠高于MySQL,這就解決了高并發下的性能問題。然后通過隊列等異步手段,將變化的數據異步寫入到DB中。

    優點:解決性能問題

    缺點:沒有解決超賣問題,同時由于異步寫入DB,存在某一時刻DB和Redis中數據不一致的風險。

    解決方案2:

    引入隊列,然后將所有寫DB操作在單隊列中排隊,完全串行處理。當達到庫存閥值的時候就不在消費隊列,并關閉購買功能。這就解決了超賣問題。

    優點:解決超賣問題,略微提升性能。

    缺點:性能受限于隊列處理機處理性能和DB的寫入性能中最短的那個,另外多商品同時搶購的時候需要準備多條隊列。

    解決方案3:

    將寫操作前移到MC中,同時利用MC的輕量級的鎖機制CAS來實現減庫存操作。

    優點:讀寫在內存中,操作性能快,引入輕量級鎖之后可以保證同一時刻只有一個寫入成功,解決減庫存問題。

    缺點:沒有實測,基于CAS的特性不知道高并發下是否會出現大量更新失???不過加鎖之后肯定對并發性能會有影響。

    解決方案4:

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

    優點:解決超賣問題,庫存讀寫都在內存中,故同時解決性能問題。

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

    三、總結


    1、前端三板斧【擴容】【限流】【靜態化】

    2、后端兩條路【內存】+【排隊】

    四、非技術感想


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

    2、優化需要從整體層面去思考,不要只糾結于自己負責的部分,如果只盯著一個點思考,最后很可能就走進死胡同中了。

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

    4、多思考為什么,會發生什么,不要想當然。只有這樣才能深入進去,而不是留在表面。

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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    如何解決秒殺的性能問題和超賣的討論:最近業務試水電商,接了一個秒殺的活。之前經??吹教詫毜耐袀冇懻撁霘?,討論電商,這次終于輪到我們自己理論結合實際一次了。ps:進入正文前先說一點個人感受,之前看淘寶的ppt感覺都懂了,等到自己出解決方案的時候發現還是有很多想不到的地方其實都沒懂
    推薦度:
    標簽: 淘寶 如何 電商
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲av无码成人精品国产| 孩交VIDEOS精品乱子| 国产精品久久久久久吹潮| 女人高潮内射99精品| 国产69精品久久久久99尤物| 久久精品国产第一区二区三区| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 久久99精品久久久久久9蜜桃| 免费精品99久久国产综合精品| 国产精品香港三级国产AV| 亚洲精品国产字幕久久不卡| 亚洲av无码成人精品区在线播放 | 国产精品成人免费观看| 精品一区二区三区中文字幕| 国产精品日本一区二区在线播放 | 99re66在线观看精品免费 | 国产欧美精品AAAAAA片| 亚洲精品乱码久久久久久蜜桃不卡 | 综合在线视频精品专区| 亚洲av无码国产精品色在线看不卡| 久久精品国产99久久久香蕉| 国产精品亚洲一区二区在线观看| 无码精品久久一区二区三区| 国产99久久精品一区二区| 久久国产精品成人影院| 老司机性色福利精品视频| 亚洲国产精品久久电影欧美| 亚洲精品无码乱码成人 | 99精品国产成人一区二区| 一级香蕉精品视频在线播放| 一级成人精品h| 国产精品欧美一区二区三区| 国产精品偷窥熟女精品视频| 国产精品亚洲专区无码WEB | 亚洲色图国产精品| 国产精品高清在线观看| 国产精品一香蕉国产线看观看| 国产精品最新国产精品第十页 | 亚洲欧美国产精品第1页| 亚洲午夜精品第一区二区8050| 亚洲精品无码永久在线观看|