Получить доступ

Почему у каждого вызова внешнего сервиса должен быть таймаут?

JuniorУстойчивость и наблюдаемостьSpring
Ещё спрашивают так:
  • Что будет без таймаута на HTTP-вызов?
Коротко

Без ограничения ожидание держит поток и соединение бесконечно: зависшая зависимость занимает все потоки, и ваш сервис перестаёт отвечать — чужая медлительность становится вашим отказом.

  • Таймаут соединения и таймаут чтения — отдельно
  • По умолчанию у многих клиентов таймаута нет или он огромный
  • Значение — по реальной задержке зависимости

А ещё Вместе с таймаутом — повторы с отсрочкой и circuit breaker

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Отказ редко выглядит как быстрая ошибка — гораздо чаще зависимость начинает отвечать медленно. Каждый такой вызов занимает поток и соединение из пула; когда пул исчерпан, сервис перестаёт обслуживать даже те запросы, которым эта зависимость не нужна. Так работает каскадный отказ. Разумно задавать отдельно короткий таймаут на установку соединения и таймаут на чтение ответа, исходя из реального профиля задержек, и следить, чтобы он укладывался в бюджет времени вызывающего.

Что хотят услышать

  • Последствия отсутствия таймаута.

Частые ошибки

  • Полагаться на умолчания HTTP-клиента, где таймаут может отсутствовать.
  • Ставить таймаут больше, чем готов ждать вызывающий.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Иначе зависший вызов бесконечно удерживает поток и соединение, и при массовых зависаниях сервис исчерпает ресурсы и упадёт сам
  • ✗Иначе внешний сервис не сможет обработать запрос
  • ✗Таймаут ускоряет ответ внешнего сервиса
  • ✗Таймаут нужен только при обращении к базе данных

Что спросят дальше

  • Что такое бюджет времени и как он убывает по цепочке?
  • Как таймауты сочетаются с повторами?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем