Exercício – dimensionar automaticamente e monitorizar uma aplicação Web

Concluído

O dimensionamento automático é uma parte essencial na garantia de que um sistema se mantém disponível e capaz de dar resposta.

Pretende implementar o dimensionamento automático na aplicação Web de um sistema de reserva de hotéis, com base na utilização da CPU do anfitrião. Quando a utilização da CPU ultrapassa um limite específico, você deseja que o aplicativo Web seja dimensionado. Se o uso da CPU cair, você deseja que o aplicativo Web seja dimensionado novamente.

Nesta unidade, você configura o aplicativo Web e executa um aplicativo cliente de teste que impõe uma carga no aplicativo Web. Você vê os tipos de erros que podem ocorrer quando o host fica sobrecarregado. Em seguida, configure o dimensionamento automático para o aplicativo Web e execute o cliente de teste novamente. Você monitora os eventos de dimensionamento automático que ocorrem e examina como o sistema responde à carga de trabalho.

Configurar

A aplicação Web do sistema de reserva de hotéis implementa uma API Web. A API da Web expõe operações HTTP POST e GET que criam e recuperam reservas de clientes. Neste exercício, as reservas não são guardadas e a operação GET obtém simplesmente dados fictícios.

O exercício também executa um aplicativo cliente que simula muitos usuários emitindo operações POST e GET simultaneamente. Este aplicativo cliente fornece a carga de trabalho para testar como o aplicativo Web é dimensionado automaticamente.

Importante

Precisa da sua própria subscrição do Azure para executar este exercício e poderá incorrer em custos. Se ainda não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  1. Inicie sessão no portal do Azure.

  2. No menu do portal do Azure, selecione Criar um recurso.

  3. No painel de menu esquerdo, selecione Web e, em seguida, procure e selecione Web App. O painel Aplicativo Web é exibido.

  4. Selecione Criar. O painel Criar aplicativo Web é exibido.

  5. Na guia Noções básicas, insira os seguintes valores para cada configuração.

    Nota

    A aplicação Web tem de ter um nome exclusivo. Sugerimos que utilize algo semelhante ao <seu nome ou iniciais>hotelsystem. Utilize este nome sempre que vir <nome-da-aplicação-web> neste exercício.

    Definição Value
    Detalhes do Projeto
    Subscrição Selecione a subscrição do Azure que pretende utilizar para este exercício
    Grupo de Recursos Selecione o link Criar novo e, na caixa de diálogo Nome , digite mslearn-autoscale
    Detalhes da instância
    Nome <nome-da-aplicação-web>
    Publicar Código
    Pilha de runtime .NET Core 3.1 (LTS)
    Sistema operativo Windows
    País/Região Selecione uma região perto de si
  6. Selecione Rever + criar e, em seguida, selecione Criar.

  7. Na barra de menus superior direita do portal do Azure, abra o Cloud Shell (primeiro ícone na linha de opções de menu).

  8. Para baixar o código-fonte do sistema de reservas de hotéis, execute o seguinte comando.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  9. Mova-o para a pasta mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  10. Crie as aplicações para o sistema de hotel. Os dois aplicativos são (1) um aplicativo Web que implementa a API Web para o sistema e (2) um aplicativo cliente que você usa para testar a carga do aplicativo Web.

    dotnet build
    
  11. Prepare a aplicação Web HotelReservationSystem para publicar.

    cd HotelReservationSystem
    dotnet publish -o website
    
  12. Vá para a pasta do site que contém os arquivos publicados, compacte os arquivos e implante os arquivos no aplicativo Web que você criou na tarefa anterior. Substitua <your-webapp-name> pelo nome da sua aplicação Web.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-autoscale
    

Teste a aplicação Web antes de configurar o dimensionamento automático

  1. Num browser, aceda a https://<your-webapp-name>.azurewebsites.net/api/reservations/1. O acesso a este URL envia um pedido GET à API Web para obter os detalhes da reserva número 1. Deverá ver um resultado semelhante ao apresentado abaixo. A resposta contém um documento JSON com os detalhes da reserva. Lembre-se que a imagem mostra dados fictícios.

    Captura de ecrã de um browser a enviar um pedido de API Web para a aplicação Web do sistema de reserva de hotéis.

  2. Volte para o Cloud Shell e mova para a pasta ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  3. No Cloud Shell, selecione o editor de código (ícone com colchetes) e edite o arquivo App.config nesta pasta.

    code App.config
    
  4. Anule os comentários da linha que especifica o ReservationsServiceURI e substitua o valor pelo URL da sua aplicação Web. O arquivo deve se parecer com o exemplo a seguir.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="NumClients" value="100" />
            <add key="ReservationsServiceURI" value="https://<your-webapp-name>.azurewebsites.net/"/>
            <add key="ReservationsServiceCollection" value="api/reservations"/>
        </appSettings>
    </configuration>
    

    A configuração NumClients neste arquivo especifica o número de clientes simultâneos que tentam se conectar ao aplicativo Web e executar trabalho. O trabalho consiste em criar uma reserva e, em seguida, executar uma consulta para buscar os detalhes de uma reserva. Todos os dados utilizados são fictícios e não persistem em lado nenhum. Deixe o valor NumClients definido como 100.

  5. Salve o arquivo selecionando as reticências (...) no canto superior direito do editor.

  6. No Cloud Shell, edite o arquivo HotelReservationSystemTestClient.csproj nesta pasta.

    code HotelReservationSystemTestClient.csproj
    
  7. Edite a linha que especifica o TargetFramework para que ele corresponda à pilha de Runtime selecionada para seu aplicativo Web. Altere o valor TargetFramework para netcoreapp3.1. O arquivo deve se parecer com o exemplo a seguir.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
        <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\HotelReservationSystemTypes\HotelReservationSystemTypes.csproj" />
      </ItemGroup>
    
    </Project>
    
  8. Salve o arquivo selecionando as reticências (...) no canto superior direito do editor e feche o editor de código.

  9. Recrie a aplicação cliente de teste com a nova configuração.

    dotnet build
    
  10. Execute a aplicação cliente. Você vê várias mensagens aparecerem quando os clientes de teste começam a ser executados, fazem reservas e executam consultas. Permita que o sistema seja executado durante alguns minutos. As respostas tornam-se lentas e logo as solicitações do cliente começam a falhar com erros HTTP 408 (tempo limite).

    dotnet run
    

    Captura de ecrã de uma aplicação cliente em execução, a mostrar as mensagens de erro e respostas que ocorrem.

  11. Para parar o aplicativo cliente, pressione Enter.

Ativar o dimensionamento automático e criar uma condição de dimensionamento

  1. No portal do Azure, regresse à aplicação Web.

  2. Em Configurações, selecione Dimensionamento (plano do Serviço de Aplicativo) e, em seguida, selecione Dimensionamento automático personalizado.

  3. Na regra Escala automática padrão, verifique se o modo de escala está definido como Dimensionar com base em uma métrica e selecione Adicionar uma regra.

    Captura de ecrã da aplicação Web no portal do Azure durante a configuração do dimensionamento automático.

  4. Adicione uma regra que aumente a contagem de instâncias em um se a utilização média da CPU em todas as instâncias do site exceder 50% nos cinco minutos anteriores. Isto é uma regra de aumento horizontal.

    Captura de ecrã da aplicação Web no portal do Azure durante a configuração da regra de escalamento horizontal.

  5. Selecione novamente Adicionar uma regra. Adicione uma regra que reduza a contagem de instâncias em um se a utilização média da CPU em todas as instâncias no site cair abaixo de 30% nos cinco minutos anteriores. Isto é uma regra de redução horizontal. Lembre-se de que é uma boa prática definir regras de escala automática em pares.

    Captura de ecrã da aplicação Web no portal do Azure durante a configuração da regra de redução horizontal.

  6. Na janela Condição de dimensionamento automático padrão, na seção Limites de instância, defina a Contagem máxima de instâncias como cinco. Atribua o nome ScaleOnCPU à definição de dimensionamento automático e, em seguida, selecione Guardar.

    Captura de ecrã das definições completas de dimensionamento automático da aplicação Web.

Monitorizar eventos de dimensionamento automático

  1. Regresse ao Cloud Shell, aceda à pasta ~/hotelsystem/HotelReservationSystemTestClient e execute a aplicação cliente de teste novamente.

    cd ~/hotelsystem/HotelReservationSystemTestClient
    dotnet run
    
  2. Enquanto o aplicativo cliente de teste estiver em execução, volte para o portal do Azure mostrando as configurações de dimensionamento automático para o aplicativo Web e selecione Histórico de execução. Em Mostrar dados dos últimos, selecione 1 hora. Inicialmente, o gráfico está vazio porque leva vários minutos para o dimensionamento automático entrar em ação.

  3. Enquanto aguarda a ocorrência de eventos de dimensionamento automático, vá para o painel do seu serviço Web (não para o painel do plano do Serviço de Aplicativo). Em Monitorização, selecione Métricas.

  4. Adicione as métricas seguintes ao gráfico, defina o intervalo de tempo para os últimos 30 minutos e, em seguida, afixe o gráfico ao dashboard atual:

    • Tempo de CPU. Selecione a agregação Soma.
    • Erros de Servidor http. Selecione a agregação Soma.
    • Http 4.xx. Selecione a agregação Soma.
    • Tempo de Resposta Médio. Selecione a agregação Média.
  5. Permita que o sistema estabilize e anote o tempo da CPU, o número de erros HTTP 4.xx e o tempo médio de resposta. Antes do dimensionamento automático do sistema, você deve ver muitos erros HTTP 4.xx (estes são erros de tempo limite HTTP 408), e o tempo médio de resposta deve ser de vários segundos. Também pode haver o erro ocasional do servidor HTTP, dependendo de como o servidor web lida com a carga.

  6. Após cerca de 10 minutos, deverá ver as seguintes tendências neste gráfico:

    • O tempo da CPU aumenta.
    • O número de erros de HTTP 4.xx diminui.
    • O tempo médio de resposta desce.

    Captura de ecrã do gráfico Métricas da aplicação Web com três linhas a apontar para eventos de dimensionamento automático.

    Cada grande pico no tempo da CPU indica que mais poder de processamento da CPU ficou disponível. Essa alteração é resultado do dimensionamento automático.

  7. Para a aplicação Web e examinar os gráficos, volte à página Descrição geral. Os gráficos gerais devem indicar as seguintes tendências:

    • As métricas Entrada de Dados, Saída de Dados e Pedidos aumentaram.
    • O tempo médio de resposta caiu.

    Captura de ecrã dos gráficos na página Descrição geral da aplicação Web.

  8. Selecione Aumentar horizontalmente (plano do Serviço de Aplicações) e, em seguida, selecione Histórico de execuções. Selecione 1 hora. O gráfico agora deve indicar que o dimensionamento automático ocorreu. O número de instâncias aumentou (pode chegar a cinco, dependendo de quanto tempo o aplicativo cliente está em execução) e você deve ver vários eventos de dimensionamento automático relatados.

    Captura de tela do gráfico mostrando como o dimensionamento automático aumentou a contagem de instâncias para o aplicativo Web.

    Nota

    Os eventos de dimensionamento automático são relatados em pares. O primeiro evento ocorre quando o dimensionamento automático dispara um aumento no número de instâncias. O segundo evento ocorre quando o dimensionamento automático é concluído.

  9. Regresse ao Cloud Shell. Você deve ver que o aplicativo é executado mais rápido e que muito menos solicitações falham.

  10. Para parar a aplicação, prima Enter.

  11. Após alguns minutos, se você examinar o histórico de execução do Plano do Serviço de Aplicativo, verá o número de instâncias cair. Essa diminuição resulta da liberação de recursos pela regra de expansão.

Configurou o dimensionamento automático do sistema de reserva de hotéis. O sistema foi expandido quando o uso total da CPU em todas as instâncias que hospedam o site excedeu 50% em um período de cinco minutos. O sistema voltou a ser reduzido horizontalmente quando a utilização da CPU total ficou abaixo de 30%, novamente num período de cinco minutos. Você submeteu o sistema de reservas do hotel a uma carga de teste e monitorou quando o dimensionamento automático ocorreu.