高并發(fā)之限流算法及實現(xiàn)

本文參考資料

高并發(fā)系統(tǒng)之限流特技:http://blog.csdn.net/g_hongjin/article/details/51649246

RateLimit--使用guava來做接口限流:http://blog.csdn.net/jiesa/article/details/50412027

秒殺:http://www.infoq.com/cn/articles/solution-to-the-architecture-of-spike-system

背景

2月22日10點負(fù)責(zé)的一個項目異常增多卦尊,服務(wù)幾近不可用,并引發(fā)雪崩熬的,造成其他項目也不可用回右。對日志進(jìn)行分析后發(fā)現(xiàn)燥翅,服務(wù)調(diào)用量激增了10倍,最后經(jīng)過擴(kuò)容解決了問題,影響時間將近20分鐘祈争。事故原因:上游系統(tǒng)一個服務(wù)站點出現(xiàn)故障站超,導(dǎo)致大量請求過來荸恕,隨后出現(xiàn)線程連接數(shù)爆滿且出現(xiàn)很多請求超時,當(dāng)調(diào)用方發(fā)現(xiàn)超時會不停的重試3次死相,這時候請求數(shù)瞬時成倍增長融求。

求索

流量激增,猶如暴雨導(dǎo)致河流流量增多算撮,可能會超過大壩的防洪庫容生宛,需要泄洪保護(hù)大壩不被沖毀;也猶如家里的保險控制肮柜,一旦使用大功率的電器陷舅,保險有可能跳閘,保護(hù)電路不被燒毀素挽。我們系統(tǒng)中如果有保險控制或防洪大壩蔑赘,非預(yù)期的請求過大也不致于引起的系統(tǒng)癱瘓,系統(tǒng)可以拒絕或者或者引流预明,這就是所謂的限流缩赛。

常用限流算法

常用算法有漏桶算法和令牌桶算法

令牌桶算法:

令牌桶算法是一個存放固定容量令牌的桶,按照固定速率往桶里添加令牌撰糠。

a. 按特定的速率向令牌桶投放令牌

b.桶中最多存放b個令牌酥馍,當(dāng)桶滿時,新添加的令牌被丟棄或拒絕阅酪;

c.當(dāng)1請求到達(dá)旨袒,將從桶中刪除1個令牌汁针,接著處理請求;

d.如果桶中的令牌不足砚尽,則不會刪除令牌施无,且該請求將被限流(要么丟棄,要么緩沖區(qū)等待)

漏桶算法:

漏桶算法的描述如下:

1.一個固定容量的漏桶必孤,按照常量固定速率流出水滴猾骡;、

2.如果桶是空的敷搪,則不需流出水滴兴想;

3.可以以任意速率流入水滴到漏桶;

4.如果流入水滴超出了桶的容量赡勘,則流入的水滴溢出了(被丟棄)嫂便,而漏桶容量是不變的。

實踐

應(yīng)用級限流:nignx中l(wèi)imit_conn模塊闸与,

Tomcat的Connector幾種參數(shù):

acceptCount:如果Tomcat的線程都忙于響應(yīng)毙替,新來的連接會進(jìn)入隊列排隊,如果超出排隊大小几迄,則拒絕連接蔚龙;

maxConnections:瞬時最大連接數(shù),超出的會排隊等待映胁;

maxThreads:Tomcat能啟動用來處理請求的最大線程數(shù)木羹,如果請求處理量一直遠(yuǎn)遠(yuǎn)大于最大線程數(shù)則可能會僵死。

編程級別:

限流某個接口的總并發(fā)/請求數(shù)

=================================

try {

if(atomic.incrementAndGet() > 限流數(shù)) {

//拒絕請求

}

//處理請求

} finally {

atomic.decrementAndGet();

}

=================================

2.限流某個接口的時間窗請求數(shù)

=================================

LoadingCache counter =??????? CacheBuilder.newBuilder()??????????????? .expireAfterWrite(2, TimeUnit.SECONDS)??????????????? .build(newCacheLoader() {??????????????????? @OverridepublicAtomicLong load(Long seconds)throwsException {return newAtomicLong(0);?????????????? ?????}??????????????? });longlimit = 1000;while(true) {//得到當(dāng)前秒longcurrentSeconds = System.currentTimeMillis() / 1000;if(counter.get(currentSeconds).incrementAndGet() > limit) {??????? System.out.println("限流了:"+ currentSeconds);continue;??? }//業(yè)務(wù)處理}

3. 平滑限流某個接口的請求數(shù)(令牌桶和漏桶實踐)

RateLimiter使用實踐

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末解孙,一起剝皮案震驚了整個濱河市坑填,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弛姜,老刑警劉巖脐瑰,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異廷臼,居然都是意外死亡苍在,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門荠商,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寂恬,“玉大人,你說我怎么就攤上這事莱没〕跞猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵饰躲,是天一觀的道長牙咏。 經(jīng)常有香客問我臼隔,道長,這世上最難降的妖魔是什么妄壶? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任摔握,我火速辦了婚禮,結(jié)果婚禮上盯拱,老公的妹妹穿的比我還像新娘盒发。我一直安慰自己,他們只是感情好狡逢,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拼卵,像睡著了一般奢浑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腋腮,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天雀彼,我揣著相機(jī)與錄音,去河邊找鬼即寡。 笑死徊哑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聪富。 我是一名探鬼主播莺丑,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墩蔓!你這毒婦竟也來了梢莽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤奸披,失蹤者是張志新(化名)和其女友劉穎昏名,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阵面,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轻局,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了样刷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片争拐。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖穷缤,靈堂內(nèi)的尸體忽然破棺而出丹壕,到底是詐尸還是另有隱情,我是刑警寧澤沃疮,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布盒让,位于F島的核電站梅肤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏邑茄。R本人自食惡果不足惜姨蝴,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肺缕。 院中可真熱鬧左医,春花似錦、人聲如沸同木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彤路。三九已至秕硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洲尊,已是汗流浹背远豺。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留坞嘀,地道東北人躯护。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像丽涩,于是被迫代替她去往敵國和親棺滞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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