재시도 동작 - AWS SDKs및 도구

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

재시도 동작

재시도 동작에는 에 대한 요청으로 인한 실패 복구 SDKs 시도 방법에 대한 설정이 포함됩니다. AWS 서비스

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

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

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

기본값: 이 값은 사용자 SDK 고유의 값입니다. 특정 SDK 가이드 또는 사용 중인 코드베이스에서 기본값을 확인하세요retry_mode. SDK

유효한 값:

  • standard— (권장) 전체 AWS SDKs 권장 재시도 규칙 세트. 이 모드에는 재시도되는 표준 오류 집합이 포함되며 가용성과 안정성을 극대화하기 위해 재시도 횟수를 자동으로 조정합니다. 이 모드는 멀티테넌트 애플리케이션에서 사용하기에 안전합니다. 명시적으로 max_attempts으로 구성되어 있지 않으면 이 모드의 기본 최대 시도 횟수는 3회입니다.

  • adaptive— 표준 모드의 기능과 자동 클라이언트 측 속도 제한을 포함하는 재시도 모드로서, 특수한 사용 사례에만 적합합니다. 애플리케이션 테넌트를 분리하는 데 주의를 기울이지 않는 한 멀티 테넌트 애플리케이션에는 이 재시도 모드를 사용하지 않는 것이 좋습니다. 자세한 내용은 모드 선택 standard 및 adaptive 재시도 모드 섹션을 참조하세요. 이 모드는 실험용이며 향후 동작이 변경될 수 있습니다.

  • legacy— (권장되지 않음) 해당 SDK 사용자에게만 해당됩니다 (특정 SDK 가이드 또는 해당 SDK 코드베이스 확인).

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

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

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

  • retry_modeIf is legacy — 사용자 고유의 기본값을 사용합니다 SDK (기본값은 특정 SDK 가이드 또는 해당 코드베이스를 확인하세요). SDK max_attempts

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

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

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

모드 선택 standardadaptive 재시도 모드

용도에 더 적합하다고 확신할 수 없는 경우가 아니면 standard 재시도 모드를 사용하는 것이 좋습니다. adaptive

참고

adaptive 모드에서는 백엔드 서비스가 요청을 제한할 수 있는 범위를 기반으로 클라이언트를 풀링한다고 가정합니다. 이렇게 하지 않으면 두 리소스에 동일한 클라이언트를 사용하는 경우 한 리소스의 병목 현상으로 인해 관련 없는 리소스에 대한 요청이 지연될 수 있습니다.

표준 적응형
애플리케이션 사용 사례: 모두. 애플리케이션 사용 사례:
  1. 지연 시간에 민감하지 않습니다.

  2. 클라이언트는 단일 리소스에만 액세스하거나 액세스 중인 서비스 리소스별로 클라이언트를 별도로 풀링하는 로직을 제공합니다.

정전 시 재시도를 방지하기 위해 회로 차단이 SDK 지원됩니다. 정전 시 재시도를 방지하기 위해 회로 차단을 지원합니다. SDK
장애 발생 시 지터링 지수 백오프를 사용합니다. 지연 시간이 증가할 수 있는 대신 동적 백오프 기간을 사용하여 실패한 요청 수를 최소화하려고 합니다.
첫 번째 요청 시도는 절대 지연시키지 말고 재시도만 지연하십시오. 초기 요청 시도를 제한하거나 지연시킬 수 있습니다.

adaptive모드를 사용하는 경우 애플리케이션은 병목 현상이 발생할 수 있는 각 리소스를 중심으로 설계된 클라이언트를 구성해야 합니다. 이 경우 리소스는 단순히 각 리소스에 대해 생각하는 것보다 더 세밀하게 조정됩니다. AWS 서비스 AWS 서비스 요청을 제한하는 데 사용하는 추가 차원이 있을 수 있습니다. Amazon DynamoDB 서비스를 예로 들어 보겠습니다. DynamoDB는 요청을 제한하기 위해 액세스 중인 테이블과 함께 AWS 리전 사용합니다. 즉, 코드가 액세스하는 테이블 하나가 다른 테이블보다 병목 현상이 더 심할 수 있습니다. 코드가 동일한 클라이언트를 사용하여 모든 테이블에 액세스하고 해당 테이블 중 하나에 대한 요청이 병목 현상을 겪는 경우 적응형 재시도 모드를 사용하면 모든 테이블의 요청 속도가 감소합니다. 코드는 R egion-and-table 쌍당 하나의 클라이언트를 포함하도록 설계되어야 합니다. adaptive모드를 사용할 때 예상치 못한 지연이 발생하는 경우 사용 중인 서비스의 특정 AWS 설명서 가이드를 참조하십시오.

재시도 모드 구현 세부 정보

토큰 버킷을 사용하여 AWS SDKs 요청 재시도 여부 및 (adaptive재시도 모드의 경우) 요청 전송 속도를 결정합니다. 는 재시도 토큰 버킷과 요청 속도 토큰 버킷이라는 두 개의 토큰 버킷을 사용합니다. SDK

  • 재시도 토큰 버킷은 정전 시 업스트림 및 다운스트림 서비스를 보호하기 위해 재시도를 일시적으로 비활성화할지 여부를 결정하는 데 사용됩니다. SDK 재시도가 시도되기 전에 버킷에서 토큰을 획득하고, 요청이 성공하면 토큰이 버킷으로 반환됩니다. 재시도 시 버킷이 비어 있는 경우 는 요청을 재시도하지 않습니다. SDK

  • 요청 속도 토큰 버킷은 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 있을 수 있습니다. 버킷의 토큰은 클라이언트가 수신한 제한 응답 수에 따라 동적으로 결정되는 비율로 리필됩니다.

SendHTTPRequest:

이 단계에서는 요청을 로 보냅니다. AWS대부분은 AWS SDKs HTTP 요청을 할 때 연결 풀을 사용하여 기존 연결을 재사용하는 HTTP 라이브러리를 사용합니다. 일반적으로 전송률 조절 오류로 인해 요청이 실패하면 연결이 재사용되지만 일시적 오류로 인해 요청이 실패하는 경우에는 다시 사용되지 않습니다.

RequestBookkeeping:

요청이 성공하면 토큰이 토큰 버킷에 추가됩니다. adaptive재시도 모드의 경우에만 요청률 토큰 버킷의 유효노출률은 수신된 응답 유형에 따라 업데이트됩니다.

Retryable:

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

  • HTTP상태 코드.

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

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

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

MAX_ATTEMPTS:

기본 최대 시도 횟수는 설정으로 재정의되지 않는 한 retry_mode 설정에 따라 설정됩니다. max_attempts

HasRetryQuota

이 단계에서는 재시도 토큰 버킷에서 토큰을 획득합니다. 재시도 토큰 버킷이 비어 있는 경우 요청은 재시도되지 않습니다.

ExponentialBackoff

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

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

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

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

r = 2

MAX_BACKOFF = 20 secondsSDKs대부분의 경우. 확인을 위해 특정 SDK 가이드 또는 소스 코드를 참조하십시오.

와의 호환성 AWS SDKs

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

SDK 지원 참고 또는 추가 정보
AWS CLI v2
SDKC++의 경우
SDK고 V2 (1.x) 용
SDK고 1.x (V1) 용 아니요
SDK자바 2.x의 경우
SDK자바 1.x의 경우 JVM시스템 속성: com.amazonaws.sdk.maxAttempts 대신 사용, com.amazonaws.sdk.retryMode 대신 aws.retryMode 사용aws.maxAttempts.
SDK JavaScript 3.x용
SDK2.x의 경우 JavaScript 아니요 최대 재시도 횟수, 지터가 있는 지수 백오프, 재시도 백오프를 위한 사용자 지정 방법 옵션을 지원합니다.
SDK코틀린의 경우
SDK왜냐하면. NET3.x
SDK3.x의 경우 PHP
SDK파이썬용 (보토3)
SDK루비 3.x의 경우
SDK러스트용
를 위한 도구 PowerShell