기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
재시도 동작
재시도 동작에는 에 대한 요청으로 인한 실패 복구 SDKs 시도 방법에 대한 설정이 포함됩니다. AWS 서비스
다음을 사용하여 이 기능을 구성하십시오.
retry_mode
- 공유 AWSconfig
파일 설정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
- 공유 AWSconfig
파일 설정AWS_MAX_ATTEMPTS
- 환경 변수aws.maxAttempts
- JVM 시스템 속성: 자바/코틀린 전용-
요청에 대한 최대 시도 횟수를 지정합니다.
기본값: 이 값이 지정되지 않은 경우 기본값은
retry_mode
설정 값에 따라 달라집니다.-
retry_mode
If islegacy
— 사용자 고유의 기본값을 사용합니다 SDK (기본값은 특정 SDK 가이드 또는 해당 코드베이스를 확인하세요). SDKmax_attempts
-
retry_mode
이standard
인 경우 — 세 번 시도합니다. -
retry_mode
이adaptive
인 경우 — 세 번 시도합니다.
유효한 값: 0보다 큰 숫자.
-
모드 선택 standard
및 adaptive
재시도 모드
용도에 더 적합하다고 확신할 수 없는 경우가 아니면 standard
재시도 모드를 사용하는 것이 좋습니다. adaptive
참고
이 adaptive
모드에서는 백엔드 서비스가 요청을 제한할 수 있는 범위를 기반으로 클라이언트를 풀링한다고 가정합니다. 이렇게 하지 않으면 두 리소스에 동일한 클라이언트를 사용하는 경우 한 리소스의 병목 현상으로 인해 관련 없는 리소스에 대한 요청이 지연될 수 있습니다.
표준 | 적응형 |
---|---|
애플리케이션 사용 사례: 모두. | 애플리케이션 사용 사례:
|
정전 시 재시도를 방지하기 위해 회로 차단이 SDK 지원됩니다. | 정전 시 재시도를 방지하기 위해 회로 차단을 지원합니다. SDK |
장애 발생 시 지터링 지수 백오프를 사용합니다. | 지연 시간이 증가할 수 있는 대신 동적 백오프 기간을 사용하여 실패한 요청 수를 최소화하려고 합니다. |
첫 번째 요청 시도는 절대 지연시키지 말고 재시도만 지연하십시오. | 초기 요청 시도를 제한하거나 지연시킬 수 있습니다. |
adaptive
모드를 사용하는 경우 애플리케이션은 병목 현상이 발생할 수 있는 각 리소스를 중심으로 설계된 클라이언트를 구성해야 합니다. 이 경우 리소스는 단순히 각 리소스에 대해 생각하는 것보다 더 세밀하게 조정됩니다. AWS 서비스 AWS 서비스 요청을 제한하는 데 사용하는 추가 차원이 있을 수 있습니다. Amazon DynamoDB 서비스를 예로 들어 보겠습니다. DynamoDB는 요청을 제한하기 위해 액세스 중인 테이블과 함께 AWS 리전 사용합니다. 즉, 코드가 액세스하는 테이블 하나가 다른 테이블보다 병목 현상이 더 심할 수 있습니다. 코드가 동일한 클라이언트를 사용하여 모든 테이블에 액세스하고 해당 테이블 중 하나에 대한 요청이 병목 현상을 겪는 경우 적응형 재시도 모드를 사용하면 모든 테이블의 요청 속도가 감소합니다. 코드는 R egion-and-table 쌍당 하나의 클라이언트를 포함하도록 설계되어야 합니다. adaptive
모드를 사용할 때 예상치 못한 지연이 발생하는 경우 사용 중인 서비스의 특정 AWS 설명서 가이드를 참조하십시오.
재시도 모드 구현 세부 정보
토큰 버킷을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 seconds
SDKs대부분의 경우. 확인을 위해 특정 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 | 예 |