Autore: Attilio Gelosa
Azure Storage è una parte importante dell’infrastruttura di Microsoft Azure. Se si pensa ad Azure Storage come a un enorme hard disk, ed a quanto un hard disk sia importante nei moderni computer, si può capire perché sia un elemento così rilevante nel complesso dell’infrastruttura. Banalizzando al massimo, Azure Storage è quindi un contenitore molto capiente che funge da hard disk: molto potente che mette a disposizione una serie di servizi interessanti.
Gli ingegneri e gli sviluppatori di Microsoft hanno progettato e realizzato Azure Storage con in testa degli obiettivi molto precisi:
- Scalabilità: può tranquillamente gestire e processare in modo efficace ed efficiente sia i terabyte dei data warehouse per i big data sia i byte dei dati personali. È quindi possibile trattare qualsiasi dimensione di dato al massimo delle performance.
- Flessibilità: aiuta a pensare in grande guardando verso un orizzonte molto lontano, ma permette di partire in piccolo con i piedi ben piantati per terra e di crescere alla velocità che ti serve.
- Bilanciamento del carico: utilizza un sistema di auto-partizionamento che automaticamente bilancia il carico derivante dai dati basandosi sul traffico generato. Ciò significa che se le richieste delle applicazioni crescono, Azure Storage è in grado di assegnare automaticamente le risorse adeguate per soddisfarle.
- Accesso da dispositivi multipli: non è importante se stai usando uno smartphone, un laptop, un desktop o se stai lavorando su un server, se stai usando un’applicazione mobile, web o desktop, Azure Storage è accessibile da ogni tipo di dispositivo e da ogni tipo di applicazione.
- Supporto a sistemi operativi e linguaggi/framework multipli: è possibile accedere ad Azure Storage da diversi sistemi operativi (tra cui Windows, Linus e OS X) usando un numero incredibile di linguaggi e framework (tra cui .NET, Java, Node.js, PHP, Ruby e Python).
Un’altra caratteristica, non tecnica, ma che è altrettanto importante sottolineare è che Azure Storage, come tutta l’infrastruttura di Microsoft Azure, è Pay-per-Use, ossia si paga esclusivamente all’utilizzo effettivo.
Concetti Generali
Per accedere e utilizzare tutti i servizi messi a disposizione da Azure Storage è necessario avere un Azure Storage Account. Di cosa si tratta? Un Azure Storage Account è un meccanismo che fornisce un namespace univoco per tutti i dati che si riversano in Azure Storage, permette di usare i servizi di Blob Storage, Table Storage, Queue Storage e File Storage.
Bello! Ora, come faccio a ottenere un Azure Storage Account? Semplicissimo, hai bisogno di una sottoscrizione a Microsoft Azure! Spiegare come sottoscriversi a Microsoft Azure non rientra tra gli obiettivi di questo articolo, ma è possibile approfondire la cosa qui.
Azure Storage mette a disposizione due tipi di Account:
- Standard: include i seguenti i servizi Blob Storage, Table Storage, Queue Storage and File Storage
- Premium: utilizzato esclusivamente per la gestione degli hard disk delle Azure Virtual Machine
Standard Storage Account
Un singolo Standard Storage Account può contenere fino a 500GB di dati indipendentemente dal loro formato o servizio usato e permette di lavorare con quattro tipologie distinte di servizi:
- Blob Storage
- Table Storage
- Queue Storage
- File Storage
Possiamo dare un quadro riassuntivo con lo schema sottostante.
Cerchiamo ora di capire un po’ meglio di cosa si tratta.
Blob Storage
Blob è proprio l’acronimo di Binary Large Object ossia un oggetto binario di grandi dimensioni. Questo servizio quindi permette di memorizzare e manipolari file anche di grosse dimensioni come documenti, file multimediali, file di log o altro.
Il Blob Storage è organizzato in container che è possibile immaginare come una sorta di directory. Non vi è limite al numero di container contenuti in uno Storage Account così come non vi è limite al numero di blob inseribili in un container. Ciascun Container ha una proprietà che definisce il livello di accessibilità allo stesso; questa proprietà può assumere i seguenti valori:
- Full public read access: l’accesso al container e ai dati in esso contenuti posso essere fatto con una richiesta anonima.
- Public read access for blobs only: l’accesso ai soli dati contenuti nel container può essere fatto con una richiesta anonima.
- No public read access: l’accesso al container e ai dati contenuti può essere fatto solo dal proprietario dell’account.
Un Blob Storage mette a disposizione tre tipi di blob:
- Block blobs: sono pensati per lo streaming e il mantenimento di file. Sono un’ottima scelta per memorizzare documenti, file multimediali, backup, etc.
- Append blobs: sono molto simili ai Block blob, ma sono ottimizzati per le operazioni di append (in fondo al file; non è possibile fare modifiche in posizioni interne). Sono la scelta migliore per i file di log.
- Page blobs: sono ottimizzati per lavorare come dischi IaaS e permettono la scrittura in posizione random. Hanno dimensione massima di 1 TB.
Table Storage
È un formato di memorizzazione in formato tabellare (righe e colonne) che usa una serie di coppie chiave/valore per descrive un elemento (detto entità); tale formato permette di cercare e/o filtrare le entità in modo simile a quello usato nei DBMS relazionali, ma senza avere i vincoli tipici dei DBMS relazionali.
Uno Storage Account può contenere un numero illimitato di tabelle e una tabella può a sua volta contenere un numero illimitato di entità fino alla dimensione massima consentita dallo Storage Account.
Ciascuna entità può contenere fino a un massimo di 255 proprietà, ma deve necessariamente contenere queste tre:
- PartitionKey: è un valore che permette di partizionare in modo del tutto trasparente la tabella per motivi di efficienza quando questa diventa eccessivamente grande
- RowKey: è un identificatore univoco della riga nella tabella; può essere al massimo di 1 KB
- Timestamp: di tipo DateTime è usato per tenere traccia dell’ultimo update della riga
È importante sottolineare che è la coppia PartitionKey e RowKey a definire l’unicità dell’entità inserita nella tabella.
Queue Storage
È un formato di memorizzazione che permette di salvare le informazioni in una coda FIFO garantendo la persistenza del dato. Uno Storage Account può contenere un numero illimitato di code e ciascuna coda può contenere un numero illimitato di messaggi fino al raggiungimento della dimensione massima consentita dallo Storage Account.
Ciascun messaggio deve essere codificato in formato UTF-8 e può essere al massimo di 64 KB; inoltre ciascun messaggio ha una propria visibilità che lo rende visibile o invisibile ai fruitori della coda. Sui messaggi è possibile eseguire le seguenti operazioni:
- Put: aggiunge un nuovo messaggio alla fine della coda
- Get: recupera uno o più messaggi dalla testa della coda
- Peek: recupera uno o più messaggi dalla testa della coda
- Delete: cancella un messaggio
- Clear: cancella tutti i messaggi presenti nella coda
- Update: modifica il contenuto di un messaggio
Che differenza c’è tra Get e Peek? Get recupera uno o più messaggi dalla coda modificando la visibilità degli stessi così che nessun altro fruitore della coda possa accedervi. Una volta usato il Get per rimuovere effettivamente il messaggio dalla coda devo usare il comando Delete. Peek, di contro, recupera uno o più messaggi dalla testa della coda, ma non cambia lo stato di visibilità degli stessi.
File Storage
Forse il meno usato da uno sviluppatore, si utilizza con i software legacy che richiedono l’accesso al protocollo di condivisione SMB per la gestione di file eventualmente organizzati in directory. Uno Storage Account può contenere più share e ciascuna share può contenere file e directory (anche zero…). Il concetto di file è del tutto simile a quello che conosciamo per il file system del nostro PC: è l’insieme di dati binari, proprietà e metadati.
Come sui file system tradizionali, prima di poter operare su un file è necessario aprirlo (ossia creare una referenza per l’accesso). Una volta aperto, su di un file è possibile eseguire le seguenti operazioni:
- None: il file è aperto per leggere gli attributi
- Read: il file è aperto in sola lettura
- Write: il file è aperto in sola scrittura
- Read/Write: il file è aperto in lettura e scrittura
- Delete: il file è aperto per essere cancellato
I file inoltre possono essere aperti in condivisione (share mode):
- None: il file è aperto in modo esclusivo; nessun altro può accedervi finché il file non è chiuso
- Shared Read: permette successive aperture del file in sola lettura
- Shared Write: permette successive aperture del file in sola scrittura
- Shared Read/Write: permette successive aperture del file in lettura e scrittura
- Shared Delete: permette successive aperture del file per la cancellazione
Premium Storage Account
Al momento uno Storage Account Premium supporta solo i dischi virtuali delle Azure Virtual Machine. Questo tipo di account è gestito su hard disk SSD e ha delle prestazioni tipiche per l’utilizzo con macchine virtuali:
- Una macchina virtuale può agganciare più Premium Azure Storage fino a un massimo di 64 TB
- 80000 IOPS (input/output operations per second)
- 2000 MB al secondo di throughput
Maggiori informazioni qui.
Creare uno Storage Account
Una volta attivata una sottoscrizione, si può accedere al portale di Microsoft Azure (qui) e facendo un click su “New” -> “Data + Storage” comparirà la tile per aprire un nuovo Storage Account, come mostra la figura 1.
Figura 1 – Wizard Microsoft Azure
NB: è possibile creare fino a un massimo di 100 Storage Account per ogni sottoscrizione.
Facendo click sulla tile Storage account si aprirà una lama, figura 2, che dà la possibilità di iniziare il processo di creazione di un nuovo Storage Account: è sufficiente fare click sul bottone Create. Attraverso il combobox Select a Deployment Model sarà possibile decidere quale modello di rilascio usare per questo Storage Account. Le scelte possibili sono solo due: Resource Manager e Classic. Microsoft consiglia di usare la modalità Resource Manager e di convertire le risorse già rilasciate con la modalità Classic dove possibile. Per maggiori informazioni in merito ai profili, potete consultare questo articolo qui.
Figura 2 – Creazione Storage Account
Una volta cliccato sul pulsante di creazione, si aprirà una nuova scheda, come mostra la figura 3, che vi darà la possibilità di inserire le informazioni utili a creare lo storage.
Figura 3 – Parametri Creazione
Vediamo prima le informazioni obbligatorie:
- Name: è il nome univoco dello Storage Account che si vuole creare; l’univocità del nome deve essere a livello globale (la verifica è automatica e istantanea) e deve sottostare ad alcune regole: deve essere lungo tra 3 e 24 caratteri e può contenere solo lettere minuscole e numeri.
- Type: permette di scegliere il livello di servizio e quindi il prezzo. Al momento ci sono 5 livelli possibili. Questa scelta è importante perché permette di scegliere tra un account Standard e uno Premium. Per creare uno Storage Account Standard è sufficiente scegliere come tipo: L, G, R o Z mentre per creare uno Storage Account Premium è necessario scegliere il tipo P. Una volta scelto il tipo desiderato (nel nostro caso: “L Locally Reduntant”) è sufficiente premere il bottone “Select”, come mostra la figura 4.
Figura 4 – Selezione Piano Storage
- Resource Group: è un contenitore di risorse utile per organizzare e gestire al meglio le risorse all’interno del nostro Azure Account (maggiori informazioni sul Resource Group qui). In questo caso è possibile sceglierne uno o usare un Resource Group già esistente. Nel caso si voglia creare un nuovo Resource Group è sufficiente digitare il nome. Anche in questo caso abbiamo delle regole da seguire; il nome può contenere solo: lettere, numeri, trattini “-“, underscore “_”, punti “.” (ma non alla fine del nome) e parentesi “(“ e “)”. Nel caso invece si voglia scegliere un Resource Group esistente si aprirà una nuova lama che ci permetterà di scegliere il Resource Group desiderato come mostra la figura 5.
Oltre alle informazioni obbligatorie abbiamo anche quelle non obbligatorie, che sono comunque importanti:
- Diagnostics: se abilitato permette di registrare informazioni diagnostiche sull’uso dello Storage Account. Le informazioni sono salvate all’interno dello stesso Storage Account.
- Subscription: permette di scegliere a quale Azure Subscription agganciare. Questo vi permette, nel caso siate dei possessori di più sottoscrizioni, di poter decidere come distribuire le vostre risorse.
- Location: permette di scegliere in quale data center creare lo Storage Account. Questa scelta è importante perché gestire risorse che si trovano in data center diversi può avere impatti anche importanti sul costo finale. Inoltre, ma questa è una regola generale, gli accessi a risorse più “distanti” sono più “lente”.
- Pin to dashboard: se selezionato permette di inserire immediatamente e automaticamente una tile sulla “home” del portale.
Ora è sufficiente premere sul bottone “Create” per avere il nostro primo Storage Account.
Come sviluppare e lavorare con lo Standard Storage Account
Dato che il Premium Storage Account ad oggi è usato esclusivamente per la gestione dei dischi delle Azure Virtual Machine, la domanda che ci possiamo porre è: come posso sviluppare e lavorare con uno Standard Storage Account?
Se teniamo in considerazione che Azure Storage in fondo non è altro che un servizio web, ci potremmo aspettare che da qualche parte esistano degli endpoint con cui interagire. Effettivamente è così, una volta creato un Azure Storage Account, saranno accessibili attraverso questi indirizzi:
- Blob: http://ilmiostorageaccount.blob.core.windows.net
- Table: http://ilmiostorageaccount.table.core.windows.net
- Queue: http:/ ilmiostorageaccount.queue.core.windows.net
- File: http://ilmiostorageaccount.file.core.windows.net
Dove ilmiostorageaccount è il nome dell’Azure Storage Account che abbiamo indicato in fase di creazione. Possiamo accedere ai vari servizi di storage esclusivamente via chiamate REST? Per fortuna nostra no, dato che esistono altre possibilità che forse per uno sviluppatore sono più agevoli:
- .NET
- Codice nativo (C++)
- Java/Android
- Node.js
- PHP
- Ruby
- Python
- PowerShell
Insomma… ce n’è per tutti i gusti!
Si, ma… all’atto pratico? Semplice! È sufficiente:
- Scaricare la libreria scelta
- Impostare una connection string
- Usare i metodi messi a disposizione per interagire con i vari servizi
Questo però lo vedremo nei prossimi articoli…
Conclusioni
Microsoft Azure mette a disposizione degli sviluppatori un sistema di storage molto potente, flessibile e affidabile. Usarlo è davvero semplice e tutto comincia dal creare uno Storage Account. Fatto questo si apre un mondo di possibilità per la memorizzazione efficace ed efficiente dei dati.
A seconda delle esigenze specifiche possiamo usare un Blob Storage (per memorizzare file come in un comune file system), un Table Storage (se vogliamo lavorare con tabelle righe e colonne RDMS style), un Queue Storage (se voglia gestire code di messaggi) e/o un File Storage (per venire incontro ai software che lavorano solo con lo standard SMB).