成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

掌握四種常用限流算法,面試包過

人工智能 算法
本篇介紹了四種常用的限流算法:固定窗口算法、滑動窗口算法、漏桶算法和令牌桶算法。每種算法都有其特點和適用場景。

在高并發訪問下,比如電商大促活動,流量持續不斷的涌入,服務之間的相互調用頻率突然增加,引發系統負載過高,這時系統所依賴的服務的穩定性對系統的影響非常大,而且還有很多不確定因素引起雪崩,如網絡連接中斷,服務宕機等。一般微服務容錯組件提供了限流、隔離、降級、熔斷等手段,可以有效保護我們的微服務系統。本文主要說說限流。

限流,就是限制最大流量,防止操作頻率超過定義的限制。系統能提供的最大并發有限,同時請求又太多,這就就需要限流,比如秒殺、大促活動業務,瞬時大量請求涌入,服務器服務不過來,就只好限流了。速率限制通過限制在給定時間段內可以到達 API 的請求數量來保護服務免受意外或惡意過度使用。在沒有速率限制的情況下,任何用戶都可以用請求轟炸您的服務器,從而導致其他用戶餓死的情況。

為什么要限速?

  • 防止資源匱乏:速率限制的最常見原因是通過避免資源匱乏來提高基于 API 的服務的可用性。如果應用速率限制,則可以防止基于負載的拒絕服務 (doS) 攻擊。即使一個用戶用大量請求轟炸 API,其他用戶也不會挨餓。
  • 安全性:速率限制可防止暴力破解登錄、促銷代碼等安全密集型功能。對這些功能的請求數量在用戶級別受到限制,因此暴力破解算法在這些場景中不起作用。
  • 防止運營成本:在按使用付費模式自動擴展資源的情況下,速率限制通過對資源擴展設置虛擬上限來幫助控制運營成本。如果不采用速率限制,資源可能會不成比例地擴展,從而導致指數級的賬單。

速率限制策略速率限制可應用于以下參數:

  • 用戶:限制在給定時間段內允許用戶的請求數。基于用戶的速率限制是最常見和最直觀的速率限制形式之一。
  • 并發性:這里限制了在給定時間范圍內用戶可以允許的并行會話數。并行連接數量的限制也有助于緩解 DDOS 攻擊。
  • 位置/ID:這有助于運行基于位置或以人口統計為中心的活動。可以限制不是來自目標人口統計的請求,以提高目標區域的可用性
  • 服務器:基于服務器的速率限制是一種利基策略。這通常在特定服務器需要大部分請求時使用,即服務器與特定功能強耦合

下面介紹下四種常?的限流算法。

1、漏桶算法

漏桶算法的思路,是一種簡單直觀的算法,就是?個固定容量的漏桶,按照常量固定速率流出?滴。如果桶是空的,則不需流出水滴。可以以任意速率流入水滴到漏桶。如果流入水滴超出了桶的容量,則流入的水滴溢出了(被丟棄),而漏桶容量是不變的。

這種算法的優點是它可以平滑請求的突發并以恒定的速率處理它們。它也很容易在負載均衡器上實現,并且對每個用戶來說都是高效的內存。無論請求的數量如何,都保持到服務器的恒定接近均勻的流量。

缺點是請求的爆發可能會填滿存儲桶,導致新請求的匱乏。它也不能保證請求在給定的時間內完成。

優點:

  • 平滑流量。由于漏桶算法以固定的速率處理請求,可以有效地平滑和整形流量,避免流量的突發和波動(類似于消息隊列的削峰填谷的作用)。
  • 防止過載。當流入的請求超過桶的容量時,可以直接丟棄請求,防止系統過載。

缺點:

  • 無法處理突發流量:由于漏桶的出口速度是固定的,無法處理突發流量。例如,即使在流量較小的時候,也無法以更快的速度處理請求。
  • 可能會丟失數據:如果入口流量過大,超過了桶的容量,那么就需要丟棄部分請求。在一些不能接受丟失請求的場景中,這可能是一個問題。

2、令牌桶算法

令牌桶算法:假設限制2r/s,則按照500毫秒的固定速率往桶中添加令牌。桶中最多存放b個令牌,當桶滿時,新添加的令牌被丟棄或拒絕。當一個n個字節大小的數據包到達,將從桶中刪除n個令牌,接著數據包被發送到網絡上。如果桶中的令牌不足n個,則不會刪除令牌,且該數據包將被限流(要么丟棄,要么緩沖區等待)。令牌桶限流原理,如圖所示。


令牌桶限流服務器端可以根據實際服務性能和時間段改變生成令牌的速度和?桶的容量。 一旦需要提高速率,則按需提高放入桶中的令牌的速率。

生成令牌的速度是恒定的,而請求去拿令牌是沒有速度限制的。這意味著當面對瞬時大流量,該算法可以在短時間內請求拿到大量令牌,而且拿令牌的過程并不是消耗很大。

每次新請求到達服務器時,都會發生兩個操作:

  • 獲取令牌:獲取該用戶的當前令牌數。如果它大于定義的限制,則丟棄請求。
  • 更新令牌:如果獲取的令牌小于持續時間 d 的限制,則接受請求并附加令牌。

該算法具有內存效率,因為我們為我們的應用程序為每個用戶節省了更少的數據量。這里的問題是它可能導致分布式環境中的競爭條件。當來自兩個不同應用程序服務器的兩個請求同時嘗試獲取令牌時,就會發生這種情況。

優點:

  • 可以處理突發流量:令牌桶算法可以處理突發流量。當桶滿時,能夠以最大速度處理請求。這對于需要處理突發流量的應用場景非常有用。
  • 限制平均速率:在長期運行中,數據的傳輸率會被限制在預定義的平均速率(即生成令牌的速率)。
  • 靈活性:與漏桶算法相比,令牌桶算法提供了更大的靈活性。例如,可以動態地調整生成令牌的速率。

缺點:

  • 可能導致過載:如果令牌產生的速度過快,可能會導致大量的突發流量,這可能會使網絡或服務過載。
  • 需要存儲空間:令牌桶需要一定的存儲空間來保存令牌,可能會導致內存資源的浪費。
  • 實現稍復雜:相比于計數器算法,令牌桶算法的實現稍微復雜一些。

3、固定時間窗?算法

在固定的時間窗口內,可以允許固定數量的請求進入。超過數量就拒絕或者排隊,等下一個時間段進入。這種實現計數器限流方式由于是在一個時間間隔內進行限制,如果用戶在上個時間間隔結束前請求(但沒有超過限制),同時在當前時間間隔剛開始請求(同樣沒超過限制),在各自的時間間隔內,這些請求都是正常的,但是將間隔臨界的一段時間內的請求就會超過系統限制,可能導致系統被壓垮。

由于計數器算法存在時間臨界點缺陷,因此在時間臨界點左右的極短時間段內容易遭到攻擊。比如設定每分鐘最多可以請求100次某個接口,如12:00:00-12:00:59時間段內沒有數據請求,而12:00:59-12:01:00時間段內突然并發100次請求,而緊接著跨入下一個計數周期,計數器清零,在12:01:00-12:01:01內又有100次請求。那么也就是說在時間臨界點左右可能同時有2倍的閥值進行請求,從而造成后臺處理請求過載的情況,導致系統運營能力不足,甚至導致系統崩潰。

缺點:

  • 限流不夠平滑。例如:限流是每秒3個,在第一毫秒發送了3個請求,達到限流,窗口剩余時間的請求都將會被拒絕,體驗不好。
  • 無法處理窗口邊界問題。因為是在某個時間窗口內進行流量控制,所以可能會出現窗口邊界效應,即在時間窗口的邊界處可能會有大量的請求被允許通過,從而導致突發流量。

例如:限流是每秒3個,在第一秒的最后一毫秒發送了3個請求,在第二秒的第一毫秒又發送了3個請求。在這兩毫米內處理了6個請求,但是并沒有觸發限流。如果出現突發流量,可能會壓垮服務器。

4、滑動時間窗?算法

滑動窗?算法是把固定時間間進行劃分,并且隨著時間移動,移動方式為開始時間點變為時間列表中的第二時間點,結束時間點增加一個時間點,不斷重復,通過這種方式可以巧妙的避開計數器的臨界點的問題。

滑動窗口算法可以有效的規避計數器算法中時間臨界點的問題,但是仍然存在時間片段的概念。同時滑動窗口算法計數運算也相對固定時間窗口算法比較耗時。

缺點: 還是存在限流不夠平滑的問題。例如:限流是每秒3個,在第一毫秒發送了3個請求,達到限流,剩余窗口時間的請求都將會被拒絕,體驗不好。

總結

介紹了四種常用的限流算法:固定窗口算法、滑動窗口算法、漏桶算法和令牌桶算法。每種算法都有其特點和適用場景,下面我們來對它們進行簡單的總結和比較。

  • 令牌桶算法既能平滑流量,又能處理突發流量,適用于需要處理突發流量的場景。
  • 漏桶算法的優點是流量處理更平滑,但是無法應對突發流量,適用于需要平滑流量的場景。
  • 固定窗口算法 實現簡單,但是限流不夠平滑,存在窗口邊界問題,適用于需要簡單實現限流的場景。
  • 滑動窗口算法解決了窗口邊界問題,但是還是存在限流不夠平滑的問題,適用于需要控制平均請求速率的場景。
責任編輯:姜華 來源: 今日頭條
相關推薦

2024-02-28 09:22:03

限流算法數量

2021-06-24 17:55:40

Python 開發編程語言

2023-07-11 10:24:00

分布式限流算法

2021-08-11 20:17:22

推薦算法系統

2022-07-04 12:07:57

智慧城市智能建筑物聯網

2025-02-18 16:27:01

2023-10-21 21:13:00

索引SQL工具

2021-05-31 07:01:46

限流算法令牌

2015-05-08 12:24:10

惡意軟件逃避技術

2019-08-13 09:00:24

REST API身份認證密鑰

2009-09-08 17:20:01

C#排序算法

2010-11-04 09:31:21

DB2循環語句

2017-09-21 13:04:35

數據挖掘分析分析方法數據分析師

2015-03-19 15:13:20

PHP基本排序算法代碼實現

2024-10-24 08:04:00

2021-10-24 08:37:18

網絡監控網絡架構網絡

2025-01-21 00:00:00

權限模型RBAC

2022-03-18 14:33:22

限流算法微服務

2010-01-12 17:21:31

百兆交換機

2024-05-22 19:10:18

跨域Web開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线播放一区二区三区 | 欧美日韩一区二区三区四区 | 久久三区| 成人精品国产免费网站 | 亚洲综合色婷婷 | 国产精品久久久久一区二区三区 | 岛国视频| 成人久久18免费网站 | 成人免费视频观看视频 | 日本不卡在线视频 | av中文字幕在线观看 | 成人午夜精品 | 国产99久久精品一区二区永久免费 | 欧美a区 | 国产视频一二三区 | 日韩在线看片 | 午夜视频免费在线观看 | 一区二区三区视频免费观看 | 欧美一区二区三区国产精品 | 日本中文字幕一区 | av中文字幕在线观看 | 亚洲日韩中文字幕一区 | 久艹av | 免费国产视频 | 最近免费日本视频在线 | 女女百合av大片一区二区三区九县 | 欧美在线免费 | 能看的av网站 | 午夜影院网站 | 国产精品亚洲精品日韩已方 | 国产 亚洲 网红 主播 | 国产成人精品久久二区二区91 | 国产高清免费视频 | 99re国产| 日韩国产一区二区三区 | 国产成人精品一区二区三区四区 | 三a毛片| 亚洲网站在线播放 | 啪啪免费网| 欧美激情免费在线 | 欧美日韩毛片 |