Выбор ответа Senior Spring MVC и REST обновлено
Медленный внешний вызов в контроллере
Вопрос
Каждый запрос к эндпоинту ждёт внешний сервис 10 секунд, пул Tomcat 200 потоков. Что произойдёт при 300 одновременных запросах?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Потоки кончатся, и сервис перестанет отвечать даже на быстрое. Spring MVC работает по модели «поток на запрос», и блокирующий вызов держит поток всё время ожидания.
Варианты ответа
- Spring автоматически вынесет блокирующие вызовы в асинхронный пул
- Tomcat создаст ещё 100 потоков сверх лимита на время пика
- Лишние 100 запросов сразу получат от Spring ответ 503
- Потоки кончатся, и сервис перестанет отвечать даже на быстроеправильный ответ
Разбор
Spring MVC работает по модели «поток на запрос», и блокирующий вызов держит поток всё время ожидания. Когда пул исчерпан, новые соединения ждут в очереди (accept-count), в том числе запросы health-check, и сервис выглядит мёртвым. Автоматического выноса нет, лимит потоков не превышается, 503 сам Spring не выдаёт. Лечение: таймауты и circuit breaker на клиенте, отдельный пул или виртуальные потоки, асинхронная обработка.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.