Compartilhar via


Tutorial: Criar um aplicativo altamente disponível com o armazenamento de Blobs

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

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

A redundância geográfica no Armazenamento do Azure replica transações de modo assíncrono de uma região primária para uma região secundária que está a centenas de quilômetros de distância. Esse processo de replicação garante que os dados na região secundária acabem sendo consistentes. O aplicativo de console usa o padrão de disjuntor para determinar a qual ponto de extremidade ele se conectará, alternando automaticamente entre pontos de extremidade conforme as falhas e as recuperações são simuladas.

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

Na primeira parte da série, você aprenderá a:

  • Criar uma conta de armazenamento
  • Definir a cadeia de conexão
  • Executar o aplicativo de console

Pré-requisitos

Para concluir este tutorial:

Entre no Portal do Azure

Entre no portal do Azure.

Criar uma conta de armazenamento

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

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

  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 de conta de armazenamento com as informações a seguir, conforme mostrado na imagem a seguir e selecione Criar:

    Configuração Valor de exemplo Descrição
    Assinatura Minha assinatura Para obter detalhes sobre suas assinaturas, consulte Assinaturas.
    ResourceGroup myResourceGroup Para ver os nomes do grupo de recursos válidos, consulte Regras e restrições de nomenclatura.
    Nome mystorageaccount Um nome exclusivo para sua conta de armazenamento.
    Localidade Leste dos EUA Escolha um local.
    Desempenho Standard O desempenho padrão é uma boa opção para o cenário de exemplo.
    Tipo de conta StorageV2 É recomendável usar uma conta de armazenamento de uso geral v2. Para saber mais sobre os tipos de contas de Armazenamento do Microsoft Azure, confira Visão geral da conta de armazenamento do Microsoft.
    Replicação RA-GZRS (armazenamento com redundância de zona geográfica com acesso de leitura) A região primária tem redundância 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 quente para dados acessados com frequência.

    criar conta de armazenamento

Baixar o exemplo

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

Você também pode usar o Git para clonar o repositório no 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 Blobs do Azure precisam ser autorizadas. Usar a classe DefaultAzureCredential fornecida pela biblioteca de clientes Azure.Identity é a abordagem recomendada para se conectar aos serviços do Azure no código. O exemplo de código do .NET v12 usa essa abordagem. Para saber mais, confira Visão geral do 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 contra exposição.

Executar o aplicativo de console

No Visual Studio, pressione F5 ou selecione Iniciar para iniciar a depuração do aplicativo. O Visual Studio restaura automaticamente os pacotes NuGet ausentes quando a restauração do pacote está configurada. Confira Instalar e reinstalar pacotes com a 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. Depois, o aplicativo criará um contêiner na conta de armazenamento e carregará um blob no 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 continuará até que o blob seja replicado ou que seja atingido o número máximo de iterações definido pelas condições de loop.

Depois, o aplicativo insere um loop com um prompt para baixar o blob, lendo inicialmente do armazenamento primário. Pressione qualquer tecla para baixar o blob. Se houver uma leitura de erro repetível da região primária, uma nova tentativa da solicitação de leitura será executada no ponto de extremidade da região secundária. A saída do console será mostrada quando a região mudar para a secundária.

Captura de tela da saída do console da solicitação secundária.

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

Entender o código de exemplo

O exemplo cria um objeto BlobServiceClient configurado com opções de repetição e um ponto de extremidade de região secundária. Essa configuração permite que o aplicativo mude automaticamente para a região secundária quando a solicitação falha 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 propriedade GeoRedundantSecondaryUri estiver definida em BlobClientOptions, as novas tentativas de solicitações GET ou HEAD mudarão para usar o ponto de extremidade secundário. As próximas repetições alternarão entre o ponto de extremidade primário e secundário. No entanto, se o status da resposta do URI secundário for 404, as próximas repetições 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óximas etapas

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

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