凡是做過(guò)電商的同學(xué),都會(huì)遇到運(yùn)營(yíng)展開(kāi)的秒殺,限時(shí)購(gòu)等“高并發(fā)”的活動(dòng)。
秒殺從規(guī)模上來(lái)說(shuō)可以分為大秒和小秒。大秒指的是比如雙11這種特定的節(jié)日,商品規(guī)模超大、價(jià)格超低、流量超大的這種類型活動(dòng),小秒一般指的是商家自己配置的一些時(shí)段類型的活動(dòng),由商家自己指定時(shí)間上架。從形式來(lái)說(shuō)還可以分為單時(shí)段秒殺和多時(shí)段秒殺。但是在這個(gè)場(chǎng)景里,我們一般就是指的單時(shí)段大型秒殺。
秒殺這種業(yè)務(wù)場(chǎng)景其實(shí)特點(diǎn)很明顯:
1、帶有短期流量峰值特性,即:短時(shí)間內(nèi)會(huì)有大量的請(qǐng)求涌入;
2、請(qǐng)求的數(shù)據(jù)帶有熱點(diǎn)性,即:大量的請(qǐng)求同一數(shù)據(jù);
3、請(qǐng)求的成功有效率低,即:大量的請(qǐng)求中可能只有少量請(qǐng)求會(huì)成功處理業(yè)務(wù);
4、請(qǐng)求的流量峰值發(fā)生在下單之前,即:付款階段很少存在流量峰值。
一、秒殺的技術(shù)挑戰(zhàn)
1、對(duì)現(xiàn)有網(wǎng)站業(yè)務(wù)造成沖擊:秒殺活動(dòng)只是網(wǎng)站營(yíng)銷的一個(gè)附加活動(dòng),這個(gè)活動(dòng)具有時(shí)間短,并發(fā)訪問(wèn)量大的特點(diǎn),如果和網(wǎng)站原有應(yīng)用部署在一起,必然會(huì)對(duì)現(xiàn)有業(yè)務(wù)造成沖擊,稍有不慎可能導(dǎo)致整個(gè)網(wǎng)站癱瘓;
2、高并發(fā)下的應(yīng)用、數(shù)據(jù)庫(kù)負(fù)載:用戶在秒殺活動(dòng)開(kāi)始之前,通過(guò)不停的刷新瀏覽器頁(yè)面以保證不錯(cuò)過(guò)秒殺,這些請(qǐng)求如果按照一般網(wǎng)站的應(yīng)用架構(gòu),訪問(wèn)應(yīng)用,連接數(shù)據(jù)庫(kù),會(huì)對(duì)應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器造成極大的負(fù)載壓力;
3、突然增加的網(wǎng)絡(luò)及服務(wù)器帶寬:因?yàn)樵L問(wèn)秒殺頁(yè)面的用戶劇增,對(duì)資源的請(qǐng)求量也是劇增,網(wǎng)絡(luò)帶寬也上去了,超過(guò)平時(shí)網(wǎng)站使用的帶寬;
4、直接下單:秒殺的規(guī)則是到了秒殺秒殺時(shí)間才能開(kāi)始對(duì)商品下單購(gòu)買,在此時(shí)間點(diǎn)之前,只能瀏覽商品信息,不能下單。而下單頁(yè)面也是一個(gè)普通的URL,如果得到了這個(gè)URL,不用等到秒殺開(kāi)始就可以下單了。
二、秒殺系統(tǒng)的應(yīng)對(duì)策略
1、技術(shù)第一招:限流
對(duì)于秒殺出現(xiàn)的流量峰值,限流是最直接的削峰手段,被限制的請(qǐng)求可以直接返回,客戶端提示請(qǐng)求中提示。可想而知,當(dāng)10000/S的請(qǐng)求量被削成100/S的量,估計(jì)系統(tǒng)稍微優(yōu)化一下就能抗住。
2、第二招:消息隊(duì)列
說(shuō)到消息隊(duì)列,每個(gè)程序員都不陌生,它相當(dāng)于一個(gè)快速的數(shù)據(jù)容器,可以作為一個(gè)緩沖層來(lái)應(yīng)對(duì)流量高峰。如果從它的使用場(chǎng)景上來(lái)看,它可以算是低速設(shè)備和高速設(shè)備之間的平衡者,使用消息隊(duì)列來(lái)進(jìn)行削峰是一個(gè)很明顯的異步流程。應(yīng)用到秒殺的場(chǎng)景下,大量的請(qǐng)求會(huì)先進(jìn)入消息隊(duì)列,它不僅削平了流量的峰值,而且把秒殺下單的這個(gè)流程異步化,只要把請(qǐng)求都暫存入隊(duì)列,消費(fèi)端慢慢消費(fèi)即可,但是這里要注意,如果消費(fèi)的速度遠(yuǎn)遠(yuǎn)慢于消息的投遞速度,可能會(huì)影響整個(gè)系統(tǒng)性能。
除了削峰之外,我始終認(rèn)為消息隊(duì)列的最大作用是系統(tǒng)解耦,它把下單和支付解耦,下單和支付業(yè)務(wù)可以隨著自身系統(tǒng)的承載量來(lái)單獨(dú)擴(kuò)容。
3、第三招:緩存
為什么要加入緩存這個(gè)選項(xiàng)呢?別忘了,除了大量的用戶下單這個(gè)寫操作之外,還有更大量的用戶請(qǐng)求下單結(jié)果這個(gè)讀操作。當(dāng)用戶點(diǎn)擊秒殺按鈕之后,系統(tǒng)會(huì)彈出等待的提示框,很多系統(tǒng)是不停的去輪訓(xùn)用戶的下單結(jié)果,我之前也寫過(guò)緩存的文章,曾經(jīng)提到過(guò)緩存最大的作用是提供讀操作的快速響應(yīng)。其實(shí)很多系統(tǒng)應(yīng)用上消息隊(duì)列 限流之后,針對(duì)秒殺業(yè)務(wù)已經(jīng)足夠了,其余的分庫(kù)分表等方案可以根據(jù)自己的業(yè)務(wù)量來(lái)確定。每個(gè)系統(tǒng)在滿足功能性的需求下,也在滿足非功能性需求的前提下越簡(jiǎn)單越好,不是每個(gè)系統(tǒng)都需要淘寶的架構(gòu)。
消息隊(duì)列RabbitMQ是一款支持持久化消息隊(duì)列的消息中間件。通過(guò)創(chuàng)建集群的方式來(lái)實(shí)現(xiàn)RabbitMQ以及所依賴的服務(wù)的部署,完全兼容RabbitMQ開(kāi)源生態(tài)以及多語(yǔ)言客戶端,為用戶提供快速創(chuàng)建、方便管理的消息中間件。
創(chuàng)新互聯(lián)消息隊(duì)列RabbitMQ支持多種模式,滿足不同使用場(chǎng)景,包括簡(jiǎn)單隊(duì)列模式、work模式、發(fā)布/訂閱模式、路由模式、topic模式等,提供CPU使用率、內(nèi)存使用率、磁盤使用率、文件句柄使用數(shù)、Sockets句柄使用數(shù)等監(jiān)控項(xiàng),支持設(shè)置多項(xiàng)報(bào)警策略,幫助用戶了解實(shí)例動(dòng)態(tài):https://www.cdcxhl.com/
富平ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
名稱欄目:程序員如何應(yīng)對(duì)秒殺場(chǎng)景?
URL網(wǎng)址:
http://weahome.cn/article/ccphh.html