AWS SDK for Rust에서 재시도 구성 - AWS SDK for Rust

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

AWS SDK for Rust에서 재시도 구성

AWS SDK for Rust는 서비스 요청 및 사용자 지정 가능한 구성 옵션에 대한 기본 재시도 동작을 제공합니다. AWS 서비스를 직접적으로 호출하면 예기치 않은 예외가 가끔 반환됩니다. 직접 호출을 재시도하면 스로틀링 또는 일시적 오류와 같은 특정 유형의 오류가 성공할 수 있습니다.

공유 AWS config 파일의 환경 변수 또는 설정을 사용하여 전역적으로 재시도 동작을 구성할 수 있습니다. 이 접근법에 대한 정보는 AWS SDK 및 도구 참조 설명서재시도 동작을 참조하세요. 또한 재시도 전략 구현에 대한 자세한 정보와 적절한 구현을 선택하는 방법도 포함되어 있습니다.

또는 다음 섹션과 같이 코드에서 이러한 옵션을 구성할 수도 있습니다.

기본 재시도 구성

모든 서비스 클라이언트는 기본적으로 RetryConfig 구조체를 통해 제공되는 standard 재시도 전략 구성을 사용합니다. 기본적으로 직접 호출은 세 번 시도됩니다(초기 시도와 두 번의 재시도). 또한 재시도 폭풍을 방지하기 위해 각 재시도는 임의의 짧은 기간을 두고 지연됩니다. 이 규칙은 대부분의 사용 사례에 적합하지만 처리량이 많은 시스템과 같은 특정 상황에서는 적합하지 않을 수 있습니다.

일부 유형의 오류만 SDK에서 재시도 가능한 것으로 간주됩니다. 재시도 가능한 오류의 예는 다음과 같습니다.

  • 소켓 제한 시간

  • 서비스 측 스로틀링

  • HTTP 5XX 응답과 같은 일시적인 서비스 오류

다음 예제는 재시도 가능한 것으로 간주되지 않습니다.

  • 파라미터 누락 또는 유효하지 않음

  • 인증/보안 오류

  • 잘못된 구성 예외

최대 시도 횟수, 지연 횟수 및 백오프 구성을 설정하여 standard 재시도 전략을 사용자 지정할 수 있습니다.

최대 시도 횟수

수정된 RetryConfigaws_config::defaults에 제공하여 코드의 최대 시도 횟수를 사용자 지정할 수 있습니다.

const CUSTOM_MAX_ATTEMPTS: u32 = 5; let retry_config = RetryConfig::standard() // Set max attempts. When max_attempts is 1, there are no retries. // This value MUST be greater than zero. // Defaults to 3. .with_max_attempts(CUSTOM_MAX_ATTEMPTS); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

지연 및 백오프

재시도가 필요한 경우 기본 재시도 전략은 후속 시도를 수행하기 전에 대기합니다. 첫 번째 재시도의 지연 시간은 짧지만 이후 재시도에서는 기하급수적으로 증가합니다. 최대 지연 시간은 너무 크게 증가하지 않도록 제한됩니다.

무작위 지터는 모든 시도 사이의 지연에 적용됩니다. 지터는 재시도 폭풍을 일으킬 수 있는 대규모 플릿의 영향을 완화하는 데 도움이 됩니다. 지수 백오프 및 지터에 대한 자세한 내용은 AWS 아키텍처 블로그지수 백오프 및 지터를 참조하세요.

수정된 RetryConfigaws_config::defaults에 제공하여 코드의 지연 설정을 사용자 지정할 수 있습니다. 다음 코드는 첫 번째 재시도를 최대 100밀리초 동안 지연하고 재시도 사이의 최대 시간이 5초가 되도록 구성을 설정합니다.

let retry_config = RetryConfig::standard() // Defaults to 1 second. .with_initial_backoff(Duration::from_millis(100)) // Defaults to 20 seconds. .with_max_backoff(Duration::from_secs(5)); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

적응형 재시도 모드

standard 모드 재시도 전략의 대안으로 adaptive 모드 재시도 전략은 제한 오류를 최소화하기 위해 이상적인 요청 속도를 찾는 고급 접근 방식입니다.

참고

적응형 재시도는 고급 재시도 모드입니다. 이 전략의 사용은 일반적으로 권장되지 않습니다. AWS SDK 및 도구 참조 안내서재시도 동작을 참조하세요.

적응형 재시도에는 표준 재시도의 모든 기능이 포함됩니다. 비스로틀링 요청과 비교하여 스로틀링 요청의 속도를 측정하는 클라이언트 측 속도 제한 도구를 추가합니다. 또한 트래픽을 제한하여 안전한 대역폭 내에 유지하려는 시도로 스로틀링 오류가 발생하지 않는 것이 이상적입니다.

속도는 변화하는 서비스 조건 및 트래픽 패턴에 실시간으로 적응하며 그에 따라 트래픽 속도를 높이거나 낮출 수 있습니다. 트래픽이 많은 시나리오에서는 속도 제한 도구가 초기 시도를 지연시킬 수 있습니다.

수정된 RetryConfig를 제공하여 코드에서 adaptive 재시도 전략을 선택할 수 있습니다.

let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(RetryConfig::adaptive()) .load() .await;