Exercício - Dimensionar uma aplicação Web manualmente

Concluído

Deve aumentar horizontalmente um sistema quando espera um aumento no tráfego. Também pode escalar horizontalmente em resposta ao desempenho em declínio.

No exemplo do sistema de reservas de hotel, você aumenta o número de instâncias do aplicativo Web quando antecipa tráfego extra devido a um evento especial, uma oferta especial ou flutuações sazonais. Reduz o sistema quando a procura 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, expanda o aplicativo e verifique se o plano melhorou o desempenho do aplicativo.

O exercício utiliza uma aplicação Web de exemplo que implementa uma API Web. A API Web expõe as operações HTTP POST e GET que criam e obtêm as reservas dos clientes para um site de reservas de hotel. As reservas não são guardadas. A operação GET simplesmente recupera dados fictícios.

O exercício também executa uma aplicação cliente que simula vários utilizadores que emite operações POST e GET em simultâneo. Este aplicativo fornece a carga de trabalho que você usa para testar o desempenho do aplicativo Web antes e depois do dimensionamento.

Criar um plano do Serviço de Aplicações e uma aplicação Web

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 ou a partir da Home Page, selecione Criar um recurso. O painel Criar um recurso é exibido.

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

  4. 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 <your-webapp-name> neste exercício.

    Definição valor
    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 insira um novo grupo de recursos chamado mslearn-scale
    Detalhes da instância
    Nome Consulte Nota antes da tabela. Introduza um nome exclusivo de que se possa lembrar mais tarde neste exercício
    Publicar Código
    Pilha de runtime .NET 6 (LTS)
    Sistema operativo Windows
    Região Aceitar padrão
    Plano do Serviço de Aplicações
    Plano do Windows Aceitar padrão
    Plano de preços Aceitar padrão
  5. Selecione Rever + criar>Criar. Aguarde até que o aplicativo Web seja criado e implantado.

Criar e implementar a aplicação Web

  1. Na barra de tarefas do Azure, selecione o ícone do Cloud Shell para abrir o AzureCloud Shell e execute o seguinte comando 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. Vá para a pasta mslearn-hotel-reservation-system/src .

    cd mslearn-hotel-reservation-system/src
    
  3. Crie as aplicações para o sistema de 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 a aplicação Web HotelReservationSystem para publicar.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Aceda à pasta website, que contém os ficheiros publicados. Comprima os ficheiros e implemente-os na aplicação Web que criou na tarefa anterior. Copie o código a seguir para o Bloco de Notas e substitua <your-webapp-name> pelo nome do seu aplicativo Web, cole o bloco de código editado no Cloud Shell e 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. Utilize o seu browser para aceder a http://<your-webapp-name>.azurewebsites.net/api/reservations/1. É apresentado 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.

Monitorizar o desempenho da aplicação Web antes de escalar horizontalmente

  1. Retorne ao Cloud Shell e vá para 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. Descomente a linha que especifica o , e substitua o ReservationsServiceURIvalor NOME DO SEU SITE pelo nome do seu aplicativo Web. O arquivo deve se parecer com 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>
    

    Nota

    A NumClients configuração neste arquivo especifica o número de clientes que podem tentar se conectar simultaneamente ao aplicativo Web e executar trabalho. O trabalho consiste em criar uma reserva e, em seguida, executar uma consulta para buscar os detalhes da reserva. Todos os dados utilizados são falsos. Não estão realmente mantidos em nenhum local. Deixe este valor definido para 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 o TargetFramework, para que ele corresponda à pilha de tempo de execução que você selecionou para seu aplicativo Web. Altere o TargetFramework valor para netcoreapp7.0. O arquivo deve se parecer com 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. Recrie a aplicação cliente de teste com a nova configuração.

    dotnet build
    
  9. Execute a aplicação cliente. Você vê várias mensagens aparecerem quando os clientes começam a ser executados, fazem reservas e executam consultas. Permita que o sistema seja executado durante alguns minutos. As respostas são lentas e logo 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 de menu esquerdo, selecione Monitoramento e, em seguida, selecione 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ática), selecione Últimos 30 minutos e selecione Aplicar.

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

    • Selecione Adicionar métrica e, na lista suspensa Métrica , selecione Tempo da CPU. Em Agregação, selecione Soma.
    • Selecione Adicionar métrica e, na lista suspensa Métrica , selecione Erros do servidor Http. Em Agregação, selecione Soma.
    • Selecione Adicionar métrica e, na lista suspensa Métrica , selecione Http 4xx. Em Agregação, selecione Soma.
    • Selecione Adicionar métrica e, na lista suspensa Métrica , selecione Tempo de resposta. Em Agregação, selecione Média.
  14. Na barra de menus direita, selecione 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 e selecione Criar e fixar.

  16. Permita que o sistema seja executado por cinco minutos para estabilizar e, em seguida, anote o tempo da CPU, o número de erros HTTP 4xx e o tempo médio de resposta. Você deve ver um número significativo de erros HTTP 4xx. Esses erros são erros de tempo limite HTTP 408. O tempo médio de resposta é de vários segundos. Poderá ver o erro de servidor HTTP ocasional, dependendo de como o servidor Web está a lidar com a carga.

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

  17. Deixe a aplicação cliente em execução enquanto realiza a tarefa seguinte.

Aumentar horizontalmente a aplicação Web e verificar a melhoria de desempenho

  1. No portal do Azure, selecione o nome do aplicativo Web (Serviço de aplicativo) e, no painel de menu esquerdo, em Configurações, selecione Expandir (plano do Serviço de Aplicativo). O painel Dimensionamento (plano do Serviço de Aplicativo) é exibido.

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

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

  3. Mude para o Cloud Shell que está executando o aplicativo cliente. Você deve ver menos solicitações falhando com erros, embora algumas ainda atinjam o tempo limite.

  4. Execute a aplicação por mais cinco minutos. Em seguida, vá para o gráfico que mostra as métricas do aplicativo no painel no portal do Azure. Você deve ver que o tempo da CPU aumenta drasticamente porque agora há cinco vezes mais energia da 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 seguinte mostra um conjunto típico de resultados. O ponto em que ocorreu o aumento horizontal está realçado.

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

  5. Se quiser experimentar mais, experimente aumentar a contagem de instâncias do plano do Serviço de Aplicações para dez. O número máximo de instâncias suportadas pela camada S1 é 10. Deve observar um aumento adicional no tempo de CPU e uma redução correspondente no tempo de resposta e nos erros de HTTP 4xx.

  6. Retorne ao Cloud Shell que está executando o aplicativo cliente. Selecione Enter para parar o aplicativo.

  7. No portal do Azure, defina a contagem de instâncias de volta para 1. Selecione seu aplicativo Web e, no painel de menu esquerdo, selecione Dimensionamento (plano do Serviço de Aplicativo). Na guia Configurar, defina a contagem de instâncias como 1 e selecione Salvar.