14

Mar

Windows Azure – Storage pt.3 – Drives

Questa astrazione nasce dalla esigenza di molti sviluppatori che, fondando parte del proprio codice su una architettura a filesystem, nel passaggio al Cloud si vedono impossibilitati a salvare su disco dati essenziali per l’applicazione e il processo di business. Abbiamo già detto che il ruolo non mantiene le informazioni salvate su disco tra recycles successivi e, anche se si bypassa la natura dell’architettura, non c’è comunque garanzia di mantenimento. Inoltre ogni dato viene comunque cancellato alla rimozione dell’istanza. Per cui è necessario trovare una soluzione per evitare di adattare buona parte del codice: i Drives forniscono tale soluzione.

Un Drive è semplicemente un file VHD a cui siamo abituati, caricato sul blob storage di Azure e “montato” da dentro l’istanza di Azure Compute. Dopodichè tutto il codice all’interno dell’applicazione ASP.NET vedrà l’unità montata come se fosse localmente connessa e potrà leggere/scrivere qualsiasi cosa con le API System.IO.

Un Drive Windows Azure è un page blob di dimensione massima 1TB che può essere aperto in r/w esclusivamente da una sola istanza oppure in concorrenza da più istanze a patto che sia in sola lettura. Per ovvi motivi più commerciali che tecnici, il Drive non può essere montato da remoto, per cui l’unico modo per testare l’API relativa ad essi è farlo su un deployment reale. Nota: il test di tutta la piattaforma può invece essere fatto in locale, poichè il codice non dipenderà in alcun modo dal path effettivo su cui si andranno a fare le operazioni di IO.

Questa operazione è possibile grazie ai Page Blob, quell’astrazione di cui abbiamo parlato che ci consente di accedere ad un blob nell’Azure Storage, non tanto sequenzialmente come siamo abituati a fare, bensì in accesso casuale, specificando cioè il range di settori che vogliamo andare a leggere su un particolare blob.

Ora vediamo una serie di passaggi (tratti dal training ufficiale) che fanno meglio comprendere il meccanismo di utilizzo dei Drives su Windows Azure:

image

image

image

image

Nota: come specificato nell’immagine sopra, è necessario un Flush ogni volta che si vuole effettuare il commit dei dati sul Drive. Per cui impostare le opportune configurazioni (come l’AutoFlush) e/o ricordarsi di chiamare la System.IO.Stream.Flush() dopo ogni scrittura che ci interessa venga propagata subito.

Le operazioni dell’API relativa ai Drives sono veramente semplici e banali, di seguito un estratto di codice che vi permette di fare ciò che abbiamo spiegato. Tra i commenti centrali andrà il codice che abbiamo scritto in precedenza, quando non avevamo ancora nei nostri più lontani pensieri, l’idea che saremmo passati al Cloud Computing:

image

by Roberto Freato on 3/14/2011
Post archive