Какие проблемы возникают при увеличении таймаута PDF сервиса
Что проверяют
Понимаете ли вы, что таймаут это не ручка «сделать, чтобы не падало», а граница, которая защищает весь сервис. Интервьюеру важно, видите ли вы связь между временем ожидания, пулами потоков и соединений и каскадными отказами. Следом обычно спрашивают, что бы вы сделали вместо увеличения таймаута.
Как отвечать
Начните с механики: пока запрос ждёт PDF, он держит ресурсы. Увеличили таймаут, и каждый медленный запрос держит их дольше.
- пул потоков: у Tomcat в Spring Boot по умолчанию 200 рабочих потоков (
server.tomcat.threads.max). Если генерация длится десятки секунд, пара сотен одновременных запросов выедает пул, и сервис перестаёт отвечать даже на health-check; - пул соединений: HTTP-клиент к PDF-сервису и HikariCP к базе (по умолчанию 10 соединений) кончаются раньше потоков, остальные запросы копятся в очереди;
- память: генерация держит в heap документ, шрифты и картинки. Больше долгих параллельных запросов, выше пик памяти и риск
OutOfMemoryError; - несогласованные таймауты: если у nginx или балансировщика 60 секунд, а у вас теперь 120, клиент получит 504, а сервер продолжит работать впустую. Таймаут вызывающего должен быть больше таймаута вызываемого;
- ретраи: клиент не дождался ответа и повторил запрос, и нагрузка на медленный сервис растёт ровно тогда, когда он и так не справляется.
Затем предложите альтернативы: асинхронная генерация через очередь (ответ 202 с id задачи, результат забирают по готовности или получают вебхуком), кэш готовых документов, отдельный bulkhead-пул под PDF, circuit breaker в Resilience4j. Виртуальные потоки Java 21 снимают проблему нехватки потоков, но не памяти и не соединений.
Где спотыкаются
Говорят только о пользователе, который будет дольше ждать, и не упоминают исчерпание пулов. А это главная техническая проблема, её ждут в первую очередь.
Называют «утечки памяти» следствием таймаута. Таймаут утечек не создаёт, он поднимает пиковое потребление.
Не спрашивают, почему сервис вообще стал медленным. Увеличение таймаута лечит симптом: сначала метрики (p95 и p99 времени генерации, длина очереди, занятость пула), потом решение.