ПочатиПочніть безкоштовно

Реалізація експоненційного відступу з джиттером

Ви інтегруєтеся з ненадійним стороннім API платежів, який іноді повертає тимчасові помилки. Щоб не навантажувати сервіс, коли він і так „задихається", ви реалізуєте стратегію повторних спроб з експоненційним відступом і повним джиттером: інтервал між спробами зростає, а випадковість допомагає уникнути ситуації, коли ціла хвиля клієнтів повторює запит одночасно.

Доступна функція flaky_call(payload): вона завершується з TransientError у перших 3 викликах, а на 4-му — успішна. time, random і TransientError уже імпортовано.

Ця вправа є частиною курсу

Розроблення застосунків на AWS

Переглянути курс

Інструкції до вправи

  • У блоці try викличте flaky_call з payload і поверніть результат.
  • Обчисліть експоненційну верхню межу для цієї спроби, використавши base і поточне значення лічильника attempt.
  • Застосуйте повний джиттер: виберіть випадковий час очікування між 0 та cap за допомогою random.uniform().

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

def retry_with_backoff(payload, max_attempts=5, base=0.2):
    last_error = None
    for attempt in range(max_attempts):
        try:
            # Try the call
            return ____(payload)
        except TransientError as err:
            last_error = err
            # Cap grows exponentially with each attempt
            cap = ____ * (2 ** attempt)
            # Pick a random wait between 0 and cap (full jitter)
            wait = random.____(0, cap)
            time.sleep(wait)
    # All attempts failed; surface the last error
    raise last_error


result = retry_with_backoff({"order_id": 42})
print(result)
Редагувати та запускати код