これは私の最初のSOの質問なので、しばらくお待ちください:)
次のサービスを作成しようとしています。
- 照会する URL を含む HTTP GET 要求を受け取ります
- 単一の GET 要求の場合、サービスは URL を抽出します
- URL についてローカル DB にクエリを実行します
- DB で結果が見つかった場合はそれをクライアントに返します。そうでない場合は、いくつかの外部サービスにクエリを実行する必要があります (応答に比較的長い時間がかかる場合があります)。
- URL の結果をクライアントに返す
私はこれを仮想マシンと Tomcat7 with spring で実行しています。前もってお詫び申し上げます。私は Tomcat の初心者です。
とにかく、私はこのサービスに対して多くの同時 GET リクエスト (数十万の同時リクエスト) を期待しています.数十万の同時リクエストを処理できるサービス)
サービス、特にTomcatでの非同期リクエストの処理について多くのことを読んできましたが、まだ不明な点がいくつかあります:
- Tomcat の公式 Web サイトから、Tomcat には多数のアクセプター スレッドと多数の作業スレッドが含まれているようです。その場合、なぜ AsyncContext を使用する必要があるのでしょうか? Tomcat の作業スレッドを解放し、アプリケーションで別のスレッドを占有してまったく同じアクションを実行する利点は何ですか? (システムにはまだ 1 つのアクティブなスレッドがあります)
- 最初の質問と似ていますが、AsyncContext を作成して別のスレッドで使用する利点はありますか? (私のアプリケーションで作成されたスレッド プールからのスレッド)
- 同じ問題に関して、Callable または DeferredResult を返して、Tomcat のスレッドまたは自分のスレッドのいずれかで処理できることをここで確認しました。Callable を返すか、リクエストから AsyncContext を処理するだけで DeferredResult を使用する利点はありますか?
- また、callable を返すことにした場合、Tomcat はどのスレッド プールから呼び出し可能オブジェクトを処理するスレッドを取得しますか? ここで使用されているスレッドは、前に述べた Tomcat の作業スレッドと同じですか? その場合、Tomcat の作業スレッドを 1 つ解放し、代わりに別のスレッドを使用すると、どのようなメリットがありますか?
- Oracle のドキュメントから、同時に処理される Runnable オブジェクトを AsyncContext に渡すことができることがわかりました。この Runnable を実行するために使用されるスレッドはどこから来るのですか? 私はそれを制御できますか?また、AsyncContext を自分のスレッドの 1 つに渡すだけでなく、AsyncContext を Runnable に渡す利点はありますか?
同じことについて何度も質問して申し訳ありませんが、私と私の同僚はこれらのことについて 1 週間以上論争していますが、具体的な答えはありません。
もう 1 つ一般的な質問があります。私が説明したサービスをスケーラブルにするための最良の方法は何だと思いますか? (現時点でマシンを追加することは別として)、目的のソリューションの例や参照を投稿できますか?
見ているリンクのリンクをもっと投稿したいのですが、現在の評判では許可されていません。わかりやすい参考文献や具体的な例に感謝します。関連する問題について明確にさせていただきます。
乾杯!