DEV//UNIT
← АлгоритмыReal-world Development

Экспоненциальный backoff

Ретраи с растущей задержкой и джиттером: 2^n с рандомом.

время O(попыток)память O(1)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1async function retryWithBackoff(
2 fn: () => Promise<void>,
3 baseMs = 200,
4 maxAttempts = 5,
5): Promise<void> {
6 const jitter = () => 0.5 + Math.random() * 0.5 // 50–100%
7
8 for (let attempt = 1; attempt <= maxAttempts; attempt++) {
9 try {
10 await fn()
11 return
12 } catch (e) {
13 if (attempt === maxAttempts) throw e
14 const delay = baseMs * 2 ** (attempt - 1) * jitter()
15 await new Promise((r) => setTimeout(r, delay))
16 }
17 }
18}

Проблема

Ретраи с растущей задержкой и джиттером: 2^n с рандомом.

Что вы видите

Таймлайн попыток: паузы удваиваются, джиттер разводит клиентов.

Как это работает

Сбой — не повод DDoS-ить сервер ретраями. Экспоненциальный рост + джиттер (разводящий клиентов) — стандарт retry-политик, gRPC, AWS SDK.

Пошаговый разбор

  1. 01

    Задержка

    base · 2^attempt · jitter.

  2. 02

    Джиттер

    0.5–1: клиенты не синхронны.

  3. 03

    Кап

    Максимум попыток — и вверх по ошибке.

Complexity и ограничения

time
O(попыток)
space
O(1)

См. complexity в шапке страницы.

Edge cases

  • Пустой вход

    Корректно завершается без лишних шагов.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Продукт

Классический приём в реальных системах.

Собеседования

Стандартный вопрос на понимание структуры.

Связанные алгоритмы

Shorts

«Ошибка? Подожди. Ещё ошибка? Подожди дольше»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Ошибка? Подожди. Ещё ошибка? Подожди дольше
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/backoff