Il potere di Azure Cosmos DB nel cloud: il database multimodello scalabile e sicuro

Posted by danieleperugini on Thursday, June 8, 2023

Il potere di Azure Cosmos DB nel cloud: il database multi modello scalabile e sicuro

Azure Cosmos DB è il potente database NoSQL e relazionale progettato per il cloud di Azure. In questo articolo voglio esplorare brevemente le caratteristiche principali di questo servizio, e vedremo come Cosmos DB si distingue nel campo dei database distribuiti, offrendo prestazioni eccezionali e scalabilità per le aziende che fanno un uso intensivo dei dati.

Cos’è Azure Cosmos DB?

Azure Cosmos DB è un servizio database completamente gestito, realizzato da Microsoft, che implementa sia modelli di storage dei dati NoSQL che relazionali.

Azure Cosmos DB offre diverse API per i database, tra cui NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin e Table. Utilizzando queste API, è possibile modellare dati del mondo reale utilizzando modelli di dati basati su documenti, chiave-valore, grafo, colonnari o relazionali. Per cui non esistono modelli migliori o peggiori, ma tutto dipende dai dati con cui si vuole lavorare.

Queste API consentono alle applicazioni di poter interagire con il database come se si trattasse di un’altra tecnologia. Ed ovviamente questo è un grosso vantaggio quando si vuole migrare gradualmente un’applicazione.

Inoltre, Cosmos DB ha un’altra particolarità rispetto a molti altri database: è stato progettato da zero per implementare un’architettura distribuita.

L’architettura distribuita, progettata per il massimo delle performance e della sicurezza

Quando si parla di architettura distribuita, ci si riferisce al modo in cui i dati vengono archiviati e gestiti all’interno del servizio. In pratica, invece di essere limitato a un singolo server o a una singola posizione geografica, Azure Cosmos DB distribuisce i dati su più nodi e anche su più regioni geografiche in tutto il mondo.

regioni disponibili per Cosmos DB

Il portale di Azure permette di scegliere le regioni in cui distribuire il database, a miglioramento di performance e di sicurezza dei dati.

Questo approccio distribuito offre diversi vantaggi. Innanzitutto, consente una maggiore disponibilità dei dati perché i dati sono replicati su più regioni. Se una regione (o un nodo) dovesse subire un’interruzione o un guasto, i dati sarebbero ancora accessibili e disponibili in altre regioni, garantendo il funzionamento dell’intero sistema.

Inoltre, l’architettura distribuita di Cosmos DB contribuisce a migliorare le prestazioni e la latenza. Dal momento che i dati sono replicati in diverse regioni, l’accesso ai dati può essere indirizzato alla regione geograficamente più vicina all’utente o all’applicazione che effettua la richiesta. Questo riduce la latenza di rete e di conseguenza le prestazioni.

L’architettura distribuita di Cosmos DB consente anche di poter scalare velocemente le prestazioni del sistema anche in caso di picchi di lavoro improvvisi, aggiungendo o rimuovendo nodi suo sistema.

Quindi, si. Se vuoi migrare il tuo carico di lavoro attuale verso il cloud per ottimizzare costi, sicurezza e performance, Azure Cosmos DB rappresenta una valida offerta di Azure.

Multi region writes: niente più colli di bottiglia in scrittura

La funzionalità di scrittura multi-regione in Cosmos DB è un potente strumento che consente di scrivere dati in simultanea su più regioni geografiche distribuite. Questo significa che le modifiche apportate ai dati vengono replicate su diverse regioni, consentendo di migliorare la disponibilità, la resilienza e la latenza dei dati.

Tuttavia, quando si utilizza la scrittura multi-regione bisogna fare alcune considerazioni importanti in termini di consistenza dei dati. Dal momento che le modifiche vengono replicate su più regioni, possono verificarsi ritardi temporali nella sincronizzazione delle copie dei dati. Questo può portare a una leggera inconsistenza dei dati tra le regioni, perchè le modifiche potrebbero non essere immediatamente visibili in tutte le copie dei dati.

Quindi Cosmos DB mette a disposizione una “funzionalità” chiamata “livelli di consistenza” che serve appunto a gestire la strategia da adottare sui tempi di sincronizzazione. Questo permette di avere il bilanciamento migliore tra tempi di risposta del database e consistenza dei dati per ogni caso d’uso.

Il livello di consistenza va infatti a definire come i dati vengono replicati in funzione del tempo. L’idea generale è che più il livello di consistenza sarà orientato verso la maggiore integrità dei dati, e più le prestazioni potrebbero degradare a causa del tempo necessario per riorganizzare i dati nel modo corretto.

Al contrario, il livello di consistenza orientato al massimo delle prestazioni potrà inficiare sull’ordine di replica dei dati sui nodi, portando a letture diverse in regioni diverse. In alcuni casi però questo potrebbe essere accettabile, in cambio di prestazioni migliori.

schema rappresentante i livelli di consistenza di Cosmos DB

fonte immagine Microsoft

Un’altra interessante funzione che fa di Cosmos DB un servizio davvero interessante, è la possibilità di integrazione con Synapse in modo semplice e diretto.

In un precedente articolo ho scritto dell’importanze delle architetture HTAP per l’analisi dei dati. Sono architetture che eliminano tutta la complessità dei processi di movimentazione dei dati da una sorgente dati al data warehouse dove vengono analizzati.

Cosmos DB permette di implementare una architettura HTAP insieme ad Azure Synapse utilizzando il primo come la fonte dati transazionale e il secondo come la piattaforma di analisi.

Dal momento che stiamo parlando per entrambi di prodotti della famiglia Azure, c’è da aspettarsi che Microsoft abbia messo a disposizione uno strumento pronto all’uso per collegare le due piattaforme. Questo strumento si chiama Azure Synapse Link e permette di mettere in comunicazione, in modo semplice questi due potenti strumenti de cloud Azure.

Un motivo in più per valutare l’utilizzo di Cosmos DB.

Creiamo una connessione con Python

Un’altro motivo per prendere in considerazione l’utilizzo di Cosmos DB è la semplicità di utilizzo tramite le librerie software messe a disposizione di Microsoft. Ad esempio, grazie alla libreria “azure-cosmos” fornita da Microsoft, è possibile connettersi ad Azure Cosmos DB utilizzando Python. Questa libreria semplifica l’interazione con il database, fornendo un’interfaccia intuitiva per la lettura e l’inserimento dei dati. Ecco un esempio di codice Python che rende immediatamente l’idea di quanto sia semplice integrare Cosmos DB nelle proprie applicazioni (per maggiori informazioni ecco il link al package python).

from azure.cosmos import CosmosClient

# Configurazione dell'endpoint e della chiave di accesso
endpoint = "your_cosmosdb_endpoint"
key = "your_cosmosdb_key"

# Creazione di un'istanza del client di Cosmos DB
client = CosmosClient(endpoint, key)

# Riferimento al database
database_name = "your_database_name"
database = client.get_database_client(database_name)

# Riferimento al container
container_name = "your_container_name"
container = database.get_container_client(container_name)

# Esempio di lettura dei dati
query = "SELECT * FROM c"
items = container.query_items(query, enable_cross_partition_query=True)

for item in items:
    print(item)

# Esempio di inserimento di nuovi dati
new_item = {
    "id": "1",
    "name": "John Doe",
    "age": 30
}

container.upsert_item(new_item)

E’ sempre la scelta corretta?

Quindi, a termine di questa breve panoramica, si deve concludere che Cosmos DB sia sempre la scelta più adatta? La risposta, come sempre, è “dipende”.

Dipende dai casi d’uso, dalle tue necessità, dalla struttura dei tuoi dati e dalla frequenza con cui vengono generati, letti o aggiornati.

Ad oggi, Cosmos DB trova applicazione in una vasta gamma di settori e scenari aziendali. Le sue caratteristiche di scalabilità, prestazioni elevate e flessibilità lo rendono ideale per applicazioni web e mobili ad alta intensità di dati, sistemi di analisi in tempo reale, gestione dei dati IoT, e-commerce personalizzato e molto altro ancora.

Ad esempio, le aziende nel settore dell’ospitalità possono utilizzare Azure Cosmos DB per gestire grandi volumi di dati di prenotazione e fornire un’esperienza utente personalizzata e reattiva.

Oppure le aziende che hanno un reparto produttivo possono utilizzare Cosmos DB in uno scenario di industria 4.0 per raccogliere i dati dai sensori.

Sei interessato a scoprire come Azure Cosmos DB può integrarsi con i tuoi sistemi? O quali vantaggi puoi averne per lo storage dei tuoi dati e la loro analisi? Non esitare a contattarmi. Sarò lieto di fornirti ulteriori informazioni e aiutarti a valutare come Azure Cosmos DB possa adattarsi alle esigenze specifiche della tua azienda, come possa aiutarti a gestire in modo più sicuro i tuoi dati, ed a fare una comparazione economica con il tuo asset attuale.


IL MIO LIBRO: WHY YOUR DATA MATTER

Il libro dedicato ai manager e CIO che hanno a cuore i dati della propria azienda e vogliono avere sonni tranquilli (anticipando problematiche poco piacevoli legate al recupero, alla gestione o alla sicurezza dei dati)

Leggi il libro

REGISTRATI ALLA NEWSLETTER

Una piccola newsletter su data, azure e AI.

Dicono di me

Ricordo ancora bene cosa mi spinse a coinvolgerlo per la prima volta. Oltre che a trasmettermi competenza ed affidabilità, Daniele mi è sembrato fin da subito propenso a mettersi in gioco e a fare squadra con Fapim. Ho percepito in maniera marcata che questa persona avrebbe fatto suo il problema e avrebbe cercato di risolverlo concretamente.

(Leggi la testimonianza completa)

Fapim S.p.a.Ombretta Pacini, responsabile comunicazione e immagine aziendale
È orbitando nell’area Microsoft che abbiamo conosciuto Daniele. Abbiamo iniziato a collaborarci nel 2016 in un momento nel quale, dopo aver introdotto in azienda la metodologia di Agile grazie ad un lungo periodo di formazione interna su questo argomento, iniziavamo a metterla in pratica su nuovi progetti e necessitavamo di Project Manager e Team Leader con esperienza.

(Leggi la testimonianza completa)

Vivido S.r.l.Claudio Menzani, Paolo Ciccioni
Ho conosciuto Daniele grazie ad una sua ex collega che mi ha parlato molto bene di lui e dei suoi servizi di consulenza e collaborazione nel campo della consulenza. Mi ha spinta a rivolgermi a Daniele la sua preparazione, professionalità e disponibilità.

(Leggi la testimonianza completa)