자습서: Blob 스토리지에서 고가용성 애플리케이션 빌드

이 자습서는 시리즈의 1부입니다. 여기서는 Azure에서 애플리케이션 데이터의 고가용성을 지원하는 방법을 알아봅니다.

이 자습서를 완료하면 RA-GZRS(읽기 액세스 지역 영역 중복 스토리지) 계정으로 Blob을 업로드하고 검색하는 콘솔 애플리케이션을 갖게 됩니다.

Azure Storage의 지역 중복은 기본 지역에서 수백 마일 떨어진 보조 지역에 비동기적으로 트랜잭션을 복제합니다. 복제 프로세스는 보조 지역의 데이터가 결과적으로 일치하도록 보장합니다. 콘솔 애플리케이션은 회로 차단기 패턴을 사용하여 연결할 엔드포인트를 결정하고 오류 및 복구가 시뮬레이션될 때 엔드포인트 사이를 자동으로 전환합니다.

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

시리즈 1부에서는 다음 방법에 대해 알아봅니다.

  • 저장소 계정 만들기
  • 연결 문자열 설정
  • 콘솔 애플리케이션 실행

필수 조건

이 자습서를 완료하려면 다음이 필요합니다.

Azure Portal에 로그인

Azure Portal에 로그인합니다.

저장소 계정 만들기

스토리지 계정은 Azure Storage 데이터 개체의 저장 및 액세스를 위한 고유한 네임스페이스를 제공합니다.

다음과 같은 단계에 따라 RA-GZRS(읽기 액세스 지역 영역 중복 스토리지) 계정을 만듭니다.

  1. Azure Portal에서 리소스 만들기 단추를 선택합니다.

  2. 새로 만들기 페이지에서 스토리지 계정 - Blob, 파일, 테이블, 큐를 선택합니다.

  3. 다음 정보로 스토리지 계정 양식을 작성하고(아래 이미지 참조) 만들기를 선택합니다.

    설정 샘플 값 설명
    구독 내 구독 구독에 대한 자세한 내용은 구독을 참조하세요.
    ResourceGroup myResourceGroup 유효한 리소스 그룹 이름은 명명 규칙 및 제한 사항을 참조하세요.
    이름 mystorageaccount 스토리지 계정에 사용할 고유한 이름.
    위치 미국 동부 위치를 선택합니다.
    성능 Standard 표준 성능은 예제 시나리오에 적합한 옵션입니다.
    계정 종류 StorageV2 범용 v2 스토리지 계정 사용이 권장됩니다. Azure Storage 계정 유형에 대한 자세한 내용은 스토리지 계정 개요를 참조하세요.
    복제 RA-GZRS(읽기 액세스 지역 영역 중복 스토리지) 주 지역은 영역 중복이며 보조 지역에 복제되고 보조 지역에 대한 읽기 액세스가 사용됩니다.
    액세스 계층 자주 액세스하는 데이터에 대해 핫 계층을 사용합니다.

    create storage account

샘플 다운로드

샘플 프로젝트를 다운로드하고 storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip 파일을 추출(압축 풀기)한 다음, v12 폴더로 이동하여 프로젝트 파일을 찾습니다.

git을 사용하여 리포지토리를 로컬 개발 환경에 복제할 수도 있습니다. v12 폴더의 샘플 프로젝트에는 콘솔 애플리케이션이 포함되어 있습니다.

git clone https://github.com/Azure-Samples/storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.git

샘플 구성

Azure Blob 스토리지에 대한 애플리케이션 요청에 대한 권한을 부여해야 합니다. 코드로 Azure 서비스에 연결할 때에는 Azure.Identity 클라이언트 라이브러리에서 제공하는 DefaultAzureCredential 클래스를 사용하는 것이 좋습니다. .NET v12 코드 샘플에서는 이 방법을 사용합니다. 자세한 내용은 DefaultAzureCredential 개요를 참조하세요.

또한 계정 액세스 키를 사용하여 Azure Blob Storage 요청에 대한 권한을 부여할 수 있습니다. 그러나 이 방법은 액세스 키가 노출되지 않도록 주의해서 사용해야 합니다.

콘솔 애플리케이션 실행

Visual Studio에서 F5 키를 누르거나 시작을 클릭하여 애플리케이션 디버깅을 시작합니다. 패키지 복원이 구성된 경우 Visual Studio는 누락된 NuGet 패키지를 자동으로 복원합니다. 자세한 내용은 패키지 복원으로 패키지 설치 및 다시 설치를 참조하세요.

콘솔 창이 시작되면 앱은 보조 지역의 상태를 가져와서 해당 정보를 콘솔에 씁니다. 그러면 앱은 스토리지 계정에 컨테이너를 만들고 컨테이너에 Blob을 업로드합니다. Blob이 업로드되면 앱은 Blob이 보조 지역에 복제되었는지 지속적으로 검사합니다. 이 검사는 Blob이 복제되거나 루프 조건에 정의된 최대 반복 횟수에 도달할 때까지 계속됩니다.

다음으로, 애플리케이션은 Blob을 다운로드하라는 프롬프트와 함께 루프로 전환되고, 처음에는 기본 스토리지에서 읽습니다. 아무 키를 눌러 Blob을 다운로드합니다. 주 지역에서 다시 시도할 수 있는 오류가 있는 경우 보조 지역 엔드포인트에 대해 읽기 요청이 다시 시도됩니다. 콘솔 출력은 지역이 보조 지역으로 전환될 때 표시됩니다.

Screenshot of Console output for secondary request.

루프를 종료하고 리소스를 정리하려면 Blob 다운로드 프롬프트에서 Esc 키를 누릅니다.

샘플 코드 이해

이 샘플은 다시 시도 옵션과 보조 엔드포인트를 사용하여 구성된 BlobServiceClient 개체를 만듭니다. 이 구성을 사용하면 주 지역 엔드포인트에서 요청이 실패하는 경우 애플리케이션이 자동으로 보조 지역으로 전환할 수 있습니다.

string accountName = "<YOURSTORAGEACCOUNTNAME>";
Uri primaryAccountUri = new Uri($"https://{accountName}.blob.core.windows.net/");
Uri secondaryAccountUri = new Uri($"https://{accountName}-secondary.blob.core.windows.net/");

// Provide the client configuration options for connecting to Azure Blob storage
BlobClientOptions blobClientOptions = new BlobClientOptions()
{
    Retry = {
        // The delay between retry attempts for a fixed approach or the delay
        // on which to base calculations for a backoff-based approach
        Delay = TimeSpan.FromSeconds(2),

        // The maximum number of retry attempts before giving up
        MaxRetries = 5,

        // The approach to use for calculating retry delays
        Mode = RetryMode.Exponential,

        // The maximum permissible delay between retry attempts
        MaxDelay = TimeSpan.FromSeconds(10)
    },

    // Secondary region endpoint
    GeoRedundantSecondaryUri = secondaryAccountUri
};

// Create a BlobServiceClient object using the configuration options above
BlobServiceClient blobServiceClient = new BlobServiceClient(primaryAccountUri, new DefaultAzureCredential(), blobClientOptions);

BlobClientOptions에서 GeoRedundantSecondaryUri 속성이 설정되면 GET 또는 HEAD 요청에 대한 재시도는 보조 엔드포인트를 사용하도록 전환됩니다. 후속 재시도는 주 엔드포인트와 보조 엔드포인트를 교대로 사용합니다. 그러나 보조 Uri의 응답 상태가 404인 경우 요청에 대한 후속 재시도가 더 이상 보조 Uri를 사용하지 않습니다. 이 오류 코드는 리소스가 보조 지역에 복제되지 않았음을 나타내기 때문입니다.

다음 단계

시리즈의 1부에서는 RA-GZRS 스토리지 계정으로 애플리케이션의 고가용성을 지원하는 방법에 대해 알아봤습니다.

시리즈의 2부에서는 오류를 시뮬레이션하고 애플리케이션에서 보조 RA-GZRS 엔드포인트를 사용하도록 강제 적용하는 방법을 알아보세요.

리소스

사용되지 않는 SDK를 사용하는 관련 코드 샘플은 다음 리소스를 참조하세요.