預(yù)先處理暴增的流量

如果流量突然飆大征懈,總有一個(gè)資源會(huì)遇到瓶頸颜屠。按照經(jīng)驗(yàn)大概出問題地方是DB,磁盤io猾浦、CPU炼邀、帶寬魄揉、連接數(shù)、內(nèi)存其中的一個(gè)或幾個(gè)拭宁。不同的業(yè)務(wù)洛退,不同的系統(tǒng)設(shè)計(jì),出問題的地方會(huì)有所不同杰标。如果流量增大數(shù)倍兵怯,勢(shì)必某個(gè)資源會(huì)在瞬間被榨干,然后所有的服務(wù)都會(huì)“開小差”腔剂,引起用戶的抱怨媒区。而解決問題的關(guān)鍵,是在問題發(fā)生時(shí),盡量減少出問題的資源被訪問袜漩。

1绪爸、流量暴漲的原因

一般情況下,引起網(wǎng)站流量暴增大致為以下兩種情況
  1宙攻、不可預(yù)測(cè)流量(網(wǎng)站被惡意刷量奠货;CDN回源抓取數(shù)據(jù);合作業(yè)務(wù)平臺(tái)調(diào)取平臺(tái)數(shù)據(jù)等)
  2座掘、可預(yù)測(cè)流量(突然爆發(fā)的社會(huì)熱點(diǎn)递惋,營銷活動(dòng)的宣傳;)

 不管是可預(yù)測(cè)流量還是不可預(yù)測(cè)流量都會(huì)表現(xiàn)在帶寬和網(wǎng)站整體架構(gòu)的應(yīng)對(duì)方案上

 如果由于帶寬原因引起溢陪,由于網(wǎng)站的并發(fā)量太高萍虽,達(dá)到服務(wù)器的吞吐極限,導(dǎo)致服務(wù)器宕機(jī)形真,這時(shí)需要做臨時(shí)申請(qǐng)加大帶寬杉编,然后負(fù)載均衡分流。
 如果由于外網(wǎng)請(qǐng)求數(shù)據(jù)庫没酣,導(dǎo)致數(shù)據(jù)庫頻繁讀寫王财,數(shù)據(jù)庫處理能力低,導(dǎo)致大量請(qǐng)求積壓裕便;如果是這種情況,就需要優(yōu)化SQL见咒,存儲(chǔ)過程等偿衰,如果是請(qǐng)求過大,就要考慮做集群等改览。
可預(yù)測(cè)流量的暴增也會(huì)拖慢網(wǎng)頁的打開速度下翎,甚至導(dǎo)致網(wǎng)站服務(wù)器宕機(jī)。要應(yīng)對(duì)正常流量暴增宝当,在流量高峰期到來之前就可以適當(dāng)?shù)恼{(diào)整视事,一般針對(duì)應(yīng)用服務(wù)器的調(diào)整可以防止單點(diǎn),負(fù)載均衡庆揩,高可用俐东,增加后端web應(yīng)用服務(wù)器數(shù)量,數(shù)據(jù)庫讀寫分離订晌,拆庫拆表等虏辫,防止流量暴增導(dǎo)致服務(wù)器掛掉,下面具體說明:

2锈拨、防止流量暴漲預(yù)備方案

凡事預(yù)則立不預(yù)則廢砌庄,做任何事情,都要未雨綢繆,如果等到大軍打到家門口娄昆,再迎戰(zhàn)就只能被人宰割了佩微。

2.1、流量估算

作為一個(gè)經(jīng)驗(yàn)充足的老運(yùn)維萌焰,可以把設(shè)計(jì)流量*3作為系統(tǒng)壓力的下限喊衫,即實(shí)現(xiàn)完了要壓測(cè),壓測(cè)得到的結(jié)果要達(dá)到設(shè)計(jì)流量 * 3( * 4杆怕, * 5都可以)族购,比如服務(wù)器在IDC機(jī)房,在簽合同之前就可以說明當(dāng)流量異常的時(shí)候陵珍,提供一定的緩沖帶寬寝杖,如果是云服務(wù)器,可以臨時(shí)加帶寬互纯。

關(guān)鍵是要給系統(tǒng)留些緩沖瑟幕。一旦發(fā)生了什么,不至于掛的太慘留潦。此時(shí)只盹,一般會(huì)得到一個(gè)帶緩存的業(yè)務(wù)服務(wù)系統(tǒng)⊥迷海考慮到緩存高于后臺(tái)服務(wù)2~3個(gè)數(shù)量級(jí)的性能優(yōu)勢(shì)殖卑,多撐幾倍流量一般不成問題。

2.2坊萝、降級(jí)方案

降級(jí)總得是用戶可以買賬的方式才行孵稽,不能瞎降。能降級(jí)成什么樣十偶,顯示成什么樣子菩鲜,都得預(yù)先設(shè)計(jì)好。UI上有的要配圖惦积,有的要出警告語提示接校。而作為后臺(tái)服務(wù)器,需要有對(duì)應(yīng)的實(shí)時(shí)開關(guān)狮崩,一旦設(shè)置蛛勉,立刻進(jìn)入降級(jí)方案。

但是厉亏,如果核心服務(wù)就是熱點(diǎn)本身董习,就沒得降級(jí),比如爱只,電商的雙十一皿淋,用戶的購買招刹,下單等行為,下單就是下單窝趣,不能下一半疯暑,不能砍掉支付,不能隨機(jī)性有的能買有的不能買哑舒,是涉及到大量寫操作妇拯,而且是核心鏈路,無法降級(jí)的洗鸵,這個(gè)時(shí)候越锈,限流就比較重要了。

2.2膘滨、限流方案

限流的常用方式

限流的常用處理手段有:計(jì)數(shù)器甘凭、滑動(dòng)窗口、漏桶火邓、令牌丹弱。

計(jì)數(shù)器

image.png
計(jì)數(shù)器是一種比較簡單的限流算法,用途比較廣泛铲咨,在接口層面躲胳,很多地方使用這種方式限流。在一段時(shí)間內(nèi)纤勒,進(jìn)行計(jì)數(shù)坯苹,與閥值進(jìn)行比較,到了時(shí)間臨界點(diǎn)踊东,將計(jì)數(shù)器清0北滥。

局限性:

這里需要注意的是,存在一個(gè)時(shí)間臨界點(diǎn)的問題闸翅。舉個(gè)栗子,在12:01:00到12:01:58這段時(shí)間內(nèi)沒有用戶請(qǐng)求菊霜,然后在12:01:59這一瞬時(shí)發(fā)出100個(gè)請(qǐng)求坚冀,OK,然后在12:02:00這一瞬時(shí)又發(fā)出了100個(gè)請(qǐng)求鉴逞。這里你應(yīng)該能感受到记某,在這個(gè)臨界點(diǎn)可能會(huì)承受惡意用戶的大量請(qǐng)求,甚至超出系統(tǒng)預(yù)期的承受构捡。

滑動(dòng)窗口

由于計(jì)數(shù)器存在臨界點(diǎn)缺陷液南,后來出現(xiàn)了滑動(dòng)窗口算法來解決。

image.png

局限性:

滑動(dòng)窗口的意思是說把固定時(shí)間片勾徽,進(jìn)行劃分滑凉,并且隨著時(shí)間的流逝,進(jìn)行移動(dòng),這樣就巧妙的避開了計(jì)數(shù)器的臨界點(diǎn)問題畅姊。也就是說這些固定數(shù)量的可以移動(dòng)的格子咒钟,
將會(huì)進(jìn)行計(jì)數(shù)判斷閥值,因此格子的數(shù)量影響著滑動(dòng)窗口算法的精度若未。

漏桶

雖然滑動(dòng)窗口有效避免了時(shí)間臨界點(diǎn)的問題朱嘴,但是依然有時(shí)間片的概念,而漏桶算法在這方面比滑動(dòng)窗口而言粗合,更加先進(jìn)萍嬉。

有一個(gè)固定的桶,進(jìn)水的速率是不確定的隙疚,但是出水的速率是恒定的壤追,當(dāng)水滿的時(shí)候是會(huì)溢出的。
image.png

令牌桶

注意到甚淡,漏桶的出水速度是恒定的大诸,那么意味著如果瞬時(shí)大流量的話,將有大部分請(qǐng)求被丟棄掉(也就是所謂的溢出)贯卦。為了解決這個(gè)問題资柔,令牌桶進(jìn)行了算法改進(jìn)。
image.png

局限性:

生成令牌的速度是恒定的撵割,而請(qǐng)求去拿令牌是沒有速度限制的贿堰。這意味,面對(duì)瞬時(shí)大流量啡彬,該算法可以在短時(shí)間內(nèi)請(qǐng)求拿到大量令牌羹与,而且拿令牌的過程并不是消耗很大的事情。(有一點(diǎn)生產(chǎn)令牌庶灿,消費(fèi)令牌的意味)

不論是對(duì)于令牌桶拿不到令牌被拒絕纵搁,還是漏桶的水滿了溢出,都是為了保證大部分流量的正常使用往踢,而犧牲掉了少部分流量腾誉,這是合理的,如果因?yàn)闃O少部分流量需要保證的話峻呕,那么就可能導(dǎo)致系統(tǒng)達(dá)到極限而掛掉利职,得不償失。

限流神器:Guava RateLimiter

Guava不僅僅在集合瘦癌、緩存猪贪、異步回調(diào)等方面功能強(qiáng)大,而且還給我們封裝好了限流的API讯私!
Guava RateLimiter基于令牌桶算法热押,我們只需要告訴RateLimiter系統(tǒng)限制的QPS是多少西傀,那么RateLimiter將以這個(gè)速度往桶里面放入令牌,然后請(qǐng)求的時(shí)候楞黄,通過tryAcquire()方法向RateLimiter獲取許可(令牌)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末池凄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鬼廓,更是在濱河造成了極大的恐慌肿仑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎税,死亡現(xiàn)場(chǎng)離奇詭異尤慰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)雷蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伟端,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匪煌,你說我怎么就攤上這事责蝠。” “怎么了萎庭?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵霜医,是天一觀的道長。 經(jīng)常有香客問我驳规,道長肴敛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任吗购,我火速辦了婚禮医男,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捻勉。我一直安慰自己镀梭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布踱启。 她就那樣靜靜地躺著丰辣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禽捆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天飘哨,我揣著相機(jī)與錄音胚想,去河邊找鬼。 笑死芽隆,一個(gè)胖子當(dāng)著我的面吹牛浊服,可吹牛的內(nèi)容都是我干的统屈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牙躺,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼愁憔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孽拷,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤吨掌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脓恕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膜宋,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年炼幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秋茫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乃秀,死狀恐怖肛著,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跺讯,我是刑警寧澤枢贿,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站抬吟,受9級(jí)特大地震影響萨咕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜火本,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一危队、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钙畔,春花似錦茫陆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揍魂,卻和暖如春桨醋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背现斋。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工喜最, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庄蹋。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓瞬内,卻偏偏與公主長得像迷雪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虫蝶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容