시작하기무료로 시작하기

지터를 활용한 지수 백오프 구현

간헐적으로 일시적 오류를 반환하는 불안정한 서드파티 결제 API와 통합 작업을 진행 중입니다. 서비스가 이미 과부하 상태일 때 요청이 폭주하는 것을 방지하기 위해, 완전 지터(full jitter)를 적용한 지수 백오프 재시도 전략을 구현할 것입니다. 이 전략은 재시도 간격을 점진적으로 늘리면서 무작위성을 추가하여, 여러 클라이언트가 동시에 재시도하는 상황(thundering herd)을 방지합니다.

flaky_call(payload) 함수가 제공됩니다. 이 함수는 처음 3번의 호출에서 TransientError로 실패하고, 4번째 호출에서 성공합니다. time, random, TransientError는 이미 로드되어 있습니다.

이 연습은 강의의 일부입니다

AWS에서 애플리케이션 개발하기

강의 보기

연습 안내

  • try 블록 안에서 payload를 인수로 flaky_call을 호출하고 결과를 반환하세요.
  • base와 현재 attempt 횟수를 사용하여 이번 시도의 지수 상한값(cap)을 계산하세요.
  • random.uniform()을 사용해 0cap 사이의 무작위 대기 시간을 선택하여 완전 지터를 적용하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

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)
코드 편집 및 실행