架構(gòu)設(shè)計(jì)之服務(wù)限流

今天先給大家送一波福利离钝,需要的自取
全套高級java架構(gòu)師資料鏈接:https://pan.baidu.com/s/1sJyGASM2U3iZXECdVhpOPw
密碼:dw4u

限流可以認(rèn)為服務(wù)降級的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的。

一般來說系統(tǒng)的吞吐量是可以被測算的,為了保證系統(tǒng)的穩(wěn)定運(yùn)行。

一旦達(dá)到的需要限制的閾值,就需要限制流量并采取一些措施以完成限制流量的目的售葡。

比如:延遲處理,拒絕處理忠藤,或者部分拒絕處理等等挟伙。

服務(wù)限流概念

在介紹限流概念之前,我們先來聊聊身邊有哪些限流模孩。

如果有在帝都的碼農(nóng)估計(jì)對限流是最深有感觸的尖阔,帝都但凡開個(gè)XXX會(huì)議贮缅,各大地鐵站都會(huì)限流。

每年的雙11都是剁手族的天堂介却,11月11號0點(diǎn)0幾秒的時(shí)候携悯,下面這些場景或許你曾經(jīng)遇到過。

當(dāng)然筷笨,這幾年雙11各大電商對并發(fā)的支持做的越來越好,這里只是借鑒雙11剛推出之際龟劲,常常需要應(yīng)對的一些問題胃夏。

通過這兩個(gè)場景,基本上服務(wù)限流的作用也就明白:

「服務(wù)限流」其實(shí)是指當(dāng)系統(tǒng)資源不夠昌跌,不足以應(yīng)對大量請求仰禀。

即系統(tǒng)資源與訪問量出現(xiàn)矛盾的時(shí)候,我們?yōu)榱吮WC有限的資源能夠正常服務(wù)蚕愤,因此對系統(tǒng)按照預(yù)設(shè)的規(guī)則進(jìn)行流量限制或功能限制的一種方法答恶。

為何要服務(wù)限流

再舉一個(gè)我們生活中的例子:一些熱門的旅游景點(diǎn),往往會(huì)對每日的旅游參觀人數(shù)有嚴(yán)格的限制萍诱。

比如北京的故宮悬嗓、歡樂谷等,每天只會(huì)賣出固定數(shù)目的門票裕坊,如果你去的晚了包竹,可能當(dāng)天的票就已經(jīng)賣完了。

當(dāng)天就無法進(jìn)去游玩了籍凝,即使你進(jìn)去了周瞎,排隊(duì)也能排到你懷疑人生。

為什么旅游景點(diǎn)要做這樣的限制呢饵蒂?

多賣一些門票多賺一些錢豈不是更好声诸?

其實(shí)對于旅游景點(diǎn)而言,她們也很無奈退盯。

因?yàn)榫包c(diǎn)的服務(wù)資源有限嘛彼乌,每日能服務(wù)的人數(shù)是有限的。

一旦放開限制了渊迁,景點(diǎn)的工作人員就會(huì)不夠用囤攀,衛(wèi)生情況也得不到保障,安全也有隱患宫纬,超密集的人群也會(huì)嚴(yán)重的影響游客的體驗(yàn)焚挠。

但由于景區(qū)名氣大,來游玩的旅客絡(luò)繹不絕漓骚,遠(yuǎn)超出了景區(qū)的承載能力蝌衔,因此景區(qū)只好做出限制每日人員流量的舉措榛泛。

同理,在IT軟件行業(yè)中噩斟,系統(tǒng)服務(wù)也是這樣的曹锨。

如果你的系統(tǒng)理論是時(shí)間單位內(nèi)可服務(wù)100W用戶。

但是今天卻突然來了300W用戶剃允,由于用戶流量的隨機(jī)性沛简,如果不加以限流,很有可能這300W用戶一下子就壓垮了系統(tǒng)斥废,導(dǎo)致所有人都得不到服務(wù)椒楣。

因此為了保證系統(tǒng)至少還能為100W用戶提供正常服務(wù),我們需要對系統(tǒng)進(jìn)行限流設(shè)計(jì)牡肉。

有的人可能會(huì)想捧灰,既然會(huì)有300W用戶來訪問,那為啥系統(tǒng)不干脆設(shè)計(jì)成能足以支撐這么大量用戶的集群呢统锤?

這是個(gè)好問題毛俏。

如果系統(tǒng)是長期有300W的用戶來訪問,肯定是要做上述升級的饲窿。

但是常常面臨的情況是煌寇,系統(tǒng)的日常訪問量就是100W。

只不過偶爾有一些不可預(yù)知的特定原因?qū)е碌亩虝r(shí)間的流量激增逾雄,這個(gè)時(shí)候唧席,公司往往出于節(jié)約成本的考慮,不會(huì)為了一個(gè)不常見的尖峰來把我們的系統(tǒng)擴(kuò)容到最大的尺寸嘲驾。

如何服務(wù)限流

對系統(tǒng)服務(wù)進(jìn)行限流淌哟,一般有如下幾個(gè)模式:

1. 熔斷:

這個(gè)模式是需要系統(tǒng)在設(shè)計(jì)之初,就要把熔斷措施考慮進(jìn)去辽故。

當(dāng)系統(tǒng)出現(xiàn)問題時(shí)徒仓,如果短時(shí)間內(nèi)無法修復(fù),系統(tǒng)要自動(dòng)做出判斷誊垢,開啟熔斷開關(guān)掉弛,拒絕流量訪問,避免大流量對后端的過載請求喂走。

系統(tǒng)也應(yīng)該能夠動(dòng)態(tài)監(jiān)測后端程序的修復(fù)情況殃饿,當(dāng)程序已恢復(fù)穩(wěn)定時(shí),可以關(guān)閉熔斷開關(guān)芋肠,恢復(fù)正常服務(wù)乎芳。

2. 服務(wù)降級:

將系統(tǒng)的所有功能服務(wù)進(jìn)行一個(gè)分級。

當(dāng)系統(tǒng)出現(xiàn)問題,需要緊急限流時(shí)奈惑,可將不是那么重要的功能進(jìn)行降級處理吭净,停止服務(wù)。

這樣可以釋放出更多的資源供給核心功能的去用肴甸。

例如在電商平臺(tái)中寂殉,如果突發(fā)流量激增,可臨時(shí)將商品評論原在、積分等非核心功能進(jìn)行降級友扰。

停止這些服務(wù),釋放出機(jī)器和CPU等資源來保障用戶正常下單庶柿,而這些降級的功能服務(wù)可以等整個(gè)系統(tǒng)恢復(fù)正常后村怪,再來啟動(dòng),進(jìn)行補(bǔ)單/補(bǔ)償處理澳泵。

除了功能降級以外,還可以采用不直接操作數(shù)據(jù)庫兼呵,而全部讀緩存兔辅、寫緩存的方式作為臨時(shí)降級方案。

3. 延遲處理:

這個(gè)模式需要在系統(tǒng)的前端設(shè)置一個(gè)流量緩沖池击喂。

將所有的請求全部緩沖進(jìn)這個(gè)池子维苔,不立即處理。

然后后端真正的業(yè)務(wù)處理程序從這個(gè)池子中取出請求依次處理懂昂,常見的可以用隊(duì)列模式來實(shí)現(xiàn)介时。

這就相當(dāng)于用異步的方式去減少了后端的處理壓力,但是當(dāng)流量較大時(shí)凌彬,后端的處理能力有限沸柔,緩沖池里的請求可能處理不及時(shí),會(huì)有一定程度延遲铲敛。

4. 特權(quán)處理:

這個(gè)模式需要將用戶進(jìn)行分類褐澎。

通過預(yù)設(shè)的分類,讓系統(tǒng)優(yōu)先處理需要高保障的用戶群體伐蒋,其它用戶群的請求就會(huì)延遲處理或者直接不處理工三。

那在實(shí)際項(xiàng)目中,對訪問流量的限制先鱼,可采用如下幾種技術(shù)方法:

? 熔斷技術(shù)

熔斷的技術(shù)可以重點(diǎn)參考Netflix的開源組件hystrix的做法俭正,主要有三個(gè)模塊:熔斷請求判斷算法、熔斷恢復(fù)機(jī)制焙畔、熔斷報(bào)警掸读。

? 計(jì)數(shù)器方法

系統(tǒng)維護(hù)一個(gè)計(jì)數(shù)器,來一個(gè)請求就加1,請求處理完成就減1寺枉。

當(dāng)計(jì)數(shù)器大于指定的閾值抑淫,就拒絕新的請求。

基于這個(gè)簡單的方法姥闪,可以再延伸出一些高級功能始苇。

比如閾值可以不是固定值,是動(dòng)態(tài)調(diào)整的筐喳。

另外催式,還可以有多組計(jì)數(shù)器分別管理不同的服務(wù),以保證互不影響等避归。

? 隊(duì)列方法

就是基于FIFO隊(duì)列荣月,所有請求都進(jìn)入隊(duì)列,后端程序從隊(duì)列中取出待處理的請求依次處理梳毙。

基于隊(duì)列的方法哺窄,也可以延伸出更多的玩法來,比如可以設(shè)置多個(gè)隊(duì)列以配置不同的優(yōu)先級账锹。

? 令牌桶方法

首先還是要基于一個(gè)隊(duì)列萌业,請求放到隊(duì)列里面。

但除了隊(duì)列以外奸柬,還要設(shè)置一個(gè)令牌桶生年,另外有一個(gè)腳本以持續(xù)恒定的速度往令牌桶里面放令牌。

后端處理程序每處理一個(gè)請求就必須從桶里拿出一個(gè)令牌廓奕,如果令牌拿完了抱婉,那就不能處理請求了。

我們可以控制腳本放令牌的速度來達(dá)到控制后端處理的速度桌粉,以實(shí)現(xiàn)動(dòng)態(tài)流控蒸绩。

注意事項(xiàng)

我們在做服務(wù)限流的時(shí)候,還是有一些原則和事項(xiàng)需要注意的:

  • 實(shí)時(shí)監(jiān)控:系統(tǒng)必須要做好全鏈路的實(shí)時(shí)監(jiān)控铃肯,才能保證限流的及時(shí)檢測和處理侵贵。

  • 手動(dòng)開關(guān):除系統(tǒng)自動(dòng)限流以外,還需要有能手動(dòng)控制的開關(guān)缘薛,以保證隨時(shí)都可以人工介入窍育。

  • 限流的性能:限流的功能理論上是會(huì)在一定程度影響到業(yè)務(wù)正常性能的,因此需要做到限流的性能優(yōu)化和控制宴胧。

總結(jié)

系統(tǒng)故障常常都是不可預(yù)測且難以避免的漱抓,因此作為系統(tǒng)設(shè)計(jì)師的我們,必須要提前預(yù)設(shè)各種措施恕齐,以應(yīng)對隨時(shí)可能的系統(tǒng)風(fēng)險(xiǎn)乞娄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仪或,更是在濱河造成了極大的恐慌确镊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件范删,死亡現(xiàn)場離奇詭異蕾域,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)到旦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門旨巷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人添忘,你說我怎么就攤上這事采呐。” “怎么了搁骑?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵斧吐,是天一觀的道長。 經(jīng)常有香客問我仲器,道長煤率,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任娄周,我火速辦了婚禮涕侈,結(jié)果婚禮上沪停,老公的妹妹穿的比我還像新娘煤辨。我一直安慰自己,他們只是感情好木张,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布众辨。 她就那樣靜靜地躺著,像睡著了一般舷礼。 火紅的嫁衣襯著肌膚如雪鹃彻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天妻献,我揣著相機(jī)與錄音蛛株,去河邊找鬼。 笑死育拨,一個(gè)胖子當(dāng)著我的面吹牛谨履,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熬丧,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笋粟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起害捕,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绿淋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尝盼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞滞,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年东涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冯吓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疮跑,死狀恐怖组贺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祖娘,我是刑警寧澤失尖,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站渐苏,受9級特大地震影響掀潮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琼富,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一仪吧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞠眉,春花似錦薯鼠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哗戈,卻和暖如春郊艘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唯咬。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工纱注, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆胰。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓狞贱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煮剧。 傳聞我的和親對象是個(gè)殘疾皇子斥滤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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