web-dev-qa-db-ja.com

Spring Bootアプリケーションは複数のリクエストを同時に処理できますか?

AWS BeanstalkにデプロイされたSpring Bootを使用してRest APIを開発しています。潜在的に、サービスは毎日何千ものクライアントからヒットするでしょう。したがって、複数のリクエストを処理するSpring Bootの機能を理解したいと思います。

私が読んだもの Spring-Boot:複数の要求を同時に処理する および Spring Bootでスレッドセーフなコントローラーを使用する方法 から、コントローラーがスレッドである間にSpring Bootが要求を同時に処理できるようです安全。

ただし、同じエンドポイントに対して2つの要求が同時に行われ、更新が行われた場合、コントローラーは要求を次々に処理しますか、それとも2つのスレッドで同時に処理しますか?後者の場合、各スレッドには独自のエンティティーマネージャーがありますか? EC2インスタンスの容量に基づいてスレッドの数を制限するスレッドプールを実装する方法はありますか?ちなみに、リクエストの量の見積もりに基づいて、どのくらいの大きさのインスタンスから始めればよいかをどのように決定すればよいですか?

12
ddd

はい、Spring Bootは同時にリクエストを処理できます! server.Tomcat.max-threadsapplication.propertiesまたはapplication.ymlに追加すると、同時リクエストの数を制限できます。 Springは接続のプールを管理し、エンティティマネージャーの分散を処理します(プロパティで指定した接続の最小値と最大値に従って)。詳細については、こちらで読むことができると思います: Spring JPA(Hibernate)Entity Managerを使用して接続が接続プールに返されるのはいつですか?

13
Felipe Mariano

Spring BootでWebアプリケーションを開発している場合(つまり、spring-boot-starter-webをpomファイルに挿入すると、Springは自動的にWebコンテナ(デフォルトではTomcat)を埋め込み、一般的なWebコンテナと同じように同時にリクエストを処理できます。

また、依存関係を変更して、デフォルトのWebコンテナをTomcatからUndertowまたはJettyに変更することもできます。

@Felipe Marianoが言ったように、以下の構成ファイルで、さまざまなWebコンテナーのワーカースレッドの最大量を制限できます。
(1)Tomcatの場合:server.Tomcat.max-threads
(2)Undertowの場合:server.undertow.worker-threads
(3)桟橋の場合:server.jetty.acceptors

3
LHCHIN

私が正しい場合、各リクエストごとに作成されたサーブレットコンテナがあります。これは、新しく生成された各スレッドによって処理されるため、技術的には各リクエストは並列に処理されます。アプリのプロパティファイルで最大スレッドを構成する必要があります。構成に基づいて、スレッドプールはSpring Frameworkによって処理されます。ありがとう

0
Maiden