재시도 동작 - AWS SDK 및 도구

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

재시도 동작

재시도 동작에는 SDK가 AWS 서비스에 보내진 요청으로 인한 장애 복구를 시도하는 방법에 대한 설정이 포함됩니다.

다음을 사용하여 이 기능을 구성하십시오.

max_attempts- 공유 AWS config 파일 설정
AWS_MAX_ATTEMPTS - 환경 변수
aws.maxAttempts- JVM 시스템 속성: 자바/코틀린 전용

요청에 대한 최대 시도 횟수를 지정합니다.

기본값: 이 값이 지정되지 않은 경우 기본값은 retry_mode 설정 값에 따라 달라집니다.

  • retry_modelegacy 인 경우— 사용자 SDK 고유의 기본값을 사용합니다(사용자 고유 SDK 설명서 또는 max_attempts 기본 SDK의 코드베이스를 확인하십시오).

  • retry_modestandard인 경우 — 세 번 시도합니다.

  • retry_modeadaptive인 경우 — 세 번 시도합니다.

유효한 값: 0보다 큰 숫자.

retry_mode AWS config- 공유 파일 설정
AWS_RETRY_MODE - 환경 변수
aws.retryMode- JVM 시스템 속성: 자바/코틀린 전용

SDK 또는 개발자 도구의 재시도 방법을 지정합니다.

기본값: legacy가 기본 재시도 전략입니다.

유효값:

  • legacy —사용자 SDK에 고유한 값(사용자 고유 SDK 설명서 또는 기본 SDK의 코드베이스를 확인하십시오).

  • standard — 전체 AWS SDK의 표준 재시도 규칙 세트. 이 모드에는 재시도되는 표준 오류 설정과 재시도 할당량 지원이 포함되어 있습니다. 명시적으로 max_attempts으로 구성되어 있지 않으면 이 모드의 기본 최대 시도 횟수는 3회입니다.

  • adaptive - 표준 모드의 기능을 포함하지만 자동 클라이언트 측 제한도 포함하는 실험용 재시도 모드입니다. 이 모드는 실험용이므로 향후 동작이 변경될 수 있습니다.

다음은 standard 모드와 adaptive 모드 모두에 대한 고급 의사코드입니다.

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

다음은 의사코드에 사용되는 구성 요소에 대한 자세한 내용입니다.

GetSendToken:

토큰 버킷은 adaptive 재시도 모드에서만 사용됩니다. 토큰 버킷은 요청을 시작하는 데 토큰을 사용할 수 있도록 요구함으로써 최대 요청 비율을 적용합니다. SDK 클라이언트는 요청을 빠르게 중단시키거나 토큰 사용이 가능할 때까지 요청을 차단하도록 구성할 수 있습니다.

클라이언트측 속도 제한은 처음부터 원하는 속도를 토큰 허용량까지 요청을 할 수 있도록 하는 알고리즘입니다. 하지만 병목 현상이 감지된 후에는 그에 따라 클라이언트가 제한됩니다. rate-of-request 응답이 성공적으로 수신되면 토큰 허용량도 그에 따라 증가합니다.

적응형 속도 제한을 사용하면 SDK가 요청 전송 속도를 늦춰 요청 용량을 더 잘 수용할 수 있습니다. AWS 서비스

SendHTTPRequest:

대부분의 AWS SDK는 연결 풀을 사용하는 HTTP 라이브러리를 사용하므로 HTTP 요청 시 기존 연결을 재사용할 수 있습니다. 일반적으로 조절 오류로 인해 요청의 재시도 시 연결을 재사용합니다. 일시적 오류로 인한 재시도 때는 요청이 재사용되지 않습니다.

RequestBookkeeping:

요청이 성공하면 재시도 할당량을 업데이트해야 합니다. adaptive재시도 모드의 경우에만 상태 변수maxsendrate는 수신된 응답 유형에 따라 업데이트됩니다.

Retryable:

이 단계에서는 다음을 기반으로 응답을 재시도할 수 있는지 여부를 결정합니다.

  • HTTP 상태 코드 .

  • 서비스에서 반환된 오류 코드입니다.

  • 연결 오류로, 서비스로부터 HTTP 응답을 받지 못한 SDK에서 수신한 모든 오류로 정의됩니다.

일시적 오류(HTTP 상태 코드 400, 408, 500, 502, 503, 504)와 조절 오류(HTTP 상태 코드 400, 403, 429, 502, 503, 509)는 모두 재시도될 수 있습니다. SDK 재시도 동작은 서비스의 오류 코드 또는 서비스의 기타 데이터와 조합하여 결정됩니다.

MAX_ATTEMPTS:

config 파일 설정 또는 환경 변수로 지정합니다.

HasRetryQuota

이 단계에서는 재시도 할당량 버킷에서 토큰을 사용할 수 있도록 요구하여 재시도 요청을 제한합니다. 재시도 할당량 버킷은 성공할 가능성이 낮은 재시도를 방지하는 메커니즘입니다. 이러한 할당량은 SDK에 따라 달라지고 클라이언트에 따라 달라지는 경우가 많으며 때로는 서비스 엔드포인트에 따라 달라지기도 합니다. 다양한 이유로 요청이 실패하면 사용 가능한 재시도 할당량 토큰은 제거되고 요청이 성공하면 보충됩니다. 토큰이 남아 있지 않으면 재시도 루프가 종료됩니다.

ExponentialBackoff

재시도할 수 있는 오류의 경우 잘린 지수 백오프를 사용하여 재시도 지연을 계산합니다. SDK는 지터가 있는 잘린 이진 지수 백오프를 사용합니다. 다음 알고리즘은 요청에 대한 응답의 절전 시간(초)이 어떻게 정의되는지 보여줍니다. i

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

위 알고리즘에는 다음 값이 적용됩니다.

b = random number within the range of: 0 <= b <= 1

r = 2

대부분의 SDK용 MAX_BACKOFF = 20 seconds. 사용자 특정 SDK 가이드 또는 소스 코드를 참조하여 확인합니다.

SDK와의 호환성 AWS

다음 SDK는 이 주제에서 설명하는 기능 및 설정을 지원합니다. 모든 일부 예외가 기록됩니다. 모든 JVM 시스템 속성 설정은 AWS SDK for Java 및 에서만 지원됩니다. AWS SDK for Kotlin

SDK 지원 참고 또는 추가 정보
AWS CLI v2
SDK for C++
SDK for Go V2 (1.x)
SDK for Go 1.x (V1) 아니요
SDK for Java 2.x
SDK for Java 1.x
3.x용 SDK JavaScript
2.x용 SDK JavaScript 아니요 최대 재시도 횟수, 지터가 있는 지수 백오프, 재시도 백오프를 위한 사용자 지정 방법 옵션을 지원합니다.
SDK for Kotlin
SDK for .NET 3.x
SDK for PHP 3.x
SDK for Python (Boto3)
SDK for Ruby 3.x
SDK for Rust
다음을 위한 도구 PowerShell