Масштабирование Spring MVC

173
23 апреля 2018, 00:01

Добрый день. Может немного глупый вопрос, но все же задам. Допустим, есть стандартная конфигурация Spring MVC приложения (как из примеров в интернете) с одним DispatcherServlet:

<web-app>
  <display-name>My application</display-name>
  <servlet>
    <servlet-name>web</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>web</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

За ним есть один @Controller, и один @Service , в котором производится некая работа, которая занимает, допустим, 2 секунды. Как будет вести себя приложение, если одновременно к нему придет 10 одинаковых запросов? Все запросы будут обрабатываться последовательно? Или для каждого запроса будет создан отдельный экземпляр DispatcherServlet и контекст бинов? Спасибо.

Answer 1

Web-контейнер имеет пул потоков для обработки запросов. На каждый запрос из пула берётся поток и в нём запускается метод контроллера. По умолчанию все последующие вызовы из этого метода будут выполняться в том же потоке. Если запросов поступает больше, чем есть потоков в пуле, запросы встают в очередь и ждут освобождения одного из потоков. Для пользователя это выглядит как медленно отвечающий сайт. Если очередь переполняется, клиенты начинают получать ошибку 502. Поэтому тяжёлые задачи стоит запускать в отдельном пуле потоков или вовсе переложить на фоновый процесс. Первое в Spring очень легко делается - достаточно пометить тяжёлый метод аннотацияей @Async. А DispatcherServlet и контекст создаётся единожды - при запуске web-приложения, обычно в момент запуска сервера.

READ ALSO
MySQL индексы, помогите разобраться

MySQL индексы, помогите разобраться

Есть простая таблица:

186
Выборка с бд Mysql с динамическим именем таблицы

Выборка с бд Mysql с динамическим именем таблицы

Подскажите пожалуйстаНужно сделать выборку с бд при это название таблицы, откуда делается выборка, образуется исходя из префикса таблицы...

183
Выборка по двум условиям mysql

Выборка по двум условиям mysql

Есть две таблицы, они связаны между собой один ко многимТаблица client содержит первичный ключ ID, а таблица orders содержит внешний ключ ID_of_client

192
MySQL + изображение

MySQL + изображение

Какой тип данных выбрать при составлении таблицы MySQL, для того чтобы можно было сохранять в нее изображения?

197