新聞中心
前言

我們先簡單回顧一下,訂單系統(tǒng)是整個電商交易平臺的核心,在它與內部模塊、外部第三方系統(tǒng)打交道的過程中,需要完成很多額外的步驟:
- 為用戶積分
- 發(fā)放紅包卡券
- 庫存扣減
- 通知物流系統(tǒng)
- 發(fā)送短信通知
在引入 MQ 后,我們可以讓訂單系統(tǒng)僅僅完成最核心的功能,然后將發(fā)送消息到 MQ。比如需要進行減庫存,就發(fā)送一個消息到庫存消息隊列中,然后庫存系統(tǒng)從這個 MQ 里獲取消息再進行處理就可以,把這些很耗時的步驟慢慢執(zhí)行,從而也實現(xiàn)了系統(tǒng)之間的解耦。
但 MQ 還有一個更加強大的功能:緩沖流量,削峰填谷,諸如雙11這樣的大促活動,瞬時間涌入的大量下單請求有可能直接壓垮服務器,導致整個系統(tǒng)的癱瘓,通過使用 MQ 我們可以更好地解決流量突刺的問題。
本文就以秒殺場景為基礎,看完后會有更清晰的認識。本文將會從以下幾個方面來講述相關知識,相信大家耐心看了之后肯定有收獲,碼字不易,別忘了「在看」,「轉發(fā)」哦。
- 經典的秒殺場景
- 流量洪峰帶來的難點
- 使用 MQ 削峰填谷
- 升級整體架構
正文
01 經典的秒殺場景
秒殺場景一般出現(xiàn)在類電商的 APP 中,雙十一、618 這種打折大促已經屢見不鮮,各種節(jié)日都能成為剁手的理由。
就連饑餓營銷也被各大公司玩的越來越6,像我自己喜歡球鞋,喜歡買AJ和椰子,有過搶鞋經歷的同學一定知道有多痛苦,尤其是每次的結果都是這張圖。
每年的雙 11 活動在零點之后會開啟一個特別大的折扣優(yōu)惠,比如前五分鐘下單買五件可以享受三折優(yōu)惠。
全中國無數(shù)的男生女生,在雙 11 之前幾天就會在購物車精挑細選大量的商品,零點一到,瘋狂點擊下單。
每個接口對應的業(yè)務復雜度不同,有的接口一個請求可能要執(zhí)行五六次數(shù)據庫操作。即使我們用高配置的 16 核 32G 以及 SSD 固態(tài)硬盤的機器,當流量洪峰到來時,CPU、磁盤、IO 等負載都會瞬間飆升,一段時間后,系統(tǒng)是無論如何扛不住持續(xù)到達的請求。
02 流量洪峰帶來的難點
經典的秒殺場景主要有兩個特點:
(1)秒殺時大量用戶會在同一時間同時進行搶購,網站瞬時訪問流量激增;
(2)秒殺一般是訪問請求量遠遠大于庫存數(shù)量,只有少部分用戶能夠秒殺成功。
隨之而來,對我們的系統(tǒng)就帶來一系列要求:
(1)短時間內并發(fā)量激增,對系統(tǒng)負載壓力大,容易造成崩潰;
(2)真正能秒殺成功的還是少數(shù),天然的讀多寫少場景,如何對流量進行分配;
(3)分布式的環(huán)境下,如何做到一致性的處理;
(4)競爭資源有限,如何做到精準的控制,準時準點,不能多買,不能少賣,不能重復買。
而在這么多難點中,我們首要任務就是去解決并發(fā)量激增的問題,如果到達的請求太多直接壓垮了服務器,那其他的功能根本無從談起。
03 使用 MQ 削峰填谷
MQ 除了可以使用異步的方式實現(xiàn)系統(tǒng)間的解耦,更可以在雙 11 這樣的秒殺活動中,通過削峰填谷的方式,處理瞬時間涌入的大量請求。
什么是削峰填谷?
削峰填谷本身是電力行業(yè)的概念,電力企業(yè)通過必要的技術和管理手段,降低電網的高峰負荷,提高低谷負荷,平滑負荷曲線,提高負荷率,保證電網的穩(wěn)定運行。
假設一個應用,它能夠每秒處理 1000 個請求。如果在第一秒接收到 2000 個請求,而接下來的兩秒都沒有請求到達。
整個應用必然面臨兩個問題:
(1)在第一秒被 2000 個請求直接壓垮;
(2)假設第一秒沒有被壓垮,它在這一秒時間內只能處理 1000 請求,第二第三秒卻完全空閑,浪費了系統(tǒng)資源。
所以,我們可以通過 MQ 把請求突刺均攤到一段時間內,讓系統(tǒng)負載保持在請求處理水位之內,同時盡可能地處理更多請求,從而起到“削峰填谷”的效果。
紅色的部分是超出系統(tǒng)處理能力的部分,可以把紅色的那部分消息平攤到后面空閑時去處理,這樣既可以保證系統(tǒng)負載處在一個穩(wěn)定的水位,又可以盡可能地處理更多消息。通過配置流控規(guī)則,可以達到消息勻速處理的效果。
04 升級系統(tǒng)架構
隨著使用應用的用戶越來越多,系統(tǒng)面臨的壓力也會越來越大,無論是并發(fā)量還是數(shù)據量,你會發(fā)現(xiàn)整個系統(tǒng)各個模塊都需要進行優(yōu)化。
一個高并發(fā)、大數(shù)據量的系統(tǒng)架構,需要不斷的迭代和進化,涉及到大量的技術方案、架構重構。
針對秒殺的場景,上游發(fā)起高并發(fā)的下單操作,由于下游處理能力有限,兩端速度不匹配。此時我們引入 MQ 可以對流量進行緩沖,并實現(xiàn)削峰填谷。
上游速度很快,每秒發(fā)起五萬個請求也沒關系,它只管往 MQ 中發(fā)。下游系統(tǒng)雖然每秒只能處理 1000 個請求,但它完全可以 follow 自己的節(jié)奏,每隔一段時間,主動拉取若干條信息,實施限流的效果,保護自身。
而在這個過程中,只需要引入 MQ 組件,對上下游的業(yè)務代碼并不用有太多的修改。
在接下來的文章我會更加詳細介紹,使用現(xiàn)在主流的消息中間件 RocketMQ 進行實現(xiàn),敬請期待~
本文轉載自微信公眾號「程序員大帝」,可以通過以下二維碼關注。轉載本文請聯(lián)系 程序員大帝公眾號。
本文標題:還在糾結秒殺?看看 MQ 如何搞定
分享網址:http://fisionsoft.com.cn/article/dpoiodj.html


咨詢
建站咨詢
