Выбор ответа Senior Spring MVC и REST обновлено

Медленный внешний вызов в контроллере

Вопрос

Каждый запрос к эндпоинту ждёт внешний сервис 10 секунд, пул Tomcat 200 потоков. Что произойдёт при 300 одновременных запросах?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Потоки кончатся, и сервис перестанет отвечать даже на быстрое. Spring MVC работает по модели «поток на запрос», и блокирующий вызов держит поток всё время ожидания.

Варианты ответа

  1. Spring автоматически вынесет блокирующие вызовы в асинхронный пул
  2. Tomcat создаст ещё 100 потоков сверх лимита на время пика
  3. Лишние 100 запросов сразу получат от Spring ответ 503
  4. Потоки кончатся, и сервис перестанет отвечать даже на быстроеправильный ответ

Разбор

Spring MVC работает по модели «поток на запрос», и блокирующий вызов держит поток всё время ожидания. Когда пул исчерпан, новые соединения ждут в очереди (accept-count), в том числе запросы health-check, и сервис выглядит мёртвым. Автоматического выноса нет, лимит потоков не превышается, 503 сам Spring не выдаёт. Лечение: таймауты и circuit breaker на клиенте, отдельный пул или виртуальные потоки, асинхронная обработка.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.