Масштабирование и надёжность

4 мин чтения

Timeouts и Deadlines: почему сервис не должен ждать бесконечно

Медленная зависимость часто опаснее явной ошибки: она удерживает ресурсы, накапливает очередь и заставляет весь продукт ждать. Timeouts и deadlines задают предел ожиданию.

Какую проблему мы решаем

Если сервис вызывает другую систему без ограничения по времени, один медленный компонент удерживает соединения, workers и память остальных. Под нагрузкой это легко превращается в каскадную деградацию. Ещё хуже, когда каждый слой выдаёт следующему новый полный timeout и общий путь запроса оказывается намного длиннее обещанного клиенту.

Как работает решение

Timeout ограничивает конкретный вызов. Deadline задаёт время, к которому должна завершиться вся операция, а при propagation оставшийся бюджет передаётся дальше. Нижний сервис понимает, что продолжать дорогую работу бессмысленно, если верхний уровень уже не успеет использовать результат. После timeout нужен явный сценарий: retry, fallback, частичный ответ или контролируемый отказ.

Что получает бизнес

Бизнес получает ограниченный радиус медленных зависимостей и более предсказуемый клиентский сценарий. Появляется возможность сознательно выбирать, сколько времени компания готова ждать ради более полного результата и где лучше вернуть упрощённый ответ.

Что получает команда

Команда получает общий бюджет времени для цепочки вызовов. Это помогает проектировать retries и fallback без случайного умножения latency. Метрики timeout становятся сигналом качества зависимости раньше, чем исчерпаются ресурсы.

Что получает клиент

Клиент получает более предсказуемое время ответа. Контролируемый отказ или частичный результат часто лучше бесконечного ожидания.

Чем мы за это платим

Слишком короткие timeouts создают ложные ошибки и лишние retries, слишком длинные — не защищают систему. Deadline propagation требует поддержки в протоколах и договорённости о том, как делить latency budget между слоями.

Когда не нужно усложнять

Почти любой удалённый вызов должен иметь конечное время ожидания. Сложная deadline-политика особенно важна для длинных синхронных цепочек и сценариев, где latency прямо влияет на клиента.

Что стоит спросить перед решением

В итоге

Timeout — это граница того, сколько времени и ресурсов бизнес готов потратить на попытку. Deadlines превращают ожидание из случайности в управляемый бюджет клиентского времени.