Esercizio - Ridimensionare un'app Web manualmente
Quando si prevede un aumento del traffico, è opportuno ampliare il livello di servizio di un sistema. L'ampliamento potrebbe essere eseguito anche in risposta al calo delle prestazioni.
Nell'esempio del sistema di prenotazioni di hotel, il numero di istanze dell'app Web viene aumentato qualora si preveda del traffico aggiuntivo a causa di un evento speciale, un'offerta speciale o per fluttuazioni stagionali. Quando la domanda cala, si riducono di nuovo le prestazioni del sistema.
In questo esercizio, viene creato un piano di servizio app che sarà usato per distribuire un'app Web. Vengono monitorate le prestazioni dell'app Web sotto carico. Aumentare quindi il numero di istanze dell'app e verificare che il piano abbia migliorato le prestazioni dell'app.
L'esercizio usa un'app Web di esempio che implementa un'API Web. L'API Web espone le operazioni HTTP POST e GET che creano e recuperano le prenotazioni dei clienti per un sito Web di prenotazioni di hotel. Le prenotazioni non vengono salvate. L'operazione GET recupera semplicemente i dati fittizi.
Durante l'esercizio viene eseguita anche un'app client che simula la generazione di operazioni GET e POST da parte di vari utenti simultaneamente. Questa app fornisce il carico di lavoro che usato per testare le prestazioni dell'app Web prima e dopo il ridimensionamento.
Creare un piano di servizio app e un'app Web
Importante
Per eseguire questo esercizio è necessario disporre di una propria sottoscrizione di Azure e questo potrebbe comportare dei costi. Se non hai ancora una sottoscrizione di Azure, crea un account gratuito prima di iniziare.
Accedere al portale di Azure.
Nel menu del portale di Azure o nella home page selezionare Crea una risorsa. Viene visualizzato il riquadro Crea una risorsa.
Nel riquadro del menu a sinistra in Categorie selezionare Web, cercare e selezionare App Web e quindi selezionare Crea. Verrà visualizzato il riquadro Crea app Web.
Nella scheda Informazioni di base immettere i valori indicati di seguito per ogni impostazione.
Nota
L'app Web deve avere un nome univoco. È consigliabile usare un nome simile a <nome o iniziali>hotelsystem. Usare questo nome ogni volta che è presente l'indicazione
<your-webapp-name>
in questo esercizio.Impostazione Valore Dettagli del progetto Abbonamento Selezionare la sottoscrizione di Azure che si vuole usare per questo esercizio Gruppo di risorse Selezionare il collegamento Crea nuovo e immettere un nuovo gruppo di risorse denominato mslearn-scale. Dettagli dell'istanza Nome Vedere la Nota prima della tabella. Immettere un nome univoco che sarà possibile ricordare più avanti in questo esercizio Pubblicazione Codice Stack di runtime .NET 6 (LTS) Sistema operativo Windows Paese Accettare l'impostazione predefinita Piano di servizio app Piano Windows Accettare l'impostazione predefinita Piano tariffario Accettare l'impostazione predefinita Selezionare Rivedi e crea>Crea. Attendere che l'app Web venga creata e distribuita.
Creare e distribuire l'app Web
Nella barra delle applicazioni di Azure selezionare l'icona Cloud Shell per aprire Azure Cloud Shell ed eseguire il comando seguente per scaricare il codice sorgente per il sistema di prenotazione hotel.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Passare alla cartella mslearn-hotel-reservation-system/src.
cd mslearn-hotel-reservation-system/src
Compilare le app per il sistema di prenotazioni di hotel. Sono disponibili due app: un'app Web che implementa l'API Web per il sistema e un'app client che viene usata per il test di carico dell'app Web.
dotnet build
Preparare l'app Web HotelReservationSystem per la pubblicazione.
cd HotelReservationSystem dotnet publish -o website
Passare alla cartella website, che contiene i file pubblicati. Comprimere i file e distribuirli nell'app Web creata nell'attività precedente. Copiare il codice seguente nel Blocco note e sostituire
<your-webapp-name>
con il nome dell'app Web, quindi incollare il blocco di codice modificato in Cloud Shell ed eseguirlo.cd website zip website.zip * az webapp deploy --src-path website.zip --name <your-webapp-name> --resource-group mslearn-scale
Usare il Web browser per passare a
http://<your-webapp-name>.azurewebsites.net/api/reservations/1
. Verrà visualizzato un documento JSON con i dettagli della prenotazione n. 1.
Monitorare le prestazioni dell'app Web prima di eseguire il ridimensionamento
Tornare a Cloud Shell e passare alla cartella ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.
cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
Modificare il file App.config in questa cartella usando l'editor di codice.
code App.config
Rimuovere il commento dalla riga che specifica
ReservationsServiceURI
e sostituire il valore YOUR WEBSITE NAME con il nome dell'app Web. Il file avrà un aspetto simile all'esempio seguente.<?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
L'impostazione
NumClients
in questo file specifica il numero di client che tenteranno contemporaneamente di connettersi all'app Web e di eseguire operazioni. Le operazioni consistono nella creazione di una prenotazione e quindi nell'esecuzione di una query per recuperare i dettagli della prenotazione. Tutti i dati usati sono fittizi. Non vengono salvati in modo permanente in alcuna posizione. Lasciare questo valore impostato su100
.Salvare il file premendo CTRL+S.
Modificare il file HotelReservationSystemTestClient.csproj in questa cartella usando l'editor di codice.
code HotelReservationSystemTestClient.csproj
Modificare la riga che specifica
TargetFramework
, in modo che corrisponda allo stack di runtime selezionato per l'app Web. Modificare il valoreTargetFramework
innetcoreapp7.0
. Il file avrà un aspetto simile all'esempio seguente.<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>
Salvare il file premendo CTRL+S e chiudere l'editor di codice premendo CTRL+Q.
Ricompilare l'app client di test con la nuova configurazione.
dotnet build
Eseguire l'app client. Vengono visualizzati vari messaggi mentre i client vengono avviati, effettuano le prenotazioni ed eseguono le query. Consentire l'esecuzione del sistema per un paio di minuti. Le risposte sono lente e presto le richieste client inizieranno ad avere esito negativo con errori HTTP 408 (timeout).
dotnet run
Nel portale di Azure selezionare Vai alla risorsa per aprire l'app Web.
Nel riquadro del menu a sinistra selezionare Monitoraggio e quindi selezionare Metriche.
Sul lato destro della barra dei menu del riquadro dell'app Web selezionare l'intervallo di tempo Ora locale: Ultime 24 ore (automatico), selezionare Ultimi 30 minuti e quindi selezionare Applica.
Nel riquadro in Titolo grafico aggiungere le metriche seguenti al grafico:
- Selezionare Aggiungi metrica e nell'elenco a discesa Metrica selezionare Tempo CPU. Selezionare Somma in Aggregazione.
- Selezionare Aggiungi metrica e nell'elenco a discesa Metrica selezionare Errori del server HTTP. Selezionare Somma in Aggregazione.
- Selezionare Aggiungi metrica e nell'elenco a discesa Metrica selezionare Http 4xx. Selezionare Somma in Aggregazione.
- Selezionare Aggiungi metrica e nell'elenco a discesa Metrica selezionare Tempo di risposta. Selezionare Media in Aggregazione.
Nella barra dei menu a destra selezionare Aggiungi al dashboard. Verrà visualizzato il riquadro Aggiungi al dashboard. Selezionare la scheda Crea nuova.
Nell'elenco a discesa Nome dashboard immettere il nome dell'app Web e quindi selezionare Crea e aggiungi.
Consentire l'esecuzione del sistema per cinque minuti, in modo che si stabilizzi, quindi prendere nota del tempo della CPU, del numero di errori HTTP 4xx e del tempo medio di risposta. Verrà visualizzato un numero significativo di errori HTTP 4xx. Questi sono errori di timeout HTTP 408. Il tempo medio di risposta è di diversi secondi. Potrebbe essere visualizzato l'errore server HTTP occasionale, a seconda del modo in cui il server Web tenta di gestire il carico di lavoro.
Lasciare l'app client in esecuzione mentre si esegue l'attività successiva.
Ampliare il livello di servizio dell'app Web e verificare il miglioramento delle prestazioni
Nel portale di Azure selezionare il nome dell'app Web (Servizio app) e nel riquadro del menu a sinistra in Impostazioni, selezionare Aumenta istanze (piano di servizio app). Viene visualizzato il riquadro Aumenta istanze (piano di servizio app).
Nella scheda Configura selezionare Scalabilità manuale e impostare il valore di Conteggio istanze su 5. Seleziona Salva.
Passare all'istanza di Cloud Shell che esegue l'app client. Si noterà un numero minore di richieste con errori, anche se si verifica ancora un timeout.
Eseguire l'app per altri cinque minuti. Passare quindi al grafico che mostra le metriche dell'app nel dashboard del portale di Azure. Si noterà che il tempo di CPU è aumentato notevolmente poiché ora è disponibile una potenza della CPU cinque volte maggiore. Il tempo medio di risposta dovrebbe diminuire e anche il numero di errori HTTP 4xx dovrebbe diminuire. Il grafico seguente mostra un set di risultati tipico. È indicato il punto in cui si è verificato l'ampliamento.
Se si vuole continuare a sperimentare, provare ad aumentare a 10 il numero di istanze per il piano di servizio app. Il numero massimo di istanze supportato dal livello S1 è 10. Si noterà un aumento ulteriore del tempo di CPU e una diminuzione corrispondente del tempo di risposta e degli errori HTTP 4xx.
Tornare all'istanza di Cloud Shell che esegue l'app client. Premere INVIO per arrestare l'app.
Nel portale di Azure reimpostare il numero di istanze su 1. Selezionare l'app Web e nel riquadro del menu a sinistra selezionare Aumenta istanze (piano di servizio app). Nella scheda Configura, impostare il numero di istanze su 1 e quindi selezionare Salva.