クイックリンク:
導入:
オープンソース愛好家と Go 愛好家の皆さん、こんにちは!私のオープンソース プロジェクト、API の分散レート リミッタである ThrottleX の概要を説明します。私はこのオープンソースの世界にはまだ慣れていないので、アドバイスはいつでも大歓迎です。 ?
ThrottleX は、API トラフィックを効果的に管理し、システムをスムーズかつ公平に保つように構築されています。悪用の防止や高負荷の処理など、ThrottleX が対応します。 ThrottleX を強力にするレート制限アルゴリズムのいくつかを見てみましょう。 ?
ThrottleX には、API トラフィックの管理に役立つ 3 つのコア アルゴリズムが詰め込まれています。
仕組み: 時間を一定の間隔に分割することを想像してください。各間隔中に、固定数のリクエスト (たとえば、1 分あたり 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 リポジトリをチェックし、役立つと思われる場合はスターを付けてください。気軽に問題を開いたり、リクエストをプルしたりしてください。どんな些細なことでも役に立ちます!
最終的な考え
ThrottleX は、API レート制限をよりアクセスしやすく効率的にするための私の試みです。楽しく(そして苦痛を減らして)やりましょう! ?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3