Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can Spring Boot application handle multiple requests simultaneously?

I am developing Rest APIs with Spring Boot which is deployed on AWS Beanstalk. Potentially, the service will be getting hits from thousands of clients every day. Therefore I would like to understand capability of Spring Boot of handling multiple requests.

From what I read in Spring-Boot: Handle multiple requests concurrently and How to have thread safe controller in spring boot, it seems Spring Boot can handle requests concurrently while controller being thread safe.

If two requests are made to the same endpoint for updates at the same time though, does the controller deal with the requests one after another or simultaneously with two threads in parallel? If latter, does each thread has its own entity manager? Is there a way to implement a thread pool to limit the number of threads based on the capacity of the EC2 instance? By the way, how do I decide how big of an instance should I start with based on the estimated volumn of requests?

like image 250
ddd Avatar asked Oct 23 '17 15:10

ddd


People also ask

How does Spring boot handle 1000 requests per second?

To handle high traffic, you should setup Load Balancer with multiple node/instances. Better to go with Auto Scaling on Cloud server. It will increase the instances as per high load (number or request) and again decrease the instances when there will be low number of requests. Which is cost effective.

How does singleton bean serve multiple requests at the same time in Spring?

and in spring, the beans are singleton by default. so the first request begins to execute a method of your singleton bean, and before it is finished, an another request comes and it executes the same method by using another thread.


1 Answers

Yes, Spring boot can handle simultaneously requests! If your servlet container is tomcat under the hood, it can handle 200 simultaneous requests.

Below snippet highlights the point, but refer original spring boot source

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) public class ServerProperties {   public static class Tomcat {      public static class Threads {        private int max = 200; // Maximum amount of worker threads      }   } } 

However, you can override this value by adding server.tomcat.threads.max to your application.properties or application.yml.

Spring will manage a pool of connections and handle the distribution of entity managers (according to the minimum and maximum of connections you specify in your properties). I believe you can read more about it here: When are connections returned to the connection pool with Spring JPA (Hibernate) Entity Manager?

like image 74
Felipe Mariano Avatar answered Sep 22 '22 08:09

Felipe Mariano