Почему таймаут называют основой устойчивости, и каким он должен быть относительно таймаута вызывающего?
- Как выбирать таймауты в цепочке сервисов?
Вызов без таймаута держит поток и соединение бесконечно — медленная зависимость становится вашим отказом. Бюджет времени убывает вниз по цепочке: таймаут вызываемого меньше таймаута вызывающего.
- Иначе нижний сервис работает над запросом, который верхний уже бросил
- Отдельно таймаут соединения и чтения; в RestClient и WebClient — явно
- Значение — от наблюдаемого p99.9 зависимости, а не «30 секунд»
А ещё Лучше передавать дедлайн вниз (gRPC deadline, заголовок)
Подробно
Отказ редко выглядит как быстрый отказ — гораздо чаще сервис отвечает медленно. Без таймаута каждый такой вызов держит поток и соединение, пул исчерпывается, и падает уже ваш сервис, а за ним и его клиенты: так работает каскад. Различайте два таймаута: на установку соединения (короткий, доли секунды) и на чтение ответа (по реальному профилю задержек, обычно ориентируясь на верхний перцентиль плюс запас). Ключевая идея — бюджет времени: если вызывающий готов ждать три секунды, а вы ждёте пять, ваш таймаут бесполезен, потому что клиент уйдёт раньше, а вы продолжите удерживать ресурсы. Поэтому таймауты уменьшаются вниз по цепочке, и в этот же бюджет должны укладываться повторы.
Что хотят услышать
- Почему таймаут обязателен.
- Убывающий бюджет по цепочке.
- Как выбирать значение.
Частые ошибки
- Оставлять умолчания HTTP-клиента, где таймаута может не быть вовсе.
- Складывать повторы поверх таймаута, не проверив общий бюджет.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Зависший вызов держит поток вечно; таймаут должен уложиться в бюджет вызывающего
- ✗Таймаут должен быть больше, чем у вызывающего, чтобы успеть дождаться ответа зависимости
- ✗Таймаут нужен только для ускорения ответа, на устойчивость он не влияет
- ✗Достаточно таймаута на уровне балансировщика, в коде он не нужен
Что спросят дальше
- Чем connect timeout отличается от read timeout?
- Как таймауты связаны с bulkhead?
Разбор темы
- Resilience: таймауты, ретраи и circuit breaker
Защита от каскадных отказов: таймауты, безопасные ретраи, состояния circuit breaker, bulkhead и rate limiter, fallback и порядок паттернов.
Связанные вопросы
- Как правильно настраивать таймауты и повторы запросов? Middle
- Почему у каждого вызова внешнего сервиса должен быть таймаут? Junior
- Внешний платёжный провайдер начал отвечать за 30 секунд вместо 200 миллисекунд. Через минуту сервис перестал отвечать вообще, включая страницы, не связанные с оплатой. Что произошло? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.