Почему у каждого вызова внешнего сервиса должен быть таймаут?
- Что будет без таймаута на HTTP-вызов?
Без ограничения ожидание держит поток и соединение бесконечно: зависшая зависимость занимает все потоки, и ваш сервис перестаёт отвечать — чужая медлительность становится вашим отказом.
- Таймаут соединения и таймаут чтения — отдельно
- По умолчанию у многих клиентов таймаута нет или он огромный
- Значение — по реальной задержке зависимости
А ещё Вместе с таймаутом — повторы с отсрочкой и circuit breaker
Подробно
Отказ редко выглядит как быстрая ошибка — гораздо чаще зависимость начинает отвечать медленно. Каждый такой вызов занимает поток и соединение из пула; когда пул исчерпан, сервис перестаёт обслуживать даже те запросы, которым эта зависимость не нужна. Так работает каскадный отказ. Разумно задавать отдельно короткий таймаут на установку соединения и таймаут на чтение ответа, исходя из реального профиля задержек, и следить, чтобы он укладывался в бюджет времени вызывающего.
Что хотят услышать
- Последствия отсутствия таймаута.
Частые ошибки
- Полагаться на умолчания HTTP-клиента, где таймаут может отсутствовать.
- Ставить таймаут больше, чем готов ждать вызывающий.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Иначе внешний сервис не сможет обработать запрос и вернёт ошибку соединения клиенту
- ✓Иначе зависшие вызовы бесконечно держат потоки и соединения, и сервис падает сам
- ✗Таймаут ускоряет ответ внешнего сервиса
- ✗Таймаут нужен только при обращении к базе данных
Что спросят дальше
- Что такое бюджет времени и как он убывает по цепочке?
- Как таймауты сочетаются с повторами?
Разбор темы
- Resilience: таймауты, ретраи и circuit breaker
Защита от каскадных отказов: таймауты, безопасные ретраи, состояния circuit breaker, bulkhead и rate limiter, fallback и порядок паттернов.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.