Может ли приложение Spring Boot обрабатывать несколько запросов одновременно?

Я занимаюсь разработкой Rest API с Spring Boot, который развернут на AWS Beanstalk. Потенциально, сервис будет получать хиты от тысяч клиентов каждый день. Поэтому я хотел бы понять способность Spring Boot обрабатывать несколько запросов.

Из того, что я прочитал в Spring-Boot: Обработка нескольких запросов одновременно и Как обеспечить потокобезопасный контроллер при весенней загрузке, кажется, что Spring Boot может обрабатывать запросы одновременно, в то время как контроллер является поточно-ориентированным.

Если в одну и ту же конечную точку одновременно поступают два запроса на обновления, обрабатывает ли контроллер запросы один за другим или одновременно два параллельных потока? Если последнее, имеет ли каждый поток свой собственный менеджер сущностей? Есть ли способ реализовать пул потоков, чтобы ограничить количество потоков в зависимости от емкости экземпляра EC2? Кстати, как мне решить, с какого большого экземпляра мне следует начать, основываясь на предполагаемом количестве запросов?

2 ответа

Решение

Да, Spring boot может одновременно обрабатывать запросы! Вы можете ограничить количество одновременных запросов, добавив server.tomcat.max-threads на ваш application.properties или же application.yml, Spring будет управлять пулом соединений и обрабатывать распределение менеджеров сущностей (в соответствии с минимальным и максимальным количеством соединений, указанным в ваших свойствах). Я полагаю, что вы можете прочитать больше об этом здесь: Когда соединения возвращаются в пул соединений с помощью Spring JPA (Hibernate) Entity Manager?

Если вы разрабатываете веб-приложения с Spring Boot (я имею в виду, что вы включили зависимость spring-boot-starter-web в ваш файл pom), Spring автоматически вставит веб-контейнер (по умолчанию Tomcat) и может обрабатывать запросы одновременно, как обычные веб-контейнеры.

Также вы можете изменить веб-контейнер по умолчанию с Tomcat на Undertow или Jetty, изменив зависимости.

Как сказал @Felipe Mariano, вы можете ограничить максимальное количество рабочих потоков для разных веб-контейнеров в файле конфигурации ниже.
(1) Для Tomcat: server.tomcat.max-threads
(2) для нижней части: server.undertow.worker-threads
(3) Для причала: server.jetty.acceptors

Если я прав, для каждого запроса создается контейнер сервлета, который обрабатывается каждым отдельным новым порожденным потоком, поэтому технически каждый запрос обрабатывается параллельно. Вам необходимо настроить максимальное количество потоков в файле свойств приложения. В зависимости от ваших конфигураций пул потоков будет заботиться Spring Framework . Спасибо