1

Apr

DotNetLombardia – Storia di una migrazione a Windows Azure

Finalmente dopo qualche settimana di pianificazione e un pò di sforzi, DotNetLombardia è completamente Cloud!!! Come molti sanno, DNL è una soluzione web basata su Community Server (oggi Telligent Community 5.6) che, a detta dello stesso supporto Telligent (http://telligent.com/community/ideas/f/532/t/1058867.aspx) non dovrebbe girare su Azure.

Questo perchè il database utilizza cose “non permesse” e, problema veramente gigantesco, non c’è accesso ai sorgenti per modificare le parti necessarie all’adattamento: ma non mi sono dato per vinto.

SQL Azure

Per prima cosa bisognava migrare il Database a SQL Azure. Ho tentato candidamente di fare un export/import su SQL Azure ma ovviamente (a conferma di quanto detto dal supporto) la cosa non ha funzionato. Ho modificato quà è là il T-SQL finchè potevo, poi ho chiesto a Gioffy (grazie!) se poteva convertire una ventina di porzioni incriminate in qualcosa di consentito. In particolare il problema si presentava con le sp_preparedocument e la chiamata a OPENXML, sostituite con nodes() e values() come in questo articolo http://blogs.msdn.com/b/sajid/archive/2010/04/22/restrictions-of-stored-procedures-in-sql-azure.aspx. A questo punto con un pò di fortuna ho fatto girare lo script e ho congelato la struttura DB. I dati sono stati una passeggiata.

Windows Azure

Microsoft non millanta quando dice che migrare a Windows Azure è semplice come fare l’upload della tua attuale soluzione: è avvenuto proprio questo. Ho fatto un ServiceConfig, un ServiceDef e ho usato a manina la CSPack per creare il package dell’attuale applicazione web Telligent Community. Dopo aver atteso una mezz’ora il servizio era running con alcuni difetti: difetti “fixabili” nei vari file di configurazione (che però purtroppo erano nel package, quindi re-deploy). Il punto fallace è infatti che senza accesso ai sorgenti (a meno di soluzioni-bestia) non è stato possibile esternalizzare i parametri nel ServiceConf.

File Storage – la resa

Telligent Community utilizza di default una cartella su FileSystem per salvare i file: immagini, allegati dei post, archivi, etc.. Questa cosa sebbene l’avrei potuta rendere possibile su Azure, sarebbe stata la fine, poichè mi avrebbe reso dipendente dalla situazione post-deploy ed invalidato completamente l’ottica Cloud che tanto stavo cercando di percorrere. Perciò la prima soluzione era elegante ma un bit complessa. L’idea era infatti di trovare un modo per montare all’interno dell’istanza un drive vhd opportunamente caricato con i files attuali e su cui l’istanza Azure avrebbe continuato a salvare tutto. Poi nella configurazione avrei detto di puntare al drive montato. Problema quasi insormontabile: il percorso del disco montato l’avrei saputo a runtime, mentre la configurazione, sempre per i motivi sopra, avrei dovuto cambiarla a deploy-time.

Amazon S3 mi ha salvato e ha aggiunto la chicca a questa soluzione di Cloud Integration. Infatti Telligent Community prevedeva l’utilizzo di un provider alternativo per il salvataggio dei files, proprio in S3 (l’analogo dell’Azure Storage di Amazon AWS). Così, con qualche modifica nella configurazione, qualche test e qualche rename massivo (S3 è case sensitive), la soluzione ha ricominciato a funzionare.

Conclusioni

La soluzione dopo alcuni test è una bomba di velocità. Siamo passati da un Atom 1ghz con 1000MB di RAM ad una istanza Azure, la cosa dovrebbe commentarsi da sola. L’unico problema è che ogni tanto qualche chiamata a S3 non va in porto e quindi alcuni elementi grafici rimangono non renderizzati. Inoltre, problema non da poco ma che non ha bloccato il deploy, l’ora di sistema: infatti SQL Azure gira a UTC-0 senza ore solari (per cui due ore indietro nel nostro caso). Questo significa che siccome Telligent usa la metà delle volte l’ora di sistema e l’altra metà l’ora del database e una ulteriore metà (siamo già a tre metà) l’ora del client, fa un pò di confusione con l’orario dei post. Risultato: i post “escono da 1 a 2 ore dopo l’effettivo submit nel sistema”. Problema che risolverò con calma.

Quindi oggi DotNetLombardia è la prima community italiana a girare completamente sul Cloud e ad avere il tier applicativo e database su Azure (Ad oggi, non conosco casi analoghi ma accetto smentite Smile).

Sexy/Cool!

by Roberto Freato on 4/1/2011
Post archive