web-dev-qa-db-ja.com

tomcatで2000以上のリクエスト/秒を処​​理する方法?

JavaでSMSアプリケーションを開発しています。私のクライアントはSMSを介してクエリを送信し、SMSゲート​​ウェイを介してhttpリクエストの形式でサーバーに転送されます。これで、私のアプリがリクエストを処理し、SMS Gatewayを介してクライアントに応答を再度送信します。最大300文字のみが応答として送信されます。非常に高いトラフィック(2000リクエスト/秒)を期待しています。 (mochahostを考慮した)いくつかのWebホスティング会社でアプリケーションをホストしたいと思いました。ホストする前に考慮すべき要素(RAM、CPUなどの間隔)、および主要なボトルネックは何ですか?適切に調整されていれば、専用のTomcatサーバーでこのような高トラフィックを処理できますか?あなたの提案は何ですか?

データベースの相互作用はありません(私はJavaヒープメモリのみを使用しています)。 JMeter(100リクエスト/秒)でテストを実行しました。ヒープメモリの使用量は35MB、平均応答時間は532msでした。また、セッション変数を使用していません。

23
ravi

サーブレットの内容を理解せずに質問に答えることは困難ですdoingしかし、簡単に言えば、Tomcatとはまったく関係がないということです。

現在、TomcatサーバーにはDell R410(デュアルクアッドコア、32G RAM)を使用しています。 RESTバックエンドのmembaseクラスターと通信するサービスの場合、単一のサーバーでこれを簡単に処理できます(これはJersey JAX-RS実装を使用しています)。現在、 F5ロードバランサの背後に4つあり、これらの各リクエストは平均で約10ミリ秒で処理されます。

本当に重要なのは並行性です。サーブレットがリクエストで行う必要があることを実行するのにどれくらい時間がかかりますか。すべての同時リクエストに対してスレッドが実行されるので、2000リクエスト/秒をしようとしていて、1つのリクエストの処理に500ミリ秒かかる場合は、少しのハードウェアが必要になります。問題はTomcatではなく、サーブレットで利用可能なリソースの1つです。

28
Brian Roach

適度なハードウェアにデフォルト設定が設定された単一のTomcatサーバーは、要求ごとに実行する作業が多すぎないと想定して、2k要求/秒を簡単に処理できます。 1つの要求の処理に500ミリ秒以上かかる場合は、おそらくスレッドプール内のスレッド数を増やす必要があり、制限を押し上げ始める可能性があります。あるいは、その作業の一部を他のスレッドにオフロードできる場合は、応答時間が短縮され、デフォルトの200スレッドを維持できます。次に、ワーカースレッドが着信要求に対応できるかどうかの問題です。これは、負荷が一定であるかバースト性があるか、および処理で許容できる遅延に依存します。これは、HA、DR、および許容できるダウンタイムの問題にさえ対処しません。それはすべて大きなバランスをとる行為であり、カットアンドドライの答えを出すには変数が多すぎます。

7
Ryan Stewart

クラスター/負荷分散のアプローチを実装する必要があるようです。例として this を見てください。

1
Otávio Décio