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
Utilizzare un service principal per accedere a Azure Container Registry
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Creare una libreria CSS universale: Cards
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Utilizzare i primary constructor in C#
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Implementare l'infinite scroll con QuickGrid in Blazor Server
Generare la software bill of material (SBOM) in GitHub
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Sostituire la GitHub Action di login su private registry
Miglioramenti nell'accessibilità con Angular CDK
I più letti di oggi
- Utilizzare angular-cli per creare una direttiva in #angular2 https://aspit.co/bft di @sm15455
- Disponibile la prima preview di #VS2022, con la preview 5 di #dotnet6 https://aspit.co/b7x
- Due nuovi controlli ed esempi in VB nel Windows Phone Toolkit di febbraio 2011
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- le impostazioni sono su #windowslive, quindi basta il liveid per avere tutte le ... http://aspitalia.com/build-win8 #BldWin
- le versioni Community, Professional e Enterprise di #VS2019 sono disponibili al download.su #MSDN downloads ci sono anche le chiavi. download a partire da https://aspit.co/bur
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Proteggere le risorse Azure con private link e private endpoints
- Effettuare l'encoding e il decoding JPEG delle immagini con Windows Phone
- la nostra app per #win8 è nello store che vi aspetta da qualche mese: provatela! contenuti, forum e push! https://aspit.co/pd