快速連結:
介紹:
嘿,開源愛好者和 Go 愛好者!我回來了,快速概述了我的開源專案 ThrottleX,這是一個 API 的分散式速率限制器。我對這個開源世界還很陌生,所以隨時歡迎您的建議! ?
ThrottleX 旨在協助您有效管理 API 流量,保持您的系統流暢且公平。無論是防止濫用還是處理高負載,ThrottleX 都能滿足您的需求。讓我們探討一些讓 ThrottleX 變得強大的速率限制演算法。 ?
ThrottleX 包含三種核心演算法,可協助您管理 API 流量:
運作原理:想像將時間分成固定的間隔。在每個時間間隔內,您允許固定數量的請求 — 例如,每分鐘 100 個請求。一旦視窗關閉,計數器就會重置。
用例:非常適合可預測的流量模式,但要警惕“邊界問題”,即視窗末端附近的許多請求可以繞過預期的速率限制。
工作原理:它就像移動平均線 - 速率限制不是在每個視窗結束時完全重置,而是隨時間“滑動”,提供更平滑的控制。
使用案例:非常適合避免尖峰並更均勻地分配請求。
工作原理:想像一個桶子以穩定的速度裝滿代幣。請求會消耗令牌,如果儲存桶為空,則請求會被阻止,直到重新填滿為止。
用例:如果保存了令牌,則非常適合允許流量突然爆發。
這是一個使用固定視窗速率限制器的簡單範例:
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 速率限制更容易存取和更有效率的嘗試。讓我們讓它變得有趣(並且減少痛苦)! ?
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3