」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 ThrottleX 進行速率限制

使用 ThrottleX 進行速率限制

發佈於2024-11-02
瀏覽:429

Rate Limiting with ThrottleX

快速連結:

  • GitHub 儲存庫
  • 維基文檔

介紹

嘿,開源愛好者和 Go 愛好者!我回來了,快速概述了我的開源專案 ThrottleX,這是一個 API 的分散式速率限制器。我對這個開源世界還很陌生,所以隨時歡迎您的建議! ?

ThrottleX 旨在協助您有效管理 API 流量,保持您的系統流暢且公平。無論是防止濫用還是處理高負載,ThrottleX 都能滿足您的需求。讓我們探討一些讓 ThrottleX 變得強大的速率限制演算法。 ?

速率限制演算法解釋? ‍?

ThrottleX 包含三種核心演算法,可協助您管理 API 流量:

1. 固定視窗速率限制

運作原理:想像將時間分成固定的間隔。在每個時間間隔內,您允許固定數量的請求 — 例如,每分鐘 100 個請求。一旦視窗關閉,計數器就會重置。

用例:非常適合可預測的流量模式,但要警惕“邊界問題”,即視窗末端附近的許多請求可以繞過預期的速率限制。

2. 滑動視窗速率限制

工作原理:它就像移動平均線 - 速率限制不是在每個視窗結束時完全重置,而是隨時間“滑動”,提供更平滑的控制。

使用案例:非常適合避免尖峰並更均勻地分配請求。

3. 令牌桶限速

工作原理:想像一個桶子以穩定的速度裝滿代幣。請求會消耗令牌,如果儲存桶為空,則請求會被阻止,直到重新填滿為止。

用例:如果保存了令牌,則非常適合允許流量突然爆發。

用法範例? ️

這是一個使用固定視窗速率限制器的簡單範例:

package main

import (
    "github.com/neelp03/throttlex/ratelimiter"
    "github.com/neelp03/throttlex/store"
    "time"
    "fmt"
)

func main() {
    // Initialize an in-memory store and a Fixed Window rate limiter
    memStore := store.NewMemoryStore()
    limiter, err := ratelimiter.NewFixedWindowLimiter(memStore, 10, time.Minute)
    if err != nil {
        fmt.Println("Failed to create limiter:", err)
        return
    }

    // Simulate API requests
    key := "user1"
    for i := 0; i 



預期輸出:

Request 1 allowed
Request 2 allowed
... (up to 10 allowed)
Request 11 blocked
Request 12 blocked
... (up to 15 blocked)

ThrottleX 的下一步是什麼? ?

  • 優先限速:不同使用者的優先順序不同。
  • 動態速率限制:根據伺服器負載調整限制。
  • 並發限制:管理並發請求。

請繼續關注這些未來的更新,它們將使 ThrottleX 變得更加強大!

您可以如何做出貢獻?

我對開源還是個新手,我希望您能成為這趟旅程的一部分!我們始終歡迎您做出貢獻—無論是錯誤修復、建議或文件改進。

查看存儲庫:ThrottleX GitHub Repo,如果您發現它有用,請給它一個星星。請隨意提出問題或拉取請求 - 每一點都有幫助!

最後的想法

ThrottleX 是我讓 API 速率限制更容易存取和更有效率的嘗試。讓我們讓它變得有趣(並且減少痛苦)! ?

版本聲明 本文轉載於:https://dev.to/neelp03/rate-limiting-with-throttlex-26df?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-04-18
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-04-18
  • CSS選擇器排除特定類名方法
    CSS選擇器排除特定類名方法
    在CSS選擇器中排除特定的類名,在某些實例中,您可能需要將特定的類名為選擇器中的特定類名為。當您想將樣式應用於多個元素時,這一點特別有用,但是某些元素不應繼承這些樣式。 一個常見的方案涉及排除具有特定類名稱的元素,同時將樣式應用於具有其他類名稱的元素。讓我們考慮以下示例: 設計 態 ...
    程式設計 發佈於2025-04-18
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中3個Party Package將另一個PAXPANCE帶有導入式套件之間的另一個軟件包,並在導入式套件之間導入另一個軟件包。如迴聲消息所證明的那樣: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    程式設計 發佈於2025-04-18
  • Python未捕獲異常日誌記錄,提升調試技巧
    Python未捕獲異常日誌記錄,提升調試技巧
    在Python中記錄未熟悉的異常:在STDERR 以方便且信息的方式處理穩定的應用是至關重要的。儘管明確地捕獲和處理異常是謹慎的,但在某些情況下,自動化此過程可能是非常有益的。本文探討了一種創新的方法,可以通過多功能記錄模塊來記錄未熟悉的異常。 ,而不是依靠將異常打印為stderr的默認行為,而...
    程式設計 發佈於2025-04-18
  • input: Can You Modify CSS on Hover for Unrelated Elements?

output: CSS懸停時如何影響無關元素?
    input: Can You Modify CSS on Hover for Unrelated Elements? output: CSS懸停時如何影響無關元素?
    解決方案。項目:hover .wrapper { / *元素F */的CSS修改 } [ f作為e: f是E的孩子,而是後來的同胞或它的後代,在dom中(在e之後出現在e中),使用: javascript備用 .style.backgroundColor =“ url('some ...
    程式設計 發佈於2025-04-18
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-04-18
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符在postgresql中提取最後一行,您可能需要遇到與數據集合中每個不同標識的信息相關的信息。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: id dat...
    程式設計 發佈於2025-04-18
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    程式設計 發佈於2025-04-18
  • Codewars - 刪除超過n次出現的元素
    Codewars - 刪除超過n次出現的元素
    [2 我在本系列中發布了CODEWARS的挑戰和我的思考過程。我會盡可能使用JS和節點18。只是為了清楚起見,我要合理地利用它們。 “如果元素出現超過n次,則刪除出現”。本質上,在數組中間修剪部分,而不會更改順序。 函數deletenth(arr,n){ 令counter = {“ top”...
    程式設計 發佈於2025-04-18
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-04-18
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-18
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-04-18
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-04-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3