對(duì)高并發(fā)流量控制的一點(diǎn)思考

前言

在實(shí)際項(xiàng)目中,曾經(jīng)遭遇過(guò)線上5W+QPS的峰值盔腔,也在壓測(cè)狀態(tài)下經(jīng)歷過(guò)10W+QPS的大流量請(qǐng)求,本篇博客的話題主要就是自己對(duì)高并發(fā)流量控制的一點(diǎn)思考月褥。


應(yīng)對(duì)大流量的一些思路

首先弛随,我們來(lái)說(shuō)一下什么是大流量?

大流量宁赤,我們很可能會(huì)冒出:TPS(每秒事務(wù)量)舀透,QPS(每秒請(qǐng)求量),1W+决左,5W+愕够,10W+,100W+...佛猛。其實(shí)并沒(méi)有一個(gè)絕對(duì)的數(shù)字惑芭,如果這個(gè)量造成了系統(tǒng)的壓力,影響了系統(tǒng)的性能继找,那么這個(gè)量就可以稱之為大流量了遂跟。

其次,應(yīng)對(duì)大流量的一些常見(jiàn)手段是什么婴渡?

緩存:說(shuō)白了幻锁,就是讓數(shù)據(jù)盡早進(jìn)入緩存,離程序近一點(diǎn)边臼,不要大量頻繁的訪問(wèn)DB哄尔。

降級(jí):如果不是核心鏈路,那么就把這個(gè)服務(wù)降級(jí)掉柠并。打個(gè)比喻岭接,現(xiàn)在的APP都講究千人千面富拗,拿到數(shù)據(jù)后,做個(gè)性化排序展示鸣戴,如果在大流量下啃沪,這個(gè)排序就可以降級(jí)掉!

限流:大家都知道葵擎,北京地鐵早高峰,地鐵站都會(huì)做一件事情半哟,就是限流了酬滤!想法很直接,就是想在一定時(shí)間內(nèi)把請(qǐng)求限制在一定范圍內(nèi)寓涨,保證系統(tǒng)不被沖垮盯串,同時(shí)盡可能提升系統(tǒng)的吞吐量。

注意到戒良,有些時(shí)候体捏,緩存和降級(jí)是解決不了問(wèn)題的,比如糯崎,電商的雙十一几缭,用戶的購(gòu)買(mǎi),下單等行為沃呢,是涉及到大量寫(xiě)操作年栓,而且是核心鏈路,無(wú)法降級(jí)的薄霜,這個(gè)時(shí)候某抓,限流就比較重要了。

那么接下來(lái)惰瓜,我們重點(diǎn)說(shuō)一下否副,限流。


限流的常用方式

限流的常用處理手段有:計(jì)數(shù)器崎坊、滑動(dòng)窗口备禀、漏桶、令牌奈揍。

計(jì)數(shù)器

計(jì)數(shù)器是一種比較簡(jiǎn)單的限流算法痹届,用途比較廣泛,在接口層面打月,很多地方使用這種方式限流队腐。在一段時(shí)間內(nèi),進(jìn)行計(jì)數(shù)奏篙,與閥值進(jìn)行比較柴淘,到了時(shí)間臨界點(diǎn)迫淹,將計(jì)數(shù)器清0。

計(jì)數(shù)器思想

代碼實(shí)例

計(jì)數(shù)器代碼實(shí)現(xiàn)

這里需要注意的是为严,存在一個(gè)時(shí)間臨界點(diǎn)的問(wèn)題敛熬。舉個(gè)栗子,在12:01:00到12:01:58這段時(shí)間內(nèi)沒(mé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)缺陷归园,后來(lái)出現(xiàn)了滑動(dòng)窗口算法來(lái)解決。


滑動(dòng)窗口原理圖

滑動(dòng)窗口的意思是說(shuō)把固定時(shí)間片稚矿,進(jìn)行劃分庸诱,并且隨著時(shí)間的流逝,進(jìn)行移動(dòng)晤揣,這樣就巧妙的避開(kāi)了計(jì)數(shù)器的臨界點(diǎn)問(wèn)題桥爽。也就是說(shuō)這些固定數(shù)量的可以移動(dòng)的格子,將會(huì)進(jìn)行計(jì)數(shù)判斷閥值昧识,因此格子的數(shù)量影響著滑動(dòng)窗口算法的精度聚谁。

漏桶

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

有一個(gè)固定的桶习霹,進(jìn)水的速率是不確定的朵耕,但是出水的速率是恒定的,當(dāng)水滿的時(shí)候是會(huì)溢出的淋叶。


漏桶算法思想

代碼實(shí)現(xiàn)

漏桶代碼實(shí)現(xiàn)

令牌桶

注意到阎曹,漏桶的出水速度是恒定的,那么意味著如果瞬時(shí)大流量的話煞檩,將有大部分請(qǐng)求被丟棄掉(也就是所謂的溢出)处嫌。為了解決這個(gè)問(wèn)題,令牌桶進(jìn)行了算法改進(jìn)斟湃。

令牌桶原理

生成令牌的速度是恒定的熏迹,而請(qǐng)求去拿令牌是沒(méi)有速度限制的。這意味凝赛,面對(duì)瞬時(shí)大流量注暗,該算法可以在短時(shí)間內(nèi)請(qǐng)求拿到大量令牌坛缕,而且拿令牌的過(guò)程并不是消耗很大的事情。(有一點(diǎn)生產(chǎn)令牌捆昏,消費(fèi)令牌的意味)

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

代碼實(shí)現(xiàn)

令牌桶代碼實(shí)現(xiàn)


限流神器:Guava RateLimiter

Guava不僅僅在集合焚刺、緩存敛摘、異步回調(diào)等方面功能強(qiáng)大(可以參考博主的《使用Google Guava快樂(lè)編程》)门烂,而且還給我們封裝好了限流的API乳愉!

Guava RateLimiter基于令牌桶算法,我們只需要告訴RateLimiter系統(tǒng)限制的QPS是多少屯远,那么RateLimiter將以這個(gè)速度往桶里面放入令牌蔓姚,然后請(qǐng)求的時(shí)候,通過(guò)tryAcquire()方法向RateLimiter獲取許可(令牌)慨丐。

代碼示例

RateLimiter


分布式場(chǎng)景下的限流

上面所說(shuō)的限流的一些方式坡脐,都是針對(duì)單機(jī)而言的,其實(shí)大部分的場(chǎng)景房揭,單機(jī)的限流已經(jīng)足夠了备闲。分布式下限流的手段常常需要多種技術(shù)相結(jié)合,比如Nginx+Lua捅暴,Redis+Lua等去做恬砂。本文主要討論的是單機(jī)的限流,這里就不在詳細(xì)介紹分布式場(chǎng)景下的限流了蓬痒。

一句話泻骤,讓系統(tǒng)的流量,先到隊(duì)列中排隊(duì)梧奢、限流狱掂,不要讓流量直接打到系統(tǒng)上。


好了亲轨,到這里趋惨,本文就結(jié)束了!

早安惦蚊!

美好的一天開(kāi)始了希柿,上班咯诊沪!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曾撤,隨后出現(xiàn)的幾起案子端姚,更是在濱河造成了極大的恐慌,老刑警劉巖挤悉,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐裸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡装悲,警方通過(guò)查閱死者的電腦和手機(jī)昏鹃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诀诊,“玉大人洞渤,你說(shuō)我怎么就攤上這事∈舭辏” “怎么了载迄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)抡蛙。 經(jīng)常有香客問(wèn)我护昧,道長(zhǎng),這世上最難降的妖魔是什么粗截? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任惋耙,我火速辦了婚禮,結(jié)果婚禮上熊昌,老公的妹妹穿的比我還像新娘绽榛。我一直安慰自己,他們只是感情好婿屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布灭美。 她就那樣靜靜地躺著,像睡著了一般选泻。 火紅的嫁衣襯著肌膚如雪冲粤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天页眯,我揣著相機(jī)與錄音梯捕,去河邊找鬼。 笑死窝撵,一個(gè)胖子當(dāng)著我的面吹牛傀顾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碌奉,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼短曾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寒砖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嫉拐,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哩都,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后婉徘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體漠嵌,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年盖呼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儒鹿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡几晤,死狀恐怖约炎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蟹瘾,我是刑警寧澤圾浅,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站热芹,受9級(jí)特大地震影響贱傀,放射性物質(zhì)發(fā)生泄漏惨撇。R本人自食惡果不足惜伊脓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魁衙。 院中可真熱鬧报腔,春花似錦、人聲如沸剖淀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纵隔。三九已至翻诉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捌刮,已是汗流浹背碰煌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绅作,地道東北人芦圾。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像俄认,于是被迫代替她去往敵國(guó)和親个少。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洪乍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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

  • 最近一直都在研究壓力測(cè)試客戶端的問(wèn)題,如果突破客戶端壓力測(cè)試線程夜焦,端口等問(wèn)題壳澳,如果服務(wù)器端處理網(wǎng)絡(luò)請(qǐng)求處理不過(guò)來(lái),...
    望月成三人閱讀 8,642評(píng)論 1 25
  • 聊聊高并發(fā)系統(tǒng)限流特技-1來(lái)自開(kāi)濤的博客 在開(kāi)發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來(lái)保護(hù)系統(tǒng):緩存茫经、降級(jí)和限流钾埂。緩存的目的是...
    meng_philip123閱讀 6,634評(píng)論 1 20
  • 摘要:在開(kāi)發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來(lái)保護(hù)系統(tǒng):緩存、降級(jí)和限流科平。而有些場(chǎng)景并不能用緩存和降級(jí)來(lái)解決褥紫,因此需有一種...
    落羽成霜丶閱讀 2,151評(píng)論 0 18
  • 曾經(jīng)在一個(gè)大神的blog里看到這樣一句話:在開(kāi)發(fā)高并發(fā)系統(tǒng)時(shí),有三把利器用來(lái)保護(hù)系統(tǒng):緩存瞪慧、降級(jí)和限流髓考。那么何為限...
    Johnsonxu閱讀 1,983評(píng)論 0 4
  • 這個(gè)年終總結(jié)是有些晚了,2016對(duì)我來(lái)說(shuō)弃酌,是特殊的一年氨菇,不是2015也不是2014。2016的上半年妓湘,我經(jīng)歷了可以...
    愛(ài)丟丟的草莓閱讀 190評(píng)論 2 1