Le web app rappresentano lo strumento principale che possiamo adottare sulla piattaforma cloud di Microsoft per ospitare i nostri siti, front end o back end. Data la flessibilità di cui dispongono, è normale disporre di più istanze il cui carico viene automaticamente bilanciato tramite round robin. Le istanze poi, possono variare durante la giornata a seconda delle regole di auto scaling, in base ad orari fissi o a seconda dei carichi di CPU o di memoria.
In tutte le situazioni in cui la nostra web app effettua delle elaborazioni, tramite framework come ASP.NET, Java, PHP o node.js, la prima esecuzione della nostra web app è più lenta e può richiedere anche diversi secondi. Con la flessibilità di istanza illustrata in precedenza, inoltre, può verificarsi che un utente si trovi ad essere il primo ad effettuare la richiesta ad un nuovo server, trovandosi con lunghi tempi di risposta.
Per ovviare a questo problema IIS 8 dispone di un modulo nativo, utilizzabile con qualsiasi framework web, che si occupa di effettuare il warmup del nostro applicativo. L'aspetto interessante è che IIS è in grado comunque di restituire contenuti statici e quindi possiamo sfruttare una pagina HTML di attesa. Per usufruire di questa funzionalità dobbiamo intervenire sulla sezione system.webServer.
<configuration>
<system.webServer>
<applicationInitialization
doAppInitAfterRestart="true"
remapManagedRequestsTo="startup.html"
skipManagedModules="true">
<add initializationPage="/default.aspx" />
<!-- hostName facoltativo -->
<add initializationPage="/home/index" hostName="miodominio.it" />
</applicationInitialization>
</configuration>
</system.webServer>Innanzitutto notiamo che nell'elemento applicationInitialization possiamo indicare uno o più URI da richiamare, dei quali però ignora l'esito. Il compito di IIS è di chiamare gli indirizzi nell'ordine stabilito, aspettandone l'esito, e si occupa di farlo anche in caso di riavvio, grazie all'attributo doAppInitAfterRestart. Con l'attributo remapManagedRequestsTo, invece, indichiamo facoltativamente la pagina da restituire all'utente, qualunque sia l'indirizzo che chiede; se omesso IIS restituisce un 503. Nel nostro caso, la pagina startup.html può essere come la seguente, la quale cerca di ricaricare la pagina fino a quando verrà restituito il contenuto reale dell'applicativo.
<html>
<head>
<!-- refresh dopo 5 secondi -->
<meta http-equiv="refresh" content="5">
</head>
<body>
Avvio in corso
</body>
</html>L'aspetto più interessante è relativo al load balancer di Azure. Se nessuna istanza è pronta, restituisce la pagina HTML, mentre se almeno un'istanza è pronta, manda l'utente tra quelle disponibili, fino a quando nuove istanze si possono sfruttare. Il risultato è un'ottima esperienza utente che non nota il variare dei server che mettiamo a disposizione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Integrare modelli AI in un workflow di GitHub
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Le cron expression di un workflow di GitHub
Pubblicare un MCP Server in GitHub MCP Registry
Semplificare i deployment con le label in Azure Container App
Esporre un server MCP con Azure API Management
Scrivere selettori CSS più semplici ed efficienti con :is()
Proteggere l'endpoint dell'agente A2A delle Logic App
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Gestire progetti NPM in .NET Aspire
Configuratione e utilizzo .NET Aspire CLI
Simulare Azure Cosmos DB in locale con Docker


