第1節(jié) 秒殺架構(gòu)的設(shè)計(jì)

一、秒殺系統(tǒng)為什么難污桦?(難點(diǎn)在哪里针肥?)

1、場(chǎng)景分析

場(chǎng)景1:QQ即時(shí)通訊業(yè)務(wù)

業(yè)務(wù)特點(diǎn):細(xì)粒度的數(shù)據(jù)查詢
業(yè)務(wù)場(chǎng)景:

查詢個(gè)人用戶信息
查詢好友列表
查詢加入的群列表
......

場(chǎng)景分析:

上述的即時(shí)通訊的業(yè)務(wù)場(chǎng)景可看到象迎,無論是個(gè)人用戶信息撩嚼,還是好友列表,這部分?jǐn)?shù)據(jù)均是用戶自己的信息挖帘,只有自己才會(huì)查詢完丽,所以與他人發(fā)生鎖沖突的幾率極低。即使并發(fā)大拇舀,數(shù)據(jù)量大逻族,也可以通過水平切分?jǐn)?shù)據(jù)的方式進(jìn)行支持。

場(chǎng)景2:微博Feed流業(yè)務(wù)

業(yè)務(wù)特點(diǎn):讀多寫少骄崩,少量的鎖沖突
業(yè)務(wù)場(chǎng)景:

加載關(guān)注的用戶列表
獲取用戶的Feed消息列表
對(duì)消息進(jìn)行排序
返回排好序的第一頁數(shù)據(jù)

場(chǎng)景分析:

大多數(shù)的用戶都是讀取數(shù)據(jù)的操作聘鳞,只有少部分人是寫數(shù)據(jù)操作,當(dāng)讀取數(shù)據(jù)的時(shí)候要拂,對(duì)方正在寫數(shù)據(jù)時(shí)抠璃,會(huì)出現(xiàn)一定的鎖沖突。

場(chǎng)景3:秒殺業(yè)務(wù)
業(yè)務(wù)特點(diǎn):讀多寫少脱惰,少量的鎖沖突
業(yè)務(wù)場(chǎng)景:

讀取是否還有剩余商品(余票)搏嗡,是讀取操作。
搶購商品(余票)拉一,是寫入操作采盒。
剩余商品(余票)的數(shù)量是有限的,且是公用資源蔚润。

場(chǎng)景分析:

業(yè)務(wù)場(chǎng)景中磅氨,需要發(fā)生大量的讀取請(qǐng)求,讀取的是公共資源嫡纠,因?yàn)楣操Y源較少烦租,所以需要搶占資源,導(dǎo)致很多寫請(qǐng)求進(jìn)入除盏,出現(xiàn)極大的鎖沖突叉橱。

2、總結(jié)歸納

由上面的三個(gè)場(chǎng)景痴颊,我們可以看到赏迟,其實(shí)系統(tǒng)的難度是如何解決數(shù)據(jù)庫鎖沖突的問題,秒殺系統(tǒng)的讀多好解決蠢棱,我們引入緩存锌杀,即可支撐該讀多的操作甩栈,但是寫多的操作才是解決大量鎖沖突的關(guān)鍵。

二糕再、秒殺業(yè)務(wù)的架構(gòu)解決方案

架構(gòu)的解決原則:降低數(shù)據(jù)層的鎖沖突量没。

架構(gòu)的解決方案:

降讀(降低數(shù)據(jù)庫讀取操作):引入緩存
降寫(降低數(shù)據(jù)庫讀取操作):將請(qǐng)求攔截在上游

系統(tǒng)架構(gòu)的分層方案:

  1. 瀏覽器(前端)
  2. 站點(diǎn)層(Tomcat)
  3. 服務(wù)層(后臺(tái)服務(wù))
  4. 數(shù)據(jù)層(MySQL、Redis)

將請(qǐng)求攔截在上游的方案:

1突想、瀏覽器的攔截

請(qǐng)求防重處理:例如每5s只能發(fā)起一次請(qǐng)求

2殴蹄、站點(diǎn)層的攔截

去除無效請(qǐng)求:根據(jù)用戶id進(jìn)行計(jì)數(shù),控制每個(gè)用戶id猾担,5秒內(nèi)只能發(fā)起一次請(qǐng)求袭灯。

3、服務(wù)層的攔截

使用削峰限速:按庫存和數(shù)據(jù)庫抗壓能力進(jìn)行請(qǐng)求的透過绑嘹。

4稽荧、數(shù)據(jù)層

支持高可用:設(shè)置兩個(gè)數(shù)據(jù)節(jié)點(diǎn),支持高可用工腋。

架構(gòu)設(shè)計(jì)上常見的問題及解決方案:

問題1:壓力最大的在站點(diǎn)層姨丈,如何解決?
解決方案:做服務(wù)降低操作,對(duì)重復(fù)請(qǐng)求進(jìn)行默認(rèn)返回擅腰。

問題2:站點(diǎn)層如何進(jìn)行計(jì)數(shù)蟋恬?
解決方案:可以引入Redis進(jìn)行中間件計(jì)數(shù),Redis一秒可支持幾十萬個(gè)請(qǐng)求趁冈,使用Redis集群即可支持100W的請(qǐng)求歼争。

問題3:Redis為外部中間件,大量的并發(fā)會(huì)有帶寬瓶頸問題箱歧,如何解決矾飞?
解決方案:可以考慮使用服務(wù)本機(jī)內(nèi)存進(jìn)行計(jì)數(shù),雖然違背了微服務(wù)無狀態(tài)化設(shè)計(jì)呀邢,但是這部分?jǐn)?shù)據(jù)丟失對(duì)服務(wù)的影響不大,所以可以考慮豹绪。

問題4:采用內(nèi)存進(jìn)行計(jì)數(shù)价淌,如果解決用戶訪問單一服務(wù)器的問題?
解決方案:可以通過Nginx配置通過用戶id進(jìn)行分發(fā)請(qǐng)求的策略瞒津,這樣同一個(gè)用戶id就會(huì)落到同一個(gè)站點(diǎn)服務(wù)蝉衣。

問題5:為什么服務(wù)層釋放請(qǐng)求的數(shù)量要按庫存數(shù)和數(shù)據(jù)庫抗壓能力來釋放?
解決方案:如果釋放的數(shù)量大于庫存數(shù)巷蚪,一部分請(qǐng)求是失敗的病毡,給數(shù)據(jù)庫增加和浪費(fèi)系統(tǒng)IO,如果大于數(shù)據(jù)庫的抗壓能力屁柏,數(shù)據(jù)庫會(huì)發(fā)生宕機(jī)啦膜,無法辦理業(yè)務(wù)有送,那導(dǎo)致服務(wù)不可用,重啟數(shù)據(jù)庫也無法解決僧家。

三雀摘、產(chǎn)品的設(shè)計(jì)折中方案

方案1:支付和下單流程分離

業(yè)務(wù)分離,可以降低數(shù)據(jù)庫的寫壓力八拱,例如買票業(yè)務(wù)阵赠,下單后,45分鐘內(nèi)完成支付肌稻,支付業(yè)務(wù)在另一個(gè)服務(wù)內(nèi)清蚀,另一個(gè)數(shù)據(jù)庫內(nèi)。

方案2:分城市差異化銷售流程

不同班次爹谭,不同城市轧铁,在不同的時(shí)間點(diǎn)進(jìn)行銷售,完成業(yè)務(wù)的分流旦棉。

方案3:按鈕只能點(diǎn)擊一次

頁面防重點(diǎn)齿风,這樣可以減少頁面的無效請(qǐng)求。

方案4:庫存的顯示粒度加粗

例如顯示班次余票绑洛,只顯示有無余票救斑,并不顯示具體余票數(shù),這樣緩存信息只需要更新兩次真屯。

四脸候、秒殺業(yè)務(wù)的緩存結(jié)構(gòu)設(shè)計(jì)

待更新........

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绑蔫,隨后出現(xiàn)的幾起案子运沦,更是在濱河造成了極大的恐慌,老刑警劉巖配深,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件携添,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡篓叶,警方通過查閱死者的電腦和手機(jī)烈掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缸托,“玉大人左敌,你說我怎么就攤上這事±洌” “怎么了矫限?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我叼风,道長(zhǎng)取董,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任咬扇,我火速辦了婚禮甲葬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懈贺。我一直安慰自己经窖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布梭灿。 她就那樣靜靜地躺著画侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堡妒。 梳的紋絲不亂的頭發(fā)上配乱,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音皮迟,去河邊找鬼搬泥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伏尼,可吹牛的內(nèi)容都是我干的忿檩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼爆阶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼燥透!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辨图,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤班套,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后故河,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吱韭,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忧勿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褂策。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片由捎。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噩峦,死狀恐怖拓春,靈堂內(nèi)的尸體忽然破棺而出像棘,到底是詐尸還是另有隱情敦间,我是刑警寧澤攀甚,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布担忧,位于F島的核電站烦磁,受9級(jí)特大地震影響养匈,放射性物質(zhì)發(fā)生泄漏哼勇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一呕乎、第九天 我趴在偏房一處隱蔽的房頂上張望积担。 院中可真熱鬧,春花似錦猬仁、人聲如沸帝璧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽的烁。三九已至,卻和暖如春诈闺,著一層夾襖步出監(jiān)牢的瞬間渴庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工雅镊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留襟雷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓仁烹,卻偏偏與公主長(zhǎng)得像耸弄,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晃危,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349