web-dev-qa-db-fra.com

L'application Spring Boot peut-elle gérer plusieurs demandes simultanément?

Je développe des API Rest avec Spring Boot qui est déployé sur AWS Beanstalk. Potentiellement, le service recevra des hits de milliers de clients chaque jour. Par conséquent, j'aimerais comprendre la capacité de Spring Boot à gérer plusieurs demandes.

D'après ce que j'ai lu dans Spring-Boot: gérer plusieurs demandes simultanément et Comment avoir un contrôleur thread-safe dans Spring Boot , il semble que Spring Boot puisse gérer les demandes simultanément pendant que le contrôleur est thread sûr.

Si deux demandes sont effectuées au même point de terminaison pour des mises à jour en même temps, le contrôleur traite-t-il les demandes l'une après l'autre ou simultanément avec deux threads en parallèle? Dans ce dernier cas, chaque thread a-t-il son propre gestionnaire d'entités? Existe-t-il un moyen d'implémenter un pool de threads pour limiter le nombre de threads en fonction de la capacité de l'instance EC2? Soit dit en passant, comment puis-je décider de la taille d'une instance avec laquelle je dois commencer en fonction du volume estimé de demandes?

12
ddd

Oui, Spring Boot peut gérer simultanément les demandes! Vous pouvez limiter le nombre de demandes simultanées en ajoutant server.Tomcat.max-threads à ton application.properties ou application.yml. Spring va gérer un pool de connexions et gérer la distribution des gestionnaires d'entités (selon le minimum et le maximum de connexions que vous spécifiez dans vos propriétés). Je pense que vous pouvez en savoir plus ici: Quand les connexions sont-elles retournées au pool de connexions avec Spring JPA (Hibernate) Entity Manager?

13
Felipe Mariano

Si vous développez des applications Web avec Spring Boot (je veux dire que vous avez inclus la dépendance de spring-boot-starter-web dans votre fichier pom), Spring incorporera automatiquement le conteneur Web (Tomcat par défaut) et il peut gérer les demandes simultanément, tout comme les conteneurs Web courants.

Et vous pouvez également changer le conteneur Web par défaut de Tomcat en Undertow ou Jetty en modifiant les dépendances.

Comme l'a dit @Felipe Mariano, vous pouvez limiter la quantité maximale de threads de travail pour différents conteneurs Web dans votre fichier de configuration ci-dessous.
(1) Pour Tomcat: server.Tomcat.max-threads
(2) Pour Undertow: server.undertow.worker-threads
(3) Pour Jetty: server.jetty.acceptors

3
LHCHIN

Il y a un conteneur de servlet créé pour chaque demande si j'ai raison et est traité par chaque nouveau thread généré séparément, donc techniquement chaque demande est traitée en parallèle. Vous devez configurer le nombre maximal de threads dans le fichier de propriétés de l'application. En fonction de votre configuration, le pool de threads sera pris en charge par Spring Framework. Merci

0
Maiden