Sono un Trainer MCT e Consulente IT freelancer; particolarmente sensibile alle tematiche Mobile e Cloud, sono attivo nel mondo Community soprattutto su Windows Azure e Windows Phone. Mi è stato riconosciuto l’MVP per due anni consecutivi e sono pluricertificato su diversi vendor (MS, Sun, Apple, Cisco, IBM).
Con i template di Visual Studio 2010 possiamo creare una applicazione web che si possa distribuire su Azure con pochi click. In particolare dopo aver creato un Cloud Project, viene chiesto quali “ruoli” vogliamo aggiungere al progetto e subito possiamo scegliere (almeno per quanto riguarda il web) tra:
Tutto questo è possibile sia in C# che in VB.NET e ovviamente, una volta aggiunto il ruolo, Visual Studio genererà il codice di esempio del template esattamente come se stessimo creando la corrispettiva applicazione web svincolata da Azure.
Qualcosa però cambia:
Best practices
Sviluppare sul Cloud è come sviluppare per Web Farms. Non sappiamo che server prenderà la richiesta web “dietro” il load balancer, non sappiamo se richieste successive colpiranno lo stesso server e quindi dobbiamo sempre e solo supporre il worst case. Fosse il web di oggi solo ASPX (o risorse scaricate in modo monilitico) non sarebbe un problema; con AJAX però la cosa si complica.
Infatti il codice client potrebbe invocare partial rendering ottenuto da una istanza diversa da quella della macchina che ha erogato la pagina. Motivo per cui dobbiamo, oltre che scrivere AJAX assolutamente stateless, assicurarci di avere la MachineKey identica su tutti i server della farm per evitare che il ViewState vada in errore.
La sessione: nei contesti web farms MAI tenerla sulla singola istanza. Perchè se due richieste successive della stessa sessione logica colpiscono due istanze diverse, la sessione si duplicherà su due macchine (risiedendo in memoria) producendo effetti non controllabili. A questo c’è una soluzione ben rodata e abbastanza stabile che è trasferire la gestione della sessione su storage persistente (tipo SQL Azure, in questo caso), così da creare un singolo entry point per le multiple istanze (anche il TempData di MVC sta in sessione).
La cache: inutile fare local cache sull’istanza in un contesto farm; o meglio non ottimale. Infatti così facendo si “cacha” potenzialmente N volte (dove N è il numero delle istanze) una risorsa che potrebbe essere cachata a monte del load balancer. E su questo ci aiuta AppFabric Caching che fa appunto, proprio così. Inoltre AppFabric Caching non fa solo output cache ma anche Sessione State Cache: il che ci rende finalmente indipendenti da SQL Server per la gestione della sessione (e decisamente più performanti).