Exercício – Dimensionar um aplicativo Web manualmente

Concluído

Você deve expandir um sistema quando espera um aumento no tráfego. Você também pode expandir em resposta à redução de desempenho.

No exemplo do sistema de reservas de hotéis, você aumenta o número de instâncias do aplicativo Web quando antecipa o tráfego extra devido a um evento especial, uma oferta especial ou flutuações sazonais. Você dimensiona o sistema novamente quando a demanda diminui.

Neste exercício, você cria um plano do Serviço de Aplicativo e implanta um aplicativo Web usando esse plano. Você monitora o desempenho do aplicativo Web sob carga. Em seguida, escale o aplicativo horizontalmente e verifique se o plano melhorou o desempenho do aplicativo.

Este exercício usa um aplicativo Web de exemplo que implementa uma API Web. A API Web expõe as operações HTTP POST e GET que criam e recuperam as reservas dos clientes de um site de reservas de hotéis. As reservas não são salvas. A operação GET simplesmente recupera dados fictícios.

O exercício também executa um aplicativo cliente que simula um número de usuários que emitem operações POST e GET simultaneamente. Este aplicativo fornece a carga de trabalho que você usa para testar o desempenho do aplicativo Web antes e depois da colocação em escala.

Criar um Plano do Serviço de Aplicativo e um aplicativo Web

Importante

É preciso ter uma assinatura do Azure para fazer esse exercício, e isso pode gerar encargos. Caso ainda não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.

  1. Entre no portal do Azure.

  2. No menu do portal do Azure ou na Página Inicial, selecione Criar um recurso. O painel Criar um recurso será exibido.

  3. No painel do menu à esquerda, em Categorias, selecione Web, pesquise e selecione a opção Aplicativo Web, depois clique em Criar. O painel Criar Aplicativo Web é exibido.

  4. Na guia Básico, insira os valores a seguir para cada configuração.

    Observação

    O aplicativo Web precisa ter um nome exclusivo. Sugerimos algo como <seu nome ou suas iniciais>hotelsystem. Use esse nome sempre que você vir <your-webapp-name> neste exercício.

    Configuração Valor
    Detalhes do projeto
    Assinatura Selecione a assinatura do Azure que deseja usar neste exercício
    Grupo de recursos Clique no link Criar, depois insira um grupo de recursos chamado mslearn-scale
    Detalhes da Instância
    Nome Confira a Observação antes da tabela. Insira neste exercício um nome exclusivo que você possa lembrar posteriormente
    Publicação Código
    Pilha de runtime .NET 6 (LTS)
    Sistema operacional Windows
    Região Aceitar padrão
    Plano do Serviço de Aplicativo
    Plano do Windows Aceitar padrão
    Plano de preços Aceitar padrão
  5. Selecione Examinar + criar>Criar. Aguarde até que o aplicativo Web seja criado e implantado.

Criar e implantar o aplicativo Web

  1. Na barra de tarefas do Azure, clique no ícone do Cloud Shell para abrir o Azure Cloud Shell, depois execute o comando a seguir para baixar o código-fonte do sistema de reservas de hotel.

    Screenshot of Cloud Shell icon in taskbar.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  2. Acesse a pasta mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  3. Crie os aplicativos para o sistema do hotel. Há dois aplicativos: um aplicativo Web que implementa a API Web para o sistema e um aplicativo cliente que você usa para carregar o aplicativo Web.

    dotnet build
    
  4. Prepare o aplicativo Web HotelReservationSystem para publicação.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Acesse a pasta website, que contém os arquivos publicados. Compacte e implante os arquivos no aplicativo Web criado na tarefa anterior. Copie o código abaixo para o Bloco de notas e substitua <your-webapp-name> pelo nome do aplicativo Web. Em seguida, cole o bloco de códigos editado no Cloud Shell, depois execute-o.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Use o navegador da Web para acessar http://<your-webapp-name>.azurewebsites.net/api/reservations/1. É exibido um documento JSON que contém os detalhes da reserva número 1.

    Screenshot of the running web app, showing the details for reservation number 1 in JSON format.

Monitorar o desempenho do aplicativo Web antes da escala horizontal

  1. Volte para o Cloud Shell, depois acesse a pasta ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Edite o arquivo App.config nesta pasta usando o editor de código.

    code App.config
    
  3. Remova a marca de comentário da linha que especifica o ReservationsServiceURI e substitua o valor YOUR WEBSITE NAME pelo nome do aplicativo Web. O arquivo deve ser semelhante a este exemplo.

    <?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>
    

    Observação

    A configuração NumClients neste arquivo especifica o número de clientes que podem simultaneamente tentar se conectar ao aplicativo Web e realizar trabalhos. O trabalho consiste em criar uma reserva, depois executar uma consulta para buscar os detalhes dessa reserva. Todos os dados usados são falsos. Eles não são persistidos em nenhum lugar. Deixe esse valor definido como 100.

  4. Salve o arquivo selecionando Ctrl+S.

  5. Edite o arquivo HotelReservationSystemTestClient.csproj nesta pasta usando o editor de código.

    code HotelReservationSystemTestClient.csproj
    
  6. Edite a linha que especifica TargetFramework, de modo que ela corresponda à pilha de runtime selecionada para seu aplicativo Web. Altere o valor de TargetFramework para netcoreapp7.0. O arquivo deve ser semelhante a este exemplo.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp7.0</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>
    
  7. Salve o arquivo selecionando Ctrl+S e feche o editor de código pressionando Ctrl+Q.

  8. Recompile o aplicativo de cliente de teste mais uma vez com a nova configuração.

    dotnet build
    
  9. Execute o aplicativo cliente. Você vê várias mensagens aparecerem à medida que os clientes começam a ser executados, fazem reservas e executam consultas. Permita que o sistema seja executado por alguns minutos. As respostas são lentas e, em breve, as solicitações do cliente começam a falhar com erros HTTP 408 (Tempo limite).

    dotnet run
    

    Screenshot of a running client app, showing the responses and error messages that occur.

  10. No portal do Azure, selecione Ir para o recurso para abrir seu aplicativo Web.

  11. No painel do menu à esquerda, selecione Monitoramento, depois Métricas.

  12. No lado direito da barra de menus do painel do aplicativo Web, selecione o intervalo de tempo Hora Local: últimas 24 horas (automático), selecione Últimos 30 minutos, depois clique em Aplicar.

  13. No painel, em Título do Gráfico, adicione as seguintes métricas ao gráfico:

    • Clique em Adicionar métrica e na lista suspensa Métrica, selecione Tempo de CPU. Em Agregação, selecione Soma.
    • Clique em Adicionar métrica e na lista suspensa Métrica, selecione Erros do Servidor HTTP. Em Agregação, selecione Soma.
    • Clique em Adicionar métrica e na lista suspensa Métrica, selecione HTTP 4xx. Em Agregação, selecione Soma.
    • Clique em Adicionar métrica e na lista suspensa Métrica, selecione Tempo de Resposta. Para Agregação, selecione Méd.
  14. Na barra de menus à direita, clique em Fixar no painel. O painel Fixar no painel é exibido. Selecione a guia Criar Novo.

  15. Na lista suspensa Nome do painel, insira o nome do aplicativo Web, depois clique em Criar e fixar.

  16. Deixe que o sistema seja executado por cinco minutos para se estabilizar e anote o Tempo de CPU, o número de erros HTTP 4xx e o tempo médio de resposta. Você deverá ver uma quantidade significativa de erros HTTP 4xx. Esses erros são erros de tempo limite HTTP 408. O tempo médio de resposta é de vários segundos. Talvez você veja um erro ocasional de servidor HTTP, dependendo de como o servidor Web está lidando com a carga.

    Screenshot showing the performance metrics for the web app before scaling out.

  17. Deixe o aplicativo cliente em execução enquanto você executa a próxima tarefa.

Expandir o aplicativo Web e verificar a melhoria de desempenho

  1. No portal do Azure, selecione o nome do aplicativo Web (Serviço de Aplicativo), depois no painel do menu à esquerda, em Configurações, clique em Escalar horizontalmente (Plano do Serviço de Aplicativo). O painel Escalar horizontalmente (Plano do Serviço de Aplicativo) será exibido.

  2. Na guia Configurar, selecione Escala manual e defina Contagem de instâncias como 5. Selecione Salvar.

    Screenshot of the Configure page for the App Service plan, scaling out to five instances.

  3. Alterne para o Cloud Shell que está executando o aplicativo cliente. Você deverá ver menos solicitações falhando com erros, embora ainda haja algum tempo limite.

  4. Execute o aplicativo por mais cinco minutos. Em seguida, acesse o gráfico que mostra as métricas do aplicativo no painel do portal do Azure. Você deverá ver que o tempo de CPU aumenta drasticamente porque agora há cinco vezes mais energia de CPU disponível. O tempo médio de resposta deve cair e o número de erros HTTP 4xx também deve diminuir. O gráfico a seguir mostra um conjunto comum de resultados. O ponto no qual a expansão ocorreu é observado.

    Screenshot showing the performance metrics for the web app after scaling out to five instances.

  5. Se quiser fazer mais experimentos, tente aumentar a contagem de instâncias do plano de Serviço de Aplicativo para 10. O número máximo de instâncias com suporte na camada S1 é 10. Você deve notar um aumento adicional no tempo de CPU e uma redução correspondente no tempo de resposta e nos erros HTTP 4xx.

  6. Volte para o Cloud Shell que está executando o aplicativo cliente. Pressione Enter para interromper o aplicativo.

  7. No portal do Azure, defina a contagem de instâncias de volta como 1. Selecione um aplicativo Web e no painel do menu à esquerda, clique em Escalar horizontalmente (Plano de Serviço de Aplicativo). Na guia Configurar, defina a contagem de instâncias como 1 e selecione Salvar.