재시도 및 시간 초과(Retries and Timeouts)
.NET 용 AWS SDK를 사용하면 AWS 서비스에 대한 HTTP 요청에 대한 재시도 횟수 및 시간 초과 값을 구성 할 수 있다. 재시도 및 시간 초과 값의 기본값이 응용 프로그램에 적합하지 않은 경우 특정 요구 사항에 맞게 조정할 수는 있지만 이를 수행하는 것이 응용 프로그램의 동작에 어떻게 영향을 미치는지 이해하는 것이 중요하다.
재시도 및 시간 초과에 사용할 값을 결정하려면 다음을 고려해야 한다.
- 네트워크 연결이 저하되거나 AWS 서비스에 도달할 수 없을 때 .NET 용 AWS SDK 및 응용 프로그램이 어떻게 응답해야 하는가? 호출에 실패했을 때, 연결을 포기해야 하는가? 아니면 계속 호출을 재시도하도록 할 것인가?
- 응용 프로그램이 응답성이 있어야하는 사용자 지향 응용 프로그램 또는 웹 사이트인가? 대기 시간 증가에 대한 내성이 더 높은 백그라운드 처리 작업인가?
- 응용 프로그램이 대기 시간이 낮은 안정적인 네트워크를 대상으로 배포되었는가? 아니면 신뢰할 수없는 연결로 원격 위치에 배포되었는가?
재시도
.NET 용 AWS SDK는 서버 측 조절 또는 연결 끊김으로 인해 실패한 요청을 다시 시도한다. ClientConfig 클래스의 MaxErrorRetry 속성을 사용하여 서비스 클라이언트 수준에서 재시도 횟수를 지정할 수 있다. .NET 용 AWS SDK는 실패하고 예외를 throw하기 전에 지정된 횟수만큼 작업을 재시도한다. 기본적으로 MaxErrorRetry 속성은 AmazonDynamoDBConfig 클래스를 제외하고는 4로 설정되며, 기본값은 10회이다. 재시도가 발생하면 요청 대기 시간이 길어진다. 총 요청 대기 시간 및 오류율에 대한 응용 프로그램 제한을 기반으로 재시도를 구성해야 한다.
시간 초과
.NET 용 AWS SDK를 사용하면 서비스 클라이언트 수준에서 요청 시간 초과 및 소켓 읽기/쓰기 시간 초과 값을 구성할 수 있다. 이 값은 ClientConfig 클래스의 Timeout 및 ReadWriteTimeout 속성에 각각 지정된다. 이 값은 AWS 서비스 클라이언트 객체에 의해 생성된 HttpWebRequest 객체의 Timeout 및 ReadWriteTimeout 속성으로 전달된다. 기본적으로 Timeout 값은 100초이고 ReadWriteTimeout 값은 300초이다. 네트워크의 대기 시간이 길거나 작업을 다시 시도 할 수 있는 조건이 있는 경우 긴 시간 제한 값과 많은 재시도 횟수를 사용하면 일부 SDK 작업이 응답하지 않을 수 있다.
참고
이식 가능한 클래스 라이브러리(Portable Class Library, PCL)를 대상으로하는 .NET 용 AWS SDK 버전은 HttpWebRequest 클래스 대신 HttpClient 클래스를 사용하며 Timeout 속성만 지원한다.
다음은 기본 시간 초과 값에 대한 예외이다. 이 값은 명시적으로 시간 종료 값을 설정할 때 대체된다.
- Timeout 및 ReadWriteTimeout은 호출되는 메소드가 AmazonS3Client.PutObject(), AmazonS3Client.UploadPart(), AmazonGlacierClient.UploadArchive() 등과 같이 스트림을 업로드하는 경우 최대값으로 설정된다.
- .NET Framework 4.5를 대상으로하는 .NET 용 AWS SDK 버전은 모든 AmazonS3Client 및 AmazonGlacierClient 객체의 Timeout 및 ReadWriteTimeout을 최대값으로 설정한다.
- 이식 가능한 클래스 라이브러리(Portable Class Library, PCL)를 대상으로하는 .NET 용 AWS SDK 버전은 모든 AmazonS3Client 및 AmazonGlacierClient 객체에 대해 Timeout을 최대값으로 설정한다.
예제
다음 예제에서는 AmazonS3Client 객체에 대해 최대 2번의 재시도, 10초의 시간 초과 및 10초의 읽기/쓰기 시간 초과를 지정하는 방법을 보여준다.
var client = new AmazonS3Client(
new AmazonS3Config
{
Timeout = TimeSpan.FromSeconds(10), // Default value is 100 seconds
ReadWriteTimeout = TimeSpan.FromSeconds(10), // Default value is 300 seconds
MaxErrorRetry = 2 // Default value is 4 retries
});
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Amazon Web Services' 카테고리의 다른 글
[AWS SDK for .NET] 코드 예제 (0) | 2017.10.16 |
---|---|
[AWS SDK for .NET] .NET용 AWS SDK 버전 3으로 코드 마이그레이션하기 (0) | 2017.10.16 |
[AWS SDK for .NET] Amazon Web Services .NET용 비동기 API (0) | 2017.10.16 |
[AWS SDK for .NET] .NET 응용 프로그램용 AWS SDK 구성 (0) | 2017.10.16 |
[AWS SDK for .NET] .NET용 AWS SDK 프로그래밍 (0) | 2017.10.16 |