Python을 사용하여 재시도 정책 구현
클라우드에서 실행되거나 원격 서비스 및 리소스와 통신하는 모든 애플리케이션은 일시적인 오류를 처리할 수 있어야 합니다. 이러한 애플리케이션에서는 네트워크 연결의 순간적인 손실, 서비스 또는 리소스가 사용 중일 때의 요청 시간 제한 또는 기타 요인으로 인해 오류가 발생하는 것이 일반적입니다. 개발자는 안정성과 복원력을 향상시키기 위해 일시적인 오류를 투명하게 처리하는 애플리케이션을 빌드해야 합니다.
이 문서에서는 Python용 Azure Storage 클라이언트 라이브러리를 사용하여 Azure Blob Storage에 연결하는 애플리케이션에 대한 재시도 정책을 설정하는 방법을 알아봅니다. 다시 시도 정책은 애플리케이션이 실패한 요청을 처리하는 방법을 정의하며, 항상 애플리케이션의 비즈니스 요구 사항 및 오류의 특성에 맞게 조정해야 합니다.
다시 시도 옵션 구성
Blob Storage에 대한 다시 시도 정책은 프로그래밍 방식으로 구성되어 다양한 서비스 요청 및 시나리오에 다시 시도 옵션이 적용되는 방식을 제어할 수 있습니다. 예를 들어 사용자 상호 작용을 기준으로 요청을 실행하는 웹앱은 다시 시도 횟수가 적고 지연이 짧은 정책을 구현하여 응답성을 높이고 오류가 발생할 때 사용자에게 알릴 수 있습니다. 또는 백그라운드에서 일괄 처리 요청을 실행하는 앱 또는 구성 요소는 다시 시도 횟수를 늘리고 지수 백오프 전략을 사용하여 요청 시간이 성공적으로 완료되도록 할 수 있습니다.
클라이언트 요청에 대한 재시도 정책을 구성하려면 다음 방법 중에서 선택할 수 있습니다.
- 기본값 사용: Python용 Azure Storage 클라이언트 라이브러리에 대한 기본 재시도 정책은 기본값이 있는 ExponentialRetry의 인스턴스입니다. 재시도 정책을 지정하지 않으면 기본 재시도 정책이 사용됩니다.
- 키워드로 클라이언트 생성자에 값 전달: 서비스에 대한 클라이언트 개체를 만들 때 재시도 정책 속성에 대한 값을 키워드 인수로 전달할 수 있습니다. 이 방법을 사용하면 클라이언트에 대한 재시도 정책을 사용자 지정할 수 있으며 몇 가지 옵션만 구성하면 되는 경우에 유용합니다.
- 재시도 정책 클래스의 인스턴스 만들기: ExponentialRetry 또는 LinearRetry 클래스의 인스턴스를 만들고 속성을 설정하여 재시도 정책을 구성할 수 있습니다. 그런 다음 인스턴스를 클라이언트 생성자에 전달하여 모든 서비스 요청에 재시도 정책을 적용할 수 있습니다.
다음 표에서는 재시도 정책을 구성하는 데 사용할 수 있는 모든 속성을 보여 줍니다. 이러한 속성은 모두 클라이언트 생성자에 키워드로 전달할 수 있지만 일부는 ExponentialRetry
또는 LinearRetry
인스턴스에만 사용할 수 있습니다. 이러한 제한 사항은 변경하지 않는 경우 각 속성에 대한 기본값과 함께 표에 나와 있습니다. 앱의 요구 사항을 충족하기 위해 이러한 속성 값을 사전에 조정해야 합니다.
속성 | Type | 설명 | 기본값 | ExponentialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
int | 최대 재시도 수 | 3 | 예 | 예 |
retry_connect |
int | 최대 연결 재시도 횟수 | 3 | 예 | 예 |
retry_read |
int | 최대 읽기 재시도 횟수 | 3 | 예 | 예 |
retry_status |
int | 최대 상태 재시도 횟수 | 3 | 예 | 예 |
retry_to_secondary |
bool | 가능하면 요청을 보조 엔드포인트로 재시도해야 하는지 여부입니다. RA-GRS 또는 RA-GZRS와 같이 지역 중복 복제를 사용하도록 설정된 스토리지 계정에만 이 옵션을 사용합니다. 또한 앱이 잠재적으로 오래된 데이터를 처리할 수 있는지 확인해야 합니다. | False |
예 | 예 |
initial_backoff |
int | 첫 번째 재시도에 대한 초기 백오프 간격(초)입니다. 지수 백오프 전략에만 적용됩니다. | 15초 | 예 | 아니요 |
increment_base |
int | 첫 번째 재시도 후 initial_backoff를 증분할 기준(초)입니다. 지수 백오프 전략에만 적용됩니다. | 3초 | 예 | 아니요 |
backoff |
int | 각 재시도 사이의 백오프 간격(초)입니다. 선형 백오프 전략에만 적용됩니다. | 15초 | 예 | 예 |
random_jitter_range |
int | 백오프 간격에 대해 지터/임의로 지정할 범위를 나타내는 숫자(초)입니다. 예를 들어 random_jitter_range 를 3으로 설정하면 x의 백오프 간격이 x+3과 x-3 사이에서 다를 수 있습니다. |
3초 | 예 | 예 |
참고 항목
retry_connect
, retry_read
및 retry_status
속성은 다양한 유형의 오류를 계산하는 데 사용됩니다. 나머지 재시도 횟수는 retry_total
, retry_connect
, retry_read
및 retry_status
값의 최솟값으로 계산됩니다. 이 때문에 다른 속성도 설정하지 않으면 retry_total
만 설정해도 효과가 없을 수 있습니다. 대부분의 경우 네 가지 속성을 모두 동일한 값으로 설정하여 최대 재시도 횟수를 적용할 수 있습니다. 그러나 앱의 특정 요구 사항에 따라 이러한 속성을 조정해야 합니다.
다음 섹션에서는 다른 방법을 사용하여 재시도 정책을 구성하는 방법을 보여 줍니다.
기본 재시도 정책 사용
Python용 Azure Storage 클라이언트 라이브러리에 대한 기본 재시도 정책은 기본값이 있는 ExponentialRetry의 인스턴스입니다. 재시도 정책을 지정하지 않으면 기본 재시도 정책이 사용됩니다. 서비스에 대한 클라이언트 개체를 만들 때 모든 구성 속성을 키워드 인수로 전달할 수도 있습니다.
다음 코드 예제에서는 blob 서비스에 대한 클라이언트 개체를 만들 때 키워드 인수로 retry_total
속성에 대한 값을 전달하는 방법을 보여 줍니다. 이 예제에서 클라이언트 개체는 retry_total
속성 및 기타 재시도 횟수 속성이 5로 설정된 기본 재시도 정책을 사용합니다.
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object with retry options
blob_service_client = BlobServiceClient(account_url, credential, retry_total=5,
retry_connect=5, retry_read=5, retry_status=5)
ExponentialRetry 정책 만들기
ExponentialRetry의 인스턴스를 만들고 retry_policy
키워드 인수를 사용하여 클라이언트 생성자에 인스턴스를 전달하여 재시도 정책을 구성할 수 있습니다. 이 방법은 여러 클라이언트에 대해 여러 속성 또는 여러 정책을 구성해야 하는 경우에 유용할 수 있습니다.
다음 코드 예제에서는 ExponentialRetry
의 인스턴스를 사용하여 재시도 옵션을 구성하는 방법을 보여 줍니다. 이 예제에서는 initial_backoff
를 10초, increment_base
를 4초, retry_total
을 3회 다시 시도로 설정합니다.
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = ExponentialRetry(initial_backoff=10, increment_base=4, retry_total=3)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
LinearRetry 정책 만들기
LinearRetry의 인스턴스를 만들고 retry_policy
키워드 인수를 사용하여 클라이언트 생성자에 인스턴스를 전달하여 재시도 정책을 구성할 수 있습니다. 이 방법은 여러 클라이언트에 대해 여러 속성 또는 여러 정책을 구성해야 하는 경우에 유용할 수 있습니다.
다음 코드 예제에서는 LinearRetry
의 인스턴스를 사용하여 재시도 옵션을 구성하는 방법을 보여 줍니다. 이 예제에서는 backoff
를 10초, retry_total
을 재시도 3회, retry_to_secondary
를 True
로 설정합니다.
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = LinearRetry(backoff=10, retry_total=3, retry_to_secondary=True)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
다음 단계
- 이 문서는 Python용 Blob Storage 개발자 가이드의 일부입니다. 앱 빌드에서 개발자 가이드 문서의 전체 목록을 참조하세요.
- 다시 시도 정책에 대한 아키텍처 지침 및 일반적인 모범 사례는 일시적인 오류 처리를 참조하세요.
- 일시적인 오류에 대한 다시 시도 패턴을 구현하는 방법에 대한 지침은 다시 시도 패턴을 참조하세요.