Exercício – Dimensionar um aplicativo Web manualmente
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.
Entre no portal do Azure.
No menu do portal do Azure ou na Página Inicial, selecione Criar um recurso. O painel Criar um recurso será exibido.
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.
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 Selecione Examinar + criar>Criar. Aguarde até que o aplicativo Web seja criado e implantado.
Criar e implantar o aplicativo Web
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.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Acesse a pasta mslearn-hotel-reservation-system/src.
cd mslearn-hotel-reservation-system/src
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
Prepare o aplicativo Web HotelReservationSystem para publicação.
cd HotelReservationSystem dotnet publish -o website
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 deploy --src-path website.zip --name <your-webapp-name> --resource-group mslearn-scale
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.
Monitorar o desempenho do aplicativo Web antes da escala horizontal
Volte para o Cloud Shell, depois acesse a pasta ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.
cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
Edite o arquivo App.config nesta pasta usando o editor de código.
code App.config
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 como100
.Salve o arquivo selecionando Ctrl+S.
Edite o arquivo HotelReservationSystemTestClient.csproj nesta pasta usando o editor de código.
code HotelReservationSystemTestClient.csproj
Edite a linha que especifica
TargetFramework
, de modo que ela corresponda à pilha de runtime selecionada para seu aplicativo Web. Altere o valor deTargetFramework
paranetcoreapp7.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>
Salve o arquivo selecionando Ctrl+S e feche o editor de código pressionando Ctrl+Q.
Recompile o aplicativo de cliente de teste mais uma vez com a nova configuração.
dotnet build
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
No portal do Azure, selecione Ir para o recurso para abrir seu aplicativo Web.
No painel do menu à esquerda, selecione Monitoramento, depois Métricas.
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.
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.
Na barra de menus à direita, clique em Fixar no painel. O painel Fixar no painel é exibido. Selecione a guia Criar Novo.
Na lista suspensa Nome do painel, insira o nome do aplicativo Web, depois clique em Criar e fixar.
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.
Deixe o aplicativo cliente em execução enquanto você executa a próxima tarefa.
Expandir o aplicativo Web e verificar a melhoria de desempenho
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.
Na guia Configurar, selecione Escala manual e defina Contagem de instâncias como 5. Selecione Salvar.
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.
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.
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.
Volte para o Cloud Shell que está executando o aplicativo cliente. Pressione Enter para interromper o aplicativo.
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.