2016-10-03 29 views
0

私たちは、残りのベースのフレームワークのレートリミッタを実装することを計画しています。しかし、どちらを実装するのか、並行性とレート制限の間でどちらが重要かは少し混乱しています。 私は、大部分の場所でそれが見つかりました。 apacheのラクダの人々は並行性の代わりにレート制限を実装しています。 しかし私にはレートレートは実際にはほとんど意味がないように見えますが、並行処理は複数の同時リクエストに直面してサービスするために常に必要となるものですか? 同じことについてご意見をお聞かせください。並行性とレート制限

+0

同時性と単一のクライアントのレート制限? – starikoff

+0

私は、外部リクエストを処理するサービスの並行性とレート制限を意味します。 –

+0

したがって、1つのクライアントまたは全体のリクエストに対するリクエストのリクエスト速度を制限したいですか?あるクライアントからの要求は別のクライアントからの要求に影響を与える必要がありますか? – starikoff

答えて

0

できるだけ多くの場合、既定で同時に並行要求を処理する必要があります。ただし、要求率を上回ると、サービスのパフォーマンスが大幅に低下する可能性があります。それが起こると、すべてのクライアントが苦しみ、あなたのサービスが誰にも利用できなくなるまで、より多くの要求に対応するのではなく、むしろ少なくなります。レート制限を使用すると、新しい要求がある速度を超えてシステムに入ることを許さず、パフォーマンスを低下させることはありません。あなたはいくつかのクライアントに表示されますが、少なくとも一部はサービスを受けています。過度のスワッピングやガベージコレクションを実行しても、SSHを使用できなくなったときにサーバー全体を効果的に使用できます。

特定のクライアント(IPに基づいて)のレート制限は、時間単位あたり非常に多くのリクエストを行う「悪い」クライアントの影響を緩和するか、DoSを試みます。

nginxのようなリバースプロキシの背後にサービスを置くことでリクエスト率を調整することが可能です。 it canあなたのシステムにしばらくの間待っていて、システムに入ってこないようにしてください(nginxは、性能低下なしでこれらの待ちをたくさん保持できます)、それらを完全に破棄して、IPなどの要求を制限することができます。

+0

大丈夫、私は例を取る、Javaスプリングフレームワークを言うことができます。今このフレームワークでは、フレームワークレベル、要求レート制限または並行性機能でより有益なものは何ですか?リクエストレートの制限の場合と同じように、以前のリクエストが配信されなかったか、またはまだ処理されていないため、新しいリクエストが許可されるため、サービス全体がダウンします。本当に目的を達成するのに役立ちますか?代わりに、いくつかの同時実行性の値を100にして、さらに要求を処理しないでください。 –

+0

「今後のリクエストには対応しない」とはどういう意味ですか?彼らは拒否されるのだろうか?それはただのレート制限です。処理スレッドはそれらが処理されるのを待ちますか?メモリとコンテキストの切り替えが無駄になり、クライアントの接続が途切れてしまいます。モデルを動作させるために非同期でリクエストを処理している場合のみです。その場合は正常に動作するようです。 – starikoff