🟡 Средний · 2 очк. Паттерны проектирования
Чем полезен retry с exponential backoff при вызовах внешних сервисов?
A Повторные попытки с увеличивающейся задержкой снижают нагрузку на восстанавливающийся сервис
B Повтор с постоянной задержкой между попытками
C Экспоненциальное увеличение числа горутин при ошибках
D Паттерн для экспоненциального роста буфера канала
Объяснение вопроса

Retry с exponential backoff - стратегия повторных попыток, при которой задержка растет (часто удваивается): 1s, 2s, 4s, обычно с верхним пределом и случайным джиттером.

func retryWithBackoff(ctx context.Context, maxAttempts int, fn func() error) error {
    backoff := time.Second
    for i := 0; i < maxAttempts; i++ {
        if err := fn(); err == nil { return nil }
        select {
        case <-ctx.Done(): return ctx.Err()
        case <-time.After(backoff): backoff *= 2
            if backoff > 30*time.Second { backoff = 30 * time.Second }
        }
    }
    return errors.New("max attempts exceeded")
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.