問題タブ [rate-limiting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PythonでWebサービスへのリクエストの割合を制限するにはどうすればよいですか?
私はWebサービスAPIとインターフェイスするPythonライブラリに取り組んでいます。私が遭遇した多くのWebサービスと同様に、これは要求のレートを制限するように要求します。limit
クラスのインスタンス化にオプションのパラメーター、を提供したいと思います。これが提供された場合、指定された秒数が経過するまで送信要求を保持します。
一般的なシナリオは次のとおりです。クラスのインスタンスがメソッドを介してリクエストを行います。その場合、メソッドはどこかにロック変数を設定する信号を発し、秒数のカウントダウンタイマーを開始しlimit
ます。(おそらく、ロックはカウントダウンタイマー自体です。)この時間枠内に別の要求が行われた場合、カウントダウンタイマーがゼロになり、ロックが解除されるまで、その要求をキューに入れる必要があります。この時点で、キュー上の最も古い要求が送信され、カウントダウンタイマーがリセットされ、ロックが再度適用されます。
これは糸脱毛の場合ですか?私が見ていない別のアプローチはありますか?
カウントダウンタイマーとロックはインスタンス変数である必要がありますか、それともクラスのすべてのインスタンスがリクエストを保持するように、それらはクラスに属している必要がありますか?
また、これはライブラリ内でレート制限機能を提供するための一般的に悪い考えですか?デフォルトではカウントダウンは0秒であるため、ライブラリを使用すると、開発者はライブラリを使用して独自のレート制限スキームを提供できます。このサービスを使用する開発者はとにかくリクエストをレート制限する必要があることを考えると、ライブラリがレート制限の手段を提供するのは便利だと思います。
ライブラリに律速スキームを配置するかどうかに関係なく、ライブラリを使用してアプリケーションを作成したいので、提案された手法が役立ちます。
c# - Web リクエストのレート制限アルゴリズムを実装する最良の方法は何ですか?
可能な/部分的な重複:
スパムやブルート フォース攻撃を減らすために、Web アプリケーションの移動時間ウィンドウ レート制限アルゴリズムを実装する最良の方法を探しています。
使用例は、「過去 5 分間に特定の IP から失敗したログイン試行の最大数」、「過去 N 分間の (投稿/投票/その他...) の最大数」です。
X分ごとに統計をハードリセットする(twitter apiのように)よりも、移動時間ウィンドウアルゴリズムを使用したいと思います。
これは、C#/ASP.Net アプリ用です。
javascript - Javascriptでボタンのクリックを1分間に1回にレート制限する方法
プロセスのステータスを監視し、そのステータスのページを表示する PHP ベースの Web アプリケーションがあります。ユーザーは、ページのボタンをクリックしてステータスを更新できます。ただし、サーバーの処理負荷が非常に高いため、ステータスを頻繁に更新することは望ましくありません。そのため、[送信] ボタンを 1 分あたり 1 回クリックするように制限する方法が必要です (これにより、ページに表示されるステータスが更新されます)。たとえば、誰かが 12:00:00 にボタンをクリックした場合、12:01:00 まで再度クリックできないようにする必要があります。
ボタンをクリックした後、おそらくボタンを無効にし、1 分後に再度有効にしたいと思います。これが私の推奨する解決策です。
どうもありがとうございました。
ruby - ルビーファイルストリームのレート制限
私は、地理的に分散した多数のノードからS3バケットにフラッシュビデオファイルをアップロードするプロジェクトに取り組んでいます。
ビデオファイルはそれぞれ約2〜3 MBで、10分ごとに(ノードごとに)1つのファイルのみを送信しますが、これらのノードはストリーミングメディアをCDN、および場所が原因で、最大512kのアップロードしか取得できません。
私はASW-S3gemを調査してきましたが、レート制限はありませんが、IOストリームを渡すことができることを認識しています。これを考えると、read
メソッドをオーバーライドするレート制限ストリームを作成し、レート制限ロジックを追加して(たとえば、最も単純な形式でsleep
は読み取り間の呼び出し)、オーバーライドされたスーパーを呼び出すことができるかどうか疑問に思っています。方法。
私が検討したもう1つのオプションは、Net :: HTTPのコードをハッキングsend_request_with_body_stream
し、ループを使用しているメソッドにレート制限を設定するwhile
ことですが、どちらが最適なオプションかは完全にはわかりません。
私はIOクラスを拡張しようとしましたが、それはまったく機能せず、単にクラスから継承してclass ThrottledIO < IO
も何もしませんでした。
任意の提案をいただければ幸いです。
php - PHPとMemcachedで高価な操作をレート制限するための最良のアプローチは何ですか?
私はこれを思いつきました:
IPがMemcachedで見つかった場合、数秒間スリープすることは有益でしょうか?
api - ColdFusion でキャッシュを使用して API への呼び出しをレート制限する
こんにちは、ColdFusion を使用して last.fm API を呼び出しています。こちらから入手した cfc バンドルを使用しています。
5 分間の平均で、送信元 IP アドレスごとに 1 秒あたり 5 リクエストであるリクエスト制限を超えることを懸念しています。
cfc バンドルには、「アーティスト」、「トラック」などのセクションに分割された他のすべてのコンポーネントを呼び出す中心的なコンポーネントがあります。この中心的なコンポーネントは「lastFmApi.cfc」です。アプリケーションで開始され、アプリケーションの存続期間中保持されます
ハンドラー/コントローラー、たとえばアーティストハンドラーを介してAPIを呼び出したい場合...これを行うことができます
私はキャッシュについて少し混乱していますが、このハンドラーで API への各呼び出しを 5 分間キャッシュしていますが、これは違いがありますか? ?
これにどのように対処するのが最善か疑問に思う
ありがとう
django - 同時リクエストの最大数を制限する django/apache
ツールの使用法を示す django サイトがあります。私のビューの 1 つは、ファイルを入力として受け取り、外部の Python スクリプトを介してかなり重い計算を実行し、出力をユーザーに返します。ただし、ツールは同じ要求で出力を返すのに十分な速度で実行されます。ただし、サーバーが混雑しないように、この URL/ビューへの同時リクエスト数を制限したいと考えています。
これを行う方法に関するヒントはありますか?ページ自体は非常にシンプルで、使用率は低くなります。
c# - ASP.NET MVC サイトでレート制限を実装するにはどうすればよいですか?
認証されたユーザーがサイトの一部の機能を使用できる頻度を制限したい ASP.NET MVC サイトを構築しています。
レート制限が基本的にどのように機能するかは理解していますが、主要なコードの臭いを発生させずにプログラムで実装する方法を視覚化することはできません。
C# のサンプル コードを使用して、このような問題に対処するためのシンプルかつ強力なソリューションを教えてください。
問題があれば、現在、これらの機能はすべて、 のみを受け入れるアクションとして表現されていますHTTP POST
。最終的には関数にもレート制限を実装したいと思うかもしれないHTTP GET
ので、そのようなすべての状況で機能するソリューションを探しています。
python - CGI スクリプトで API へのリクエストのレートを制限する
私が書いているスクリプトは、API にリクエストを送信することがあります。API では、リクエストを 1 秒あたり最大 1 回に制限する必要があります。
API へのリクエストを毎秒 1 に制限する最も簡単な方法は何ですか?
リクエストが行われるたびに、現在の時刻をファイルに保存する必要がありますか?
google-app-engine - Memcache ベースのレート制限アルゴリズム? (トークンバケット?)
Google App Engine からサード パーティ サービスへのリクエストをレート制限する効率的な方法を探しています。サード パーティ サービスは、アカウントごとにリクエストをレート制限します。Google App Engine 側では、ほとんどの作業がタスク内で実行されます。トークン バケットは、ここでは優れた一般的なアルゴリズムです。
Q: サービスごとではなく、アカウントごとにリクエストを効率的にレート制限するには、どのようなアプローチを使用できますか?
アカウントごとのリクエスト数とサービスされるアカウント数は大きく異なるため、GAE タスク キューのレートを設定する必要はありません。パフォーマンス上の理由から、memcache ベースの (incr/decr?) アイデアに最も関心があります。
これは memcache ベースのトークン バケットに要約されると思いますか?
考え?