架構(gòu)設(shè)計(jì)之“服務(wù)限流”-創(chuàng)新互聯(lián)

上一篇我們聊過了架構(gòu)設(shè)計(jì)中的「服務(wù)隔離」模式,今天我們繼續(xù)來探索一下在分布式系統(tǒng)架構(gòu)中的另一個常用的設(shè)計(jì):服務(wù)限流。

成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元許昌做網(wǎng)站,已為上家服務(wù),為許昌各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

那么,什么是「服務(wù)限流」呢?在解釋「服務(wù)限流」之前,我們來看一下前些時間網(wǎng)上很火的一個段子,說的是新浪微博的一名工程師正在家里辦婚禮,突然接到公司的電話要緊急處理線上流量激增的問題,那天應(yīng)該是某當(dāng)紅明星突然在微博上公布戀情,微博流量突增好幾倍,導(dǎo)致系統(tǒng)功能出現(xiàn)不穩(wěn)定,用戶訪問不暢。然后這名工程師就只好晾開新娘,在婚禮現(xiàn)場穿著西裝打開筆記本調(diào)試代碼了。

當(dāng)時這名工程師內(nèi)心肯定是崩潰的,肯定在想:為啥要在今天公布戀情!等我把系統(tǒng)的擴(kuò)容和服務(wù)限流機(jī)制做好先啊。

哈哈,看完了段子,基本上服務(wù)限流的作用也就明白:「服務(wù)限流」其實(shí)是指當(dāng)系統(tǒng)資源不夠,不足以應(yīng)對大量請求,即系統(tǒng)資源與訪問量出現(xiàn)矛盾的時候,我們?yōu)榱吮WC有限的資源能夠正常服務(wù),因此對系統(tǒng)按照預(yù)設(shè)的規(guī)則進(jìn)行流量限制或功能限制的一種方法。

一、為什么要做服務(wù)限流設(shè)計(jì)?

再舉一個我們生活中的例子:一些熱門的旅游景點(diǎn),往往會對每日的旅游參觀人數(shù)有嚴(yán)格的限制,比如廈門的鼓浪嶼、北京的故宮等,每天只會賣出固定數(shù)目的門票,如果你去的晚了,可能當(dāng)天的票就已經(jīng)賣完了,當(dāng)天就無法進(jìn)去游玩了。

為什么旅游景點(diǎn)要做這樣的限制呢?多賣一些門票多賺一些錢豈不是更好?

其實(shí)對于旅游景點(diǎn)而言,她們也很無奈,因?yàn)榫包c(diǎn)的服務(wù)資源有限嘛,每日能服務(wù)的人數(shù)是有限的,一旦放開限制了,景點(diǎn)的工作人員就會不夠用,衛(wèi)生情況也得不到保障,安全也有隱患,超密集的人群也會嚴(yán)重的影響游客的體驗(yàn)。但由于景區(qū)名氣大,來游玩的旅客絡(luò)繹不絕,遠(yuǎn)超出了景區(qū)的承載能力,因此景區(qū)只好做出限制每日人員流量的舉措。

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

如果你的系統(tǒng)理論是時間單位內(nèi)可服務(wù)100W用戶,但是今天卻突然來了300W用戶,由于用戶流量的隨機(jī)性,如果不加以限流,很有可能這300W用戶一下子就壓垮了系統(tǒng),導(dǎo)致所有人都得不到服務(wù)。

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

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

這是個好問題。如果系統(tǒng)是長期有300W的用戶來訪問,肯定是要做上述升級的,但是常常面臨的情況是,系統(tǒng)的日常訪問量就是100W,只不過偶爾有一些不可預(yù)知的特定原因?qū)е碌亩虝r間的流量激增,這個時候,公司往往出于節(jié)約成本的考慮,不會為了一個不常見的尖峰來把我們的系統(tǒng)擴(kuò)容到大的尺寸。

二、服務(wù)限流應(yīng)該怎么做?

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

熔斷:這個模式是需要系統(tǒng)在設(shè)計(jì)之初,就要把熔斷措施考慮進(jìn)去。當(dāng)系統(tǒng)出現(xiàn)問題時,如果短時間內(nèi)無法修復(fù),系統(tǒng)要自動做出判斷,開啟熔斷開關(guān),拒絕流量訪問,避免大流量對后端的過載請求。系統(tǒng)也應(yīng)該能夠動態(tài)監(jiān)測后端程序的修復(fù)情況,當(dāng)程序已恢復(fù)穩(wěn)定時,可以關(guān)閉熔斷開關(guān),恢復(fù)正常服務(wù)。

服務(wù)降級:將系統(tǒng)的所有功能服務(wù)進(jìn)行一個分級,當(dāng)系統(tǒng)出現(xiàn)問題,需要緊急限流時,可將不是那么重要的功能進(jìn)行降級處理,停止服務(wù),這樣可以釋放出更多的資源供給核心功能的去用。例如在電商平臺中,如果突發(fā)流量激增,可臨時將商品評論、積分等非核心功能進(jìn)行降級,停止這些服務(wù),釋放出機(jī)器和CPU等資源來保障用戶正常下單,而這些降級的功能服務(wù)可以等整個系統(tǒng)恢復(fù)正常后,再來啟動,進(jìn)行補(bǔ)單/補(bǔ)償處理。除了功能降級以外,還可以采用不直接操作數(shù)據(jù)庫,而全部讀緩存、寫緩存的方式作為臨時降級方案。

延遲處理:這個模式需要在系統(tǒng)的前端設(shè)置一個流量緩沖池,將所有的請求全部緩沖進(jìn)這個池子,不立即處理。然后后端真正的業(yè)務(wù)處理程序從這個池子中取出請求依次處理,常見的可以用隊(duì)列模式來實(shí)現(xiàn)。這就相當(dāng)于用異步的方式去減少了后端的處理壓力,但是當(dāng)流量較大時,后端的處理能力有限,緩沖池里的請求可能處理不及時,會有一定程度延遲。

特權(quán)處理:這個模式需要將用戶進(jìn)行分類,通過預(yù)設(shè)的分類,讓系統(tǒng)優(yōu)先處理需要高保障的用戶群體,其它用戶群的請求就會延遲處理或者直接不處理。

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

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

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

計(jì)數(shù)器方法系統(tǒng)維護(hù)一個計(jì)數(shù)器,來一個請求就加1,請求處理完成就減1,當(dāng)計(jì)數(shù)器大于指定的閾值,就拒絕新的請求。基于這個簡單的方法,可以再延伸出一些高級功能,比如閾值可以不是固定值,是動態(tài)調(diào)整的。另外,還可以有多組計(jì)數(shù)器分別管理不同的服務(wù),以保證互不影響等。

隊(duì)列方法就是基于FIFO隊(duì)列,所有請求都進(jìn)入隊(duì)列,后端程序從隊(duì)列中取出待處理的請求依次處理?;陉?duì)列的方法,也可以延伸出更多的玩法來,比如可以設(shè)置多個隊(duì)列以配置不同的優(yōu)先級。

令牌桶方法首先還是要基于一個隊(duì)列,請求放到隊(duì)列里面。但除了隊(duì)列以外,還要設(shè)置一個令牌桶,另外有一個腳本以持續(xù)恒定的速度往令牌桶里面放令牌,后端處理程序每處理一個請求就必須從桶里拿出一個令牌,如果令牌拿完了,那就不能處理請求了。我們可以控制腳本放令牌的速度來達(dá)到控制后端處理的速度,以實(shí)現(xiàn)動態(tài)流控。

三、服務(wù)限流的注意事項(xiàng)

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

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

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

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

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

本文轉(zhuǎn)自微信公眾號不止思考,作者:奎哥

原文鏈接:https://mp.weixin.qq.com/s/G3Pt-rpQ9feUU6h_usa8Fw

新聞名稱:架構(gòu)設(shè)計(jì)之“服務(wù)限流”-創(chuàng)新互聯(lián)
路徑分享:http://bm7419.com/article40/cdeiho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站做網(wǎng)站、網(wǎng)站排名、網(wǎng)站導(dǎo)航企業(yè)建站、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)