AWS의 오류 재시도 횟수 및 지수 백오프 - AWS 일반 참조

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

AWS의 오류 재시도 횟수 및 지수 백오프

DNS 서버, 스위치, 로드 밸런서 등 수많은 네트워크 구성 요소들은 요청이 이루어지는 모든 단계에서 오류를 일으킬 수 있습니다. 네트워크 환경에서는 클라이언트 애플리케이션의 재시도 기술이 이러한 오류 응답을 처리하는 데 가장 많이 사용되고 있습니다. 이 기술은 애플리케이션의 안정성을 높일 뿐만 아니라 개발자의 운영 비용을 절감하는 효과가 있습니다.

각 AWS SDK에서는 자동 재시도 로직을 구현합니다. AWS SDK for Java 역시 자동으로 요청을 재시도하며, 이러한 재시도 설정은 ClientConfiguration 클래스를 사용해 구성할 수 있습니다. 예를 들어, 최소의 지연 시간으로 재시도 없이 요청하는 웹 페이지의 경우에는 재시도 로직을 비활성화하면 됩니다. 이때는 ClientConfiguration 클래스를 사용하여 maxErrorRetry 값을 0으로 입력하면 재시도가 비활성화됩니다.

AWS SDK를 사용하지 않을 때는 서버(5xx) 또는 병목 오류가 수신된 최초 요청을 재시도해야 합니다. 하지만 클라이언트 오류(4xx)가 발생할 경우 다시 시도하기 전에 요청을 수정하여 문제를 해결해야 합니다.

간단한 재시도 외에도 각AWSSDK는 흐름 제어가 탁월한 지수 백오프 알고리즘을 구현합니다. 지수 백오프의 기본 아이디어는 오류 응답이 연이어 나올 때마다 재시도 간 대기 시간을 점진적으로 늘린다는 것입니다. 최대 지연 간격과 최대 재시도 횟수를 구현해야 합니다. 최대 지연 시간 간격과 최대 재시도 횟수는 고정 값일 필요가 없으며, 수행 중인 작업과 다른 로컬 요인(예: 네트워크 지연 시간)을 기반으로 설정해야 합니다.

대부분의 지수 백오프 알고리즘은 지터(임의 지연)를 사용하여 연쇄 충돌을 방지합니다. 이 경우에는 이런 충돌을 방지하는 것이 아니므로 이 난수를 사용할 필요가 없습니다. 하지만 동시 클라이언트를 사용하는 경우에는 지터가 보다 빠른 요청 성공에 도움이 될 수 있습니다. 자세한 내용은 Exponential Backoff and Jitter 블로그 게시물을 참조하십시오.

다음 의사 (pseudo) 코드는 지연을 증가시켜 상태를 폴링하는 방법을 보여줍니다.

Do some asynchronous operation. retries = 0 DO wait for (2^retries * 100) milliseconds status = Get the result of the asynchronous operation. IF status = SUCCESS retry = false ELSE IF status = NOT_READY retry = true ELSE IF status = THROTTLED retry = true ELSE Some other error occurred, so stop calling the API. retry = false END IF retries = retries + 1 WHILE (retry AND (retries < MAX_RETRIES))