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