< 返回

為什么速率限制很重要?速率限制的類型

2023-04-21 13:49 作者:joseph wu 閱讀量:2711

速率限制是一種簡單但非常有效的技術(shù),用于保護(hù)API免遭無意和惡意的過度使用。如果沒有速率限制,任何人都可以用請求轟炸服務(wù)器并導(dǎo)致吞噬資源的流量高峰,“餓死”其他用戶,并使服務(wù)無響應(yīng)。本文介紹了速率限制以及限制到達(dá) API 和服務(wù)的請求數(shù)量的重要性。我們解釋什么是速率限制及其工作原理,并介紹可用于為您的用例采用速率限制的不同類型的算法。

什么是速率限制?

速率限制是限制用戶可以對特定 API 或服務(wù)發(fā)出的請求數(shù)量的做法。您可以限制用戶在特定時間范圍內(nèi)重復(fù)執(zhí)行某項操作(即嘗試登錄帳戶或發(fā)送消息)的頻率。如果有人達(dá)到他們的限制,服務(wù)器將開始拒絕其他請求。速率限制既是網(wǎng)絡(luò)安全預(yù)防措施,也是軟件質(zhì)量保證 (QA)的關(guān)鍵部分。公司使用速率限制來:

  • 防止大量請求壓垮Web 或應(yīng)用程序服務(wù)器。
  • 確保所有用戶都可以平等地訪問 API,并且沒有人會消耗過多的帶寬、數(shù)據(jù)存儲或內(nèi)存。
  • 阻止人類用戶、機(jī)器人和應(yīng)用程序(能夠調(diào)用 API 的任何人或任何事物)濫用 Web 資產(chǎn)。
  • 防止不同類型的惡意機(jī)器人活動(即 DoS/DDoS 和暴力攻擊)。

從技術(shù)上講,速率限制是流量整形的一種形式。這種做法讓您可以控制流量的流動和分配,以防止基礎(chǔ)設(shè)施過載或出現(xiàn)故障。大多數(shù)具有速率限制的系統(tǒng)的上限都遠(yuǎn)高于即使是高容量用戶也可以實際要求的上限。最常見的例子是社交媒體消息傳遞。所有社交媒體網(wǎng)站都對您可以發(fā)送給其他用戶的直接消息的數(shù)量設(shè)置了上限。如果有人決定向其他配置文件發(fā)送一千條消息,速率限制就會啟動并阻止用戶在一段時間內(nèi)發(fā)送消息。

為什么速率限制很重要?

以下列出了為什么速率限制是任何健康服務(wù)的重要方面的主要原因:

  • 防止過載:過多的請求會使服務(wù)器不堪重負(fù),導(dǎo)致其速度變慢甚至變得無響應(yīng)。限制服務(wù)器或 API 處理的請求數(shù)量有助于保持服務(wù)的性能和可用性。
  • 確保公平:速率限制可防止任何用戶以犧牲他人為代價來獨占資源。對允許的請求設(shè)置上限可以讓每個人都有公平的機(jī)會使用該服務(wù)。
  • 管理成本:如果對服務(wù)發(fā)出的每個請求都有成本,則速率限制對于控制費用和確保資源的有效利用至關(guān)重要。
  • 使用計量:如果用戶注冊的計劃允許例如每小時 1000 個 API 請求,則速率限制可確保客戶端保持在設(shè)定的上限內(nèi)。
  • 控制數(shù)據(jù)流:速率限制使管理員能夠控制數(shù)據(jù)流,這是處理大量數(shù)據(jù)的 API 的關(guān)鍵。例如,您可以通過限制流入每個元素的流量在兩個 API 之間平均分配數(shù)據(jù)。
  • 防止惡意活動:速率限制對于防止多種類型的網(wǎng)絡(luò)攻擊至關(guān)重要。這種做法是應(yīng)對拒絕服務(wù)攻擊(向服務(wù)器發(fā)送大量請求,試圖使其無響應(yīng))、暴力攻擊(機(jī)器人試圖通過輸入隨機(jī)字符來猜測登錄密碼)和憑據(jù)填充的首選方法(使用受損用戶憑據(jù)列表來侵入系統(tǒng))。

速率限制如何工作?

為了設(shè)置速率限制,管理員對用戶在特定時間范圍內(nèi)可以向服務(wù)器或 API 發(fā)出的請求數(shù)量設(shè)置上限。通常,限速機(jī)制跟蹤兩個關(guān)鍵因素:

  • 發(fā)送請求的用戶的IP地址。
  • 每個請求之間經(jīng)過了多少時間。

速率限制的主要指標(biāo)是每秒事務(wù)數(shù) (TPS)。如果單個 IP 地址在特定時間段內(nèi)發(fā)出過多請求(即超過其 TPS 限制),則速率限制會阻止服務(wù)器或 API 響應(yīng)。用戶收到一條錯誤消息,并且在計時器重置之前無法發(fā)送進(jìn)一步的請求。

速率限制總是依賴于某種形式的節(jié)流機(jī)制來減慢或阻止請求。管理員在服務(wù)器端或客戶端實施速率限制,具體取決于哪種策略更適合用例:

  • 服務(wù)器端速率限制在防止過載和阻止惡意活動方面更有效。
  • 客戶端速率限制更擅長管理成本和確保資源的公平使用。

許多管理員還根據(jù)用戶名設(shè)置速率限制。這種方法可以防止暴力攻擊者嘗試從多個 IP 地址登錄。

速率限制的類型

讓我們看看可用于控制對服務(wù)器或 API 的訪問的不同類型的速率限制。請記住,您可以將不同類型組合成一個混合策略。例如,您可以限制基于 IP 地址和特定時間間隔的請求數(shù)量。

基于時間的速率限制

基于時間的速率限制在預(yù)定義的時間間隔上運行。例如,服務(wù)器可以將請求限制為每個時間段的特定數(shù)量(例如每分鐘 100 個)。基于時間的速率限制通常適用于所有用戶。您可以將這些限制設(shè)置為固定(計時器倒計時,無論用戶何時以及是否提出請求)或滑動(倒計時在有人發(fā)出第一個請求時開始)。

地理速率限制

地理速率限制限制來自特定區(qū)域的請求數(shù)量。在運行基于位置的廣告系列時,這些上限是一個很好的選擇。管理員可以限制來自目標(biāo)受眾之外的請求并提高目標(biāo)區(qū)域的可用性。

這些速率限制也有助于防止可疑流量。例如,您可以預(yù)測某個地區(qū)的用戶在晚上 11:00 到早上 8:00 之間不太活躍。您為這次設(shè)置了較低的速率限制,這進(jìn)一步限制了任何希望引起惡意流量問題的攻擊者。

基于用戶的速率限制

基于用戶的速率限制控制單個用戶在特定時間范圍內(nèi)可以執(zhí)行的操作數(shù)。例如,服務(wù)器可能會將每個用戶每天可以進(jìn)行的登錄嘗試次數(shù)限制為 100 次。

基于用戶的限制是最常見的速率限制類型。大多數(shù)系統(tǒng)跟蹤用戶的 IP 地址或 API 密鑰(或兩者)。如果用戶超過設(shè)定的速率限制,應(yīng)用程序會拒絕任何進(jìn)一步的請求,直到每用戶計數(shù)器重置。請記住,這種類型的速率限制需要系統(tǒng)維護(hù)每個用戶的使用統(tǒng)計信息。此類設(shè)置通常會導(dǎo)致運營開銷并增加總體IT 成本。

并發(fā)率限制

并發(fā)率限制控制系統(tǒng)在特定時間范圍內(nèi)允許的并行會話數(shù)。例如,一個應(yīng)用程序可能會在一分鐘內(nèi)阻止超過 1000 個會話。

服務(wù)器速率限制

服務(wù)器速率限制可幫助管理員在不同服務(wù)器之間分擔(dān)工作負(fù)載。例如,如果您運行一個包含五臺服務(wù)器的分布式架構(gòu),您可以使用速率限制為每臺設(shè)備設(shè)置一個上限。

如果其中一臺服務(wù)器達(dá)到其上限,則設(shè)備會將其路由到另一臺服務(wù)器或丟棄請求。這種策略對于實現(xiàn)高可用性和防止針對特定服務(wù)器的 DoS 攻擊至關(guān)重要。

API 基于端點的速率限制

這些速率限制基于用戶嘗試訪問的特定 API 端點。例如,出于安全或過載考慮,管理員可能會將對特定端點的請求限制為每分鐘 50 個。

速率限制算法

以下是公司實施速率限制所依賴的最常見算法:

  • 令牌桶:用戶每次發(fā)出請求,系統(tǒng)從所謂的令牌桶中取出一個令牌。一旦桶為空,用戶就無法發(fā)出進(jìn)一步的請求,直到重新填充重置會話令牌的數(shù)量。
  • 貪心令牌桶:該算法允許用戶積累未使用的令牌并建立更大的桶。沒有充分利用其配額的用戶在未來使用更多的令牌(即請求)。
  • 漏桶:每當(dāng)有人發(fā)出請求時,系統(tǒng)都會在用戶的桶中添加一個令牌。如果桶已滿(即用戶達(dá)到設(shè)定的限制),系統(tǒng)將丟棄所有進(jìn)一步的請求。漏桶很容易在負(fù)載均衡器上實現(xiàn),并且內(nèi)存效率很高。
  • 固定窗口:此算法限制用戶在固定時間窗口(通常為一分鐘或一小時)內(nèi)可以發(fā)出的請求數(shù)。例如,服務(wù)器在上午 11:00 到 11:01 之間可能只處理 100 個請求。上午 11:01,窗口重置。
  • 滾動窗口:這種方法不像以前的算法那樣使用固定時間窗口,而是依賴于滾動窗口。時間范圍僅在用戶發(fā)出新請求時開始。例如,如果第一個請求恰好在 10:15:48 到達(dá)并且速率限制為每分鐘 20 個,則服務(wù)器將在 10:16:48 之前允許另外 19 個請求。
  • 滑動日志:該算法要求系統(tǒng)為每個用戶維護(hù)一個帶時間戳的請求日志(集或表)。系統(tǒng)計算日志總和來確定請求率。如果速率超過閾值速率,系統(tǒng)將保持請求;否則,系統(tǒng)為請求提供服務(wù)。

如何實現(xiàn)速率限制?

以下是實施速率限制的分步指南(盡管設(shè)置限制的確切方式取決于您的特定技術(shù)棧):

  • 確定速率限制規(guī)則:確定您將使用的特定速率限制。確定速率限制的類型(基于時間、基于請求等)、限制本身(即允許的請求數(shù))以及限制的持續(xù)時間。
  • 選擇速率限制算法:選擇最適合您要求的算法。一般來說,令牌桶適用于大多數(shù)基于用戶的限速。同樣,固定窗口非常適合基于時間的速率限制。
  • 決定在何處實施速率限制:決定團(tuán)隊是否應(yīng)在服務(wù)器端或客戶端(或兩者)實施速率限制。
  • 實施速率限制:接下來,部署所選的速率限制算法。此過程通常涉及提供速率限制功能的公共模塊,盡管您的團(tuán)隊可能必須編寫一些自定義代碼。
  • 測試速率限制:速率限制機(jī)制一旦設(shè)置,就需要進(jìn)行大量測試。結(jié)合使用手動和自動測試來模擬不同的交通狀況。定期測試系統(tǒng)并根據(jù)需要調(diào)整規(guī)則以保持性能水平。

對于大多數(shù)用例來說,實施速率限制是一個簡單的過程。例如,如果您使用 Nginx 作為 Web 服務(wù)器并希望在服務(wù)器級別設(shè)置速率限制,您將使用 ngx_http_limit_req_module模塊。只需將以下代碼添加到 Nginx 配置文件中,即可根據(jù)用戶的 IP 地址設(shè)置速率限制:

HTTP {
    limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
    ...

服務(wù)器 {
    ...
    位置/促銷/ {
        limit_req zone=one burst=5;
    }
}

上面的代碼平均每秒允許不超過 2 個請求,而突發(fā)不能超過 5 個請求。

一種簡單但非常有效的防御措施

速率限制對于 API、應(yīng)用程序和網(wǎng)站的安全性和質(zhì)量至關(guān)重要。未能限制請求數(shù)量會使您容易受到基于流量的攻擊并導(dǎo)致性能不佳(這會導(dǎo)致更高的跳出率、客戶保留問題等)。考慮到實施此預(yù)防措施有多么容易,對于大多數(shù)用例來說,設(shè)置速率限制是一個無需動腦筋的決定。

聯(lián)系我們
返回頂部 主站蜘蛛池模板: 五月婷婷伊人网| 337p粉嫩胞高清视频在线| 欧美成人午夜片一一在线观看| 国产永久免费高清在线观看视频| 久久中文精品无码中文字幕| 狠狠综合久久综合网站| 国产日产精品_国产精品毛片| 中文字幕23页| 欧美孕妇xxxx做受欧美| 四虎影视在线影院4hutv| 91成人免费在线视频| 日本三级免费看| 亚洲精品第一国产综合精品| 麻豆果冻国产91在线极品| 天天操天天干天天拍| 亚洲AV无码AV制服另类专区| 精品国产18久久久久久| 国产精品亚洲欧美| 七仙女欲春2一级裸片免费观看 | 高清国产激情视频在线观看| 成年免费视频黄网站在线观看| 亚洲欧美在线观看视频| 久久久久香蕉视频| 牛牛色婷婷在线视频播放| 国产尤物在线视精品在亚洲| a级精品国产片在线观看| 日韩在线一区二区三区免费视频| 做受视频60秒试看 | 亚洲黄网在线观看| 韩剧学生的妈妈| 国产色婷婷五月精品综合在线| 中文字幕羽月希黑人侵犯| 欧美国产日韩在线| 免费精品99久久国产综合精品| 国产v亚洲v天堂a无| 在车里被撞了八次高c| 久久99国产乱子伦精品免费| 欧美孕妇乱大交xxxx| 俺来也俺去啦久久综合网| 趴在墙上揉捏翘臀求饶h| 国产精品揄拍一区二区久久|