分布式系統(tǒng)中的限流器是一種重要的技術(shù)組件,用于控制和管理系統(tǒng)的流量,防止系統(tǒng)因流量過大而崩潰或性能下降。限流器的主要作用是在保證系統(tǒng)可用性的前提下,對(duì)流量進(jìn)行合理的限制和調(diào)度,以保證系統(tǒng)的穩(wěn)定性和可靠性。
在分布式系統(tǒng)中,限流器通常被部署在系統(tǒng)的入口或關(guān)鍵節(jié)點(diǎn)上,用于控制來自外部或內(nèi)部的請(qǐng)求流量。通過限制流量的速度和數(shù)量,限流器可以有效地防止系統(tǒng)因流量過大而出現(xiàn)擁塞或崩潰的情況。同時(shí),限流器還可以對(duì)流量進(jìn)行調(diào)度和分配,以保證系統(tǒng)的負(fù)載均衡和資源利用率的最大化。
常見的限流算法包括計(jì)數(shù)器、固定窗口、滑動(dòng)窗口、漏桶和令牌桶等。其中,計(jì)數(shù)器是最簡單的限流算法,它通過統(tǒng)計(jì)請(qǐng)求的數(shù)量來進(jìn)行限流,但缺乏時(shí)間概念,容易出現(xiàn)流量突增的情況。固定窗口和滑動(dòng)窗口算法則引入了時(shí)間概念,通過對(duì)時(shí)間窗口內(nèi)的請(qǐng)求數(shù)量進(jìn)行限制來實(shí)現(xiàn)限流,但可能存在窗口邊界的流量突變問題。漏桶和令牌桶算法則通過控制流量的速率來進(jìn)行限流,可以更好地平滑流量波動(dòng)。
在實(shí)際應(yīng)用中,限流器還可以結(jié)合其他技術(shù)手段來提高系統(tǒng)的可用性和性能,如降級(jí)處理、請(qǐng)求排隊(duì)、熔斷機(jī)制等。當(dāng)系統(tǒng)流量超過閾值時(shí),可以通過降級(jí)處理來減少非關(guān)鍵業(yè)務(wù)的影響,保證核心業(yè)務(wù)的正常運(yùn)行;請(qǐng)求排隊(duì)則可以將超出閾值的請(qǐng)求放入隊(duì)列中等待處理,避免直接拒絕請(qǐng)求導(dǎo)致用戶體驗(yàn)下降;熔斷機(jī)制則可以在系統(tǒng)出現(xiàn)異常情況時(shí)快速切斷請(qǐng)求鏈路,防止故障擴(kuò)散和影響整個(gè)系統(tǒng)。
限流方法
這里我們主要討論后端基于請(qǐng)求量的限流,限流是一種非常廣泛的應(yīng)用技術(shù),就比如你在登錄系統(tǒng)時(shí),經(jīng)常會(huì)需要你輸入手機(jī)驗(yàn)證、動(dòng)態(tài)碼或一些奇奇怪怪的驗(yàn)證方式, 來降低登錄請(qǐng)求的頻次。
計(jì)數(shù)限流
按數(shù)量進(jìn)行控制,達(dá)到設(shè)置的閾值則進(jìn)行限流,其中固定窗口,滑動(dòng)窗口則是通過該方法實(shí)現(xiàn)。
固定窗口
通過控制時(shí)間單元內(nèi)允許的請(qǐng)求數(shù)量,一旦達(dá)到閾值,則不會(huì)處理該請(qǐng)求后續(xù)相關(guān)的業(yè)務(wù)或者直接讓請(qǐng)求快速失敗并給予提示。
比如我們配置10s內(nèi)允許請(qǐng)求的流量為1000,在第1~9s內(nèi)請(qǐng)求為0,在第9~10秒內(nèi)的請(qǐng)求數(shù)為1000,這樣一秒內(nèi)的請(qǐng)求就達(dá)到了1000。當(dāng)然我們可以時(shí)間單元?jiǎng)澐殖筛×6龋?但是應(yīng)該多小才合適呢?
問題:只能對(duì)時(shí)間單元內(nèi)的總請(qǐng)求數(shù)進(jìn)行控制,當(dāng)請(qǐng)求集中在較小時(shí)間范圍內(nèi)時(shí),無法達(dá)到流量限制的效果,因此這是一種粗粒度的流量限制手段
滑動(dòng)窗口
為了解決固定窗口算法中存在的問題,通過滑動(dòng)窗口的方法,將上述時(shí)間單元?jiǎng)澐殖啥鄠€(gè)細(xì)粒度的時(shí)間窗口,每個(gè)窗口都有自己獨(dú)立的請(qǐng)求計(jì)數(shù)器,這樣就可以讓時(shí)間單元內(nèi)的流量控制均勻地 落在各個(gè)時(shí)間窗口上,同時(shí)滑動(dòng)的時(shí)間窗口可以形成連續(xù)時(shí)間區(qū)間控制,并不像固定窗口那樣只在兩個(gè)時(shí)間刻度間。
比如時(shí)間單元為1s,每個(gè)時(shí)間窗口為100ms,在1秒內(nèi)的10個(gè)時(shí)間窗口可以為09:01:01.000~09:01:02.000、09:01:01.200~09:01:02.800...
問題:滑動(dòng)窗口的區(qū)間劃分的越多,則滑動(dòng)窗口的滾動(dòng)就越平滑,限流的統(tǒng)計(jì)就會(huì)越精確,但也需要更多的資源為窗口時(shí)間片段保存計(jì)數(shù)器,從而耗費(fèi)系統(tǒng)資源
漏桶算法
如果將請(qǐng)求看成水滴,限流器看成一個(gè)下面開口的桶(漏桶)。漏桶算法其實(shí)就是當(dāng)水滴(請(qǐng)求)先進(jìn)入到漏桶里,漏桶以一定的速度出水,當(dāng)水流入速度過大時(shí)則會(huì)超過桶的可接納容量, 這時(shí)水將直接溢出,漏桶算法能強(qiáng)行限制數(shù)據(jù)的傳輸速率。使用漏桶算法,可以保證接口會(huì)以一個(gè)常速速率來處理請(qǐng)求,所以漏桶算法必定不會(huì)出現(xiàn)臨界問題。
問題:當(dāng)短時(shí)間內(nèi)如果有大量的突發(fā)請(qǐng)求時(shí),即使服務(wù)器負(fù)載不高,每個(gè)請(qǐng)求也需要等待一段時(shí)間(水滴間隔)才能被響應(yīng)。
總之,分布式系統(tǒng)中的限流器是一種重要的技術(shù)組件,它可以幫助系統(tǒng)更好地應(yīng)對(duì)流量壓力,保證系統(tǒng)的穩(wěn)定性和可靠性。在實(shí)際應(yīng)用中,需要根據(jù)系統(tǒng)的特點(diǎn)和需求選擇合適的限流算法和技術(shù)手段,以實(shí)現(xiàn)最佳的限流效果。
審核編輯:黃飛
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2254瀏覽量
94371 -
限流器
+關(guān)注
關(guān)注
0文章
41瀏覽量
14475 -
分布式系統(tǒng)
+關(guān)注
關(guān)注
0文章
146瀏覽量
19204
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論