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

5 мин чтения

Retry with Backoff: почему повторять запрос сразу — иногда худшее решение

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

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

Повторить запрос логично. Повторить его мгновенно и много раз — уже нет.

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

Retry позволяет автоматически повторить временно неудачную операцию. Backoff добавляет паузу между попытками, часто увеличивая её после каждой ошибки.

Цель — пережить краткий сбой и одновременно дать проблемной системе время восстановиться.

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

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

Для бизнеса ценность — меньше клиентских ошибок из-за кратких технических проблем.

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

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

Это особенно важно для платежей, заказов, интеграций и фоновых процессов, где краткая недоступность внешней системы — нормальная реальность.

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

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

Backoff, jitter и ограничения количества попыток помогают не создавать синхронные волны повторных запросов.

Но retries требуют идемпотентности. Если повтор операции может создать второй платёж или заказ, автоматический retry становится опасным.

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

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

Но бесконечные повторы вредят и ему: вместо быстрой понятной ошибки интерфейс может просто зависнуть на минуту. Поэтому retry должен иметь предел.

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

Цена — дополнительная нагрузка и более сложное поведение во время аварий.

Нужно понимать, какие ошибки временные, сколько попыток допустимо и сколько времени клиент готов ждать.

Плохо настроенный retry способен умножить нагрузку в несколько раз именно тогда, когда системе хуже всего.

Когда retry не нужен

Не стоит повторять ошибки, которые явно не исчезнут со временем: неверный запрос, отсутствие прав или нарушение бизнес-правила.

Повтор без понимания причины — это не надёжность, а дополнительный шум.

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

В итоге

Retry полезен не потому, что «нужно пробовать ещё раз», а потому, что распределённые системы регулярно сталкиваются с краткими сбоями.

Для бизнеса хороший retry скрывает короткую проблему. Плохой retry помогает маленькой проблеме стать большой.