2016-08-17 8 views
0

複数のノードにRESTfulなサービスをデプロイしており、毎分クライアントごとに異なるクォータを持つ各クライアントからのサービスへのコール数を制限したい。 私たちのスタック:Jbossアプリケーションサーバー、Java/Spring RESTfulサービス。RESTfulサービスへの呼び出し回数を制限する

これを実装するには、どんなクラウドが可能でしょうか?

答えて

0

APIにアクセスする唯一の方法は、管理しているUIクライアントを使用する場合は、クライアントコード(ウェブアプリケーションの場合はjavascript)にチェックを付けて、制限を超えない場合にのみ電話をかけることができますそのユーザーによってそれ以外の方法はありません。ユーザーはいつでもAPIにアクセスできます。サーバーレベルでは、エラーや有効な結果をAPIレスポンスの一部として送信するかどうかを確認するだけです。

-1

スタックを制限するには、少なくとも特定のクライアントIDに基づいて状態を維持する必要があることを意味します。これにより、中央カウンターを維持する必要が生じる場合があります。 db(cassandra)を使用すると、1分あたりのリクエスト数を調べ、その後、必要に応じてリクエスト数を制限することができます。

クライアントのセッションを追跡できる場合は、スティッキセッションを追跡して使用することができ、クライアントセッション中にクライアントに特定のノードを使用させることができるため、Javaフィルタ内でその番号クライアントごとに503のコードを送信するか、より関連性の高いものを送信します。

+0

この解決法は本当に悪いことです。リクエストごとに2つの追加のデータベース呼び出しが必要です.1つはカウンタを読み込み、もう1つはカウンタを更新します。さらに、アプリケーションとデータベースのワークロードを増やすことで、システム全体をすぐに停止させる可能性が高くなります。 – Matt

+0

@Mattこれは、DoSで必要とされる条件に基づいてリクエストを制限したい場合の解決策ですが、私の質問は、クォータコントロールに合わせた質問が、ダイナミックに基づいて各クライアントに割り当てられているという事実に基づいていますELBに結ばれていない価格設定などの情報ですので、私の答えはこの制約内で有効です。 – maress

5

時々前に私はa good article where the same theme was highlightedを読みました。 アイデアはプロキシとここでそれを行うにはいくつかの理由をロードバランシングには、このロジックを移動することです:

  1. は、技術的負債を排除 - アプリロジックで結合されたレート制限ロジックを持っていれば、あなたは持っていますあなたが必要としない技術的な借金。あなたはその負債を持ち上げてシフトすることができます

  2. 効率性の向上 - 上流のロジックをオフロードしています。つまり、すべての計算リソースは計算専用です。

  3. セキュリティ - サービス拒否(DoS)を含むアプリケーション層(要求/応答)攻撃が増加していることはよく理解されています。接続容量の大きい上流のプロキシを利用することで、実際のサーバーの近くに決して行き渡ることがないため、その攻撃を阻止することができます。

+1

これは道のりです。 @ラディ、あなたのアプリケーション内またはあなたのアプリケーションサーバー内でその問題を解決しないでください。 – Matt

関連する問題