Tutorial: Crie um aplicativo altamente disponível com armazenamento de Blob

Este tutorial é a primeira parte de uma série. Nele, você aprende a tornar os dados do seu aplicativo altamente disponíveis no Azure.

Depois de concluir este tutorial, você terá um aplicativo de console que carrega e recupera um blob de uma conta de armazenamento com redundância de zona geográfica de acesso de leitura (RA-GZRS).

A redundância geográfica no Armazenamento do Azure replica transações de forma assíncrona de uma região primária para uma região secundária que está a centenas de quilômetros de distância. Este processo de replicação garante que os dados na região secundária acabam por ser consistentes. O aplicativo de console usa o padrão de disjuntor para determinar a qual ponto de extremidade se conectar, alternando automaticamente entre os pontos finais à medida que falhas e recuperações são simuladas.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Na primeira parte da série, saiba como:

  • Criar uma conta de armazenamento
  • Definir a cadeia de ligação
  • Executar a aplicação de consola

Pré-requisitos

Para concluir este tutorial:

Inicie sessão no portal do Azure

Inicie sessão no portal do Azure.

Criar uma conta de armazenamento

Uma conta de armazenamento fornece um namespace exclusivo para armazenar e acessar seus objetos de dados do Armazenamento do Azure.

Siga estas etapas para criar uma conta de armazenamento com redundância de zona geográfica de acesso de leitura (RA-GZRS):

  1. Selecione o botão Criar um recurso no portal do Azure.

  2. Selecione Conta de armazenamento - blob, arquivo, tabela, fila na página Novo .

  3. Preencha o formulário da conta de armazenamento com as seguintes informações, conforme mostrado na imagem abaixo e selecione Criar:

    Definição Valores de exemplo Description
    Subscrição A minha subscrição Para obter detalhes sobre as suas subscrições, veja Subscriptions (Subscrições).
    ResourceGroup myResourceGroup Para nomes de grupo de recursos válidos, veja Naming rules and restrictions (Atribuição de nomes de regras e restrições).
    Nome mystorageaccount Um nome exclusivo para sua conta de armazenamento.
    Localização E.U.A. Leste Escolher uma localização.
    Desempenho Standard O desempenho padrão é uma boa opção para o cenário de exemplo.
    Account kind (Tipo de conta) ArmazenamentoV2 Recomenda-se o uso de uma conta de armazenamento v2 de uso geral. Para obter mais informações sobre tipos de contas de armazenamento do Azure, consulte Visão geral da conta de armazenamento.
    Replicação Armazenamento com redundância de zona geográfica de acesso de leitura (RA-GZRS) A região primária é redundante de zona e é replicada para uma região secundária, com acesso de leitura à região secundária habilitado.
    Camada de acesso Frequente Use a camada de acesso para dados acessados com frequência.

    create storage account

Transferir o exemplo

Baixe o projeto de exemplo, extraia (descompacte) o arquivo storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip e navegue até a pasta v12 para localizar os arquivos do projeto.

Você também pode usar o git para clonar o repositório em seu ambiente de desenvolvimento local. O projeto de exemplo na pasta v12 contém um aplicativo de console.

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

Configurar o exemplo

As solicitações de aplicativo para o armazenamento de Blob do Azure devem ser autorizadas. Usar a classe fornecida pela biblioteca de Azure.Identity cliente é a DefaultAzureCredential abordagem recomendada para se conectar aos serviços do Azure em seu código. O exemplo de código .NET v12 usa essa abordagem. Para saber mais, consulte a visão geral de DefaultAzureCredential.

Você também pode autorizar solicitações para o Armazenamento de Blobs do Azure usando a chave de acesso da conta. No entanto, essa abordagem deve ser usada com cautela para proteger as chaves de acesso de serem expostas.

Executar a aplicação de consola

No Visual Studio, pressione F5 ou selecione Iniciar para começar a depurar o aplicativo. O Visual Studio restaura automaticamente os pacotes NuGet ausentes se a restauração de pacotes estiver configurada. Consulte Instalando e reinstalando pacotes com restauração de pacotes para saber mais.

Quando a janela do console for iniciada, o aplicativo obterá o status da região secundária e gravará essas informações no console. Em seguida, o aplicativo criará um contêiner na conta de armazenamento e carregará um blob para o contêiner. Depois que o blob for carregado, o aplicativo verificará continuamente se o blob foi replicado para a região secundária. Essa verificação continua até que o blob seja replicado ou atinjamos o número máximo de iterações, conforme definido pelas condições do loop.

Em seguida, o aplicativo entra em um loop com um prompt para baixar o blob, inicialmente lendo do armazenamento principal. Pressione qualquer tecla para baixar o blob. Se houver uma leitura de erro repetida da região primária, uma nova tentativa da solicitação de leitura será executada em relação ao ponto de extremidade da região secundária. A saída do console será exibida quando a região mudar para secundária.

Screenshot of Console output for secondary request.

Para sair do loop e limpar recursos, pressione a Esc tecla no prompt de download do blob.

Compreender o código de exemplo

O exemplo cria um objeto configurado com opções de repetição e um BlobServiceClient ponto de extremidade de região secundária. Essa configuração permite que o aplicativo alterne automaticamente para a região secundária se a solicitação falhar no ponto de extremidade da região primária.

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);

Quando a GeoRedundantSecondaryUri propriedade é definida em BlobClientOptions, novas tentativas para solicitações GET ou HEAD alternarão para usar o ponto de extremidade secundário. As repetições subsequentes alternarão entre o parâmetro de avaliação primário e secundário. No entanto, se o status da resposta do Uri secundário for 404, as tentativas subsequentes da solicitação não usarão mais o Uri secundário, pois esse código de erro indica que o recurso não foi replicado para a região secundária.

Próximos passos

Na primeira parte da série, você aprendeu sobre como tornar um aplicativo altamente disponível com contas de armazenamento RA-GZRS.

Avance para a segunda parte da série para aprender a simular uma falha e forçar seu aplicativo a usar o ponto de extremidade RA-GZRS secundário.

Recursos

Para exemplos de código relacionados usando SDKs preteridos, consulte os seguintes recursos: