Table of Contents
Database senza server: un'immersione profonda in DynamoDB e Cosmos DB
L'aumento del serverless computing ha cambiato radicalmente come le organizzazioni costruiscono e dispiegano le applicazioni. Astratto server management, gli sviluppatori possono concentrarsi sulla scrittura del codice e sulla fornitura di funzionalità piuttosto che fornire hardware. Tra i componenti più critici in questo paradigma ci sono database serverless, che offrono scalabilità on-demand, pay-per-use pricing, e l'alta disponibilità senza sovraccarico operativo.
Quali sono i database senza server?
I database senza server sono servizi di database che gestiscono automaticamente attività infrastrutturali come il provisioning, la scalatura, la patch e i backup. Il termine “serverless” non significa che i server non esistano; piuttosto, il provider cloud li gestisce interamente, esponendo solo un endpoint del database all’applicazione.
Questo modello è particolarmente utile per applicazioni con traffico variabile o imprevedibile, come le vendite flash di e-commerce, l'ingestione di sensori IoT, i servizi di backend mobile e le architetture orientate agli eventi.
Amazon DynamoDB – Un pilastro di AWS Serverless
Amazon DynamoDB è un database di documenti e valore chiave NoSQL completamente gestito che offre la latenza di millisecondi a un solo livello. Lanciato nel 2012, è diventato il database predefinito per molte applicazioni senza server AWS, lavorando senza soluzione di continuità con Lambda, API Gateway, Step Functions e Kinesis. DynamoDB supporta sia letture coerenti e fortemente coerenti, sia funzioni come tabelle globali, indice di cambio automatico,
Caratteristiche principali di DynamoDB
- Modelli di dati flessibili:[[] Supporta il valore chiave (semplice chiave primaria) e il documento (chiave principale composita con la chiave di selezione) schemi.
- Ridimensionamento automatico:[] Puoi scegliere tra il throughput fornito (con auto-scaling) o la capacità on-demand. On-demand si adatta automaticamente per i picchi del traffico ma le spese per richiesta; fornito è più conveniente per carichi di lavoro stabili e prevedibili.
- Tavoli globali:[] Multi-regione, replica multi-leader con eventuale consistenza. Ideale per il recupero di emergenza e la bassa latenza legge/scrive in tutto il mondo.
- DynamoDB Accelerator (DAX):[] Una cache in memoria che può ridurre la latenza di lettura da millisecondi a singolo cifrato a microsecondi.
- Sicurezza:[] Crittografia a riposo (AWS KMS) e in transito (TLS), politiche IAM finemente radicate, endpoint VPC e integrazione con AWS CloudTrail per i log di audit.
- Streams and Triggers:[ DynamoDB Streams cattura i cambiamenti di livello dell'elemento in tempi quasi reali, consentendo architetture basate sugli eventi (ad esempio, replicare a Elasticsearch, aggiornare gli indici secondari, attivare le funzioni di Lambda).
- Transazioni:[]] transazioni ACID fino a 25 articoli o 4 MB di dati, utili per applicazioni finanziarie e operazioni multi-item.
Modello di prezzo
I prezzi di DynamoDB sono basati sulla modalità di capacità. La capacità prevista richiede di specificare le unità di lettura e scrittura (RCU/WCUs).
Casi di uso comune
- Stato di separazione:[[] Le letture/scrizioni a bassa latenza lo rendono eccellente per la memorizzazione delle sessioni utente nelle applicazioni web e mobile.
- Gaming:[] Profili dei giocatori, classifiche e stato di gioco con elevata convaluta e carico imprevedibile.
- IoT:[] Ingestione dei dati dei sensori con scala automatica per gestire milioni di scritture al secondo.
- E-commerce:[] Carrello e lavorazione degli ordini tramite transazioni per garantire la coerenza.
- Microservizi animati da eventi:[] Combinato con Lambda e EventBridge, DynamoDB forma la spina dorsale di molti backend senza server.
Limitazioni e considerazioni
Mentre i team di accingimento sono limitati: è possibile fare domande solo tramite chiave primaria (o GSI) e condizioni di range opzionali. Le unità complessi, l’aggregazione e la ricerca full-text richiedono servizi esterni come Elasticsearch o Aurora. Le dimensioni massima dell’elemento 400 KB possono essere restrittive per i grandi documenti.
Documentazione ufficiale di Amzon DynamoDB[]
Azure Cosmos DB – Distribuito a livello mondiale, Database Multi‐Model
Microsoft Azure Cosmos DB è un database NoSQL completamente gestito progettato per applicazioni mission-critical che richiedono distribuzione globale, scalabilità elastica e modelli di consistenza multipla. A differenza di DynamoDB, Cosmos DB è multi-model fuori dalla scatola: supporta il documento (SQL API), key-value (Table API), grafo (Gremlin API), colonna-famiglia (Cassandra API), e MongoDB API.
Caratteristiche principali di Cosmos DB
- Multi-model e multi-API:[ Puoi scegliere tra NoSQL (documento), MongoDB, Cassandra, Gremlin (graph), e Table APIs. Tutte le API siedono sullo stesso nucleo - il motore Cosmos DB - in modo da condividere throughput, indicizzazione e distribuzione globale.
- Distribuzione globale (chiavi in mano): Con pochi clic o linee di codice, è possibile replicare i dati a qualsiasi numero di regioni Azure. Cosmos DB supporta le scritture multi-regione (attive) con risoluzione automatica dei conflitti.
- Cerca livelli di consistenza ben definiti:[ Forte, Stantezza arrotondata, Sessione, Prefisso costante e Eventuale. Puoi scegliere il livello per richiesta, bilanciando le prestazioni contro le garanzie di coerenza.
- Indicizzazione automatica:[] Per impostazione predefinita, tutte le proprietà dell'elemento sono indicizzate senza definizione manuale dello schema. Questo accelera le query arbitrarie, ma è possibile personalizzare le politiche di indicizzazione per ridurre il consumo RU.
- Unità di richiesta (RU):[] Cosmos DB utilizza una moneta di throughput unificata misurata in Unità di richiesta al secondo. 1 RU corrisponde a una lettura di 1 KB. Le letture sono più veloci (1 RU per lettura) rispetto alle scritture (5 RU per 1 KB di scrittura).
- SLA garantisce: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- Change Feed:[]] Un registro persistente e ordinato delle modifiche degli elementi che possono essere consumate da funzioni Azure o da altri processori per architetture orientate agli eventi.
- Riservo analitico:[] Store colonnare integrato per eseguire query analitiche su larga scala senza influire sui carichi di lavoro transazionali (utilizzando Synapse Link).
Modello di prezzo
Cosmos DB pricing si basa sulla modalità di throughput (RU) e storage consumato. Puoi anche usare serverless[]] (prevista al momento della scrittura) dove paghi per le RU e lo storage consumati, scaling a zero quando idle — ideale per piccoli carichi di lavoro.
Rispetto alla DynamoDB, la modellazione RU di Cosmos DB è più granulare e può essere più complessa da valutare, soprattutto per i carichi di lavoro multi-model. Tuttavia, l’indicizzazione automatica e la consistenza sintonizzata possono ridurre le RU totali necessarie, soprattutto per le applicazioni di lettura-pesante che possono tollerare eventuali consistenza.
Casi di uso comune
- Applicazioni SaaS intraprise:[] Sistemi multi-tenant che richiedono un accesso a bassa latenza geo-distributiva e forti SLA.
- IoT e time-series:[] Imparare i dati dei sensori ad alta velocità con una visione globale.
- piattaforme di commercio elettronico:[] Cataloghi di prodotti, carrelli per lo shopping, gestione degli ordini, con distribuzioni attive-attive multi-regione.
- Analitica a tempo reale:[] Utilizzando il feed di cambiamento e il collegamento di sincronizzazione per guidare dashboard e modelli di machine learning.
- Graph applicazioni:[ Social network, motori di raccomandazione e grafici di conoscenza tramite Gremlin API.
Limitazioni e considerazioni
Il modello RU richiede una pianificazione accurata: si paga per la capacità assegnata anche quando idle (a meno che non utilizzi serverless). Fare domande arbitrarie efficiente spesso si basa sull’indicizzazione automatica, ma gli indici scarsamente progettati possono esplodere il costo RU. Le domande di cross-partition sono meno efficienti perché toccano ogni partizione.
Confronto testa a testa: DynamoDB vs. Cosmos DB
La scelta tra questi due database senza server dipende dal provider cloud esistente, dalle caratteristiche del carico di lavoro e dai requisiti specifici delle funzionalità.
Modello e API dati
DynamoDB] è principalmente un valore chiave e un documento. Utilizza un API proprietario (AWS SDK) insieme a PartiQL (SQL-compatibile query language). Cosmos DB offre cinque API: SQL (document), MongoDB, Cassandra, Gremlin (graph), e Table mimos.
Distribuzione globale
DynamoDB utilizza Global Tables con una consistenza (o forte solo all’interno di una singola regione) e Cosmos DB fornisce una scrittura multi-regione con livelli di consistenza multipli, tra cui forti in tutte le regioni (anche se con costi di latenza).
Modelli di coerenza
DynamoDB offre due: eventuali e forti. Cosmos DB offre cinque: prefisso, sessione, stallo e robusto. La granulosità più fine permette a Cosmos DB di ottimizzare i costi e le prestazioni per casi di utilizzo specifici (ad esempio, la consistenza a livello di sessione per cesti di e-commerce è molto popolare).
Querying e Indicizzazione
DynamoDB richiede di definire una chiave primaria e una chiave di selezione opzionale; indicizza automaticamente le chiavi primarie e GSI. Puoi anche creare indici radi. La query ad‐hoc è limitata. Cosmos DB indicizza automaticamente tutte le proprietà per impostazione predefinita, consentendo query arbitrarie senza definizione di schema upfront. Ciò rende Cosmos DB più flessibile per le query esplorative ma può aumentare il costo RU per carichi di lavoro ad alta scrittura.
Granularità di produttività e prezzi
DynamoDB utilizza RCU/WCU – le letture sono metà del costo delle scritture (1 RCU per 4 KB, 1 WCU per 1 KB). Cosmos DB utilizza RUs – 1 RU = 1 KB di lettura, 5 RU per 1 KB di scrittura. Cosmos DB’s RU costo varia da livello di consistenza e proprietà indicizzate.
Integrazione ecosistema
DynamoDB è profondamente integrata con AWS (Lambda, API Gateway, Kinesis, CloudWatch, CloudTrail, IAM). Cosmos DB si integra naturalmente con Azure (Funzioni, Logic Apps, Event Hubs, Synapse, Power BI). Entrambe offrono feed di cambiamento e trigger basati su eventi. La scelta spesso viene a destinazione in cui il provider cloud viene investito la vostra organizzazione.
SLA e Limitazioni
Cosmos DB offre SLA completi per la latenza (P99 <10 ms legge/scrive sotto 1 KB), throughput (alta disponibilità), e consistenza (per forte). DynamoDB pubblicizza la latenza di milliseconda a singola cifra e la disponibilità di 99,999% per le tabelle globali, ma non offre una tardiva SLA. Cosmos DB ha anche un massimo di stoccaggio per contenitore di 20 TB (o illimitato con divisoria di divisione KB)
Quando scegliere quale?
- Choose DynamoDB se:[] Stai costruendo su AWS, hai bisogno di un semplice key-value o un archivio di documenti con latenza bassa prevedibile, hai un chiaro modello di accesso (query principalmente da chiave primaria), e vuoi mantenere i costi bassi ad alta scala.
- Choose Cosmos DB se:[] Hai bisogno di supporto multi-model (soprattutto MongoDB o Cassandra API per la migrazione), richiedono livelli di coerenza multipli, necessitano di scrittura multi-regione attiva, o necessitano di funzionalità di query ricche senza design indice upfront.
DynamoDB Developer Guide[] | Cosmos DB Introduzione]
Migliori Pratiche per l'adozione di database senza server
Indipendentemente da quale database si sceglie, seguendo modelli provati vi aiuterà a evitare insidie comuni:
Design per la partizione
In DynamoDB e Cosmos DB, il design delle chiavi di partizione è fondamentale. Le partizioni calde (dove una singola chiave riceve un traffico sproporzionato) permettono di superare il traffico. Utilizzare i tasti ad alta definizione (ad esempio, ID utente, ID dispositivo) e considerare di scrivere sharding per identificativi sequenziali. In Cosmos DB, è possibile partizionare sul percorso /partitionKey; in DynamoDB, la tabella di creazione di chiave.
Cambiamento di dati di perdite
Sia DynamoDB Streams che Cosmos DB Change Feed consentono modelli basati su eventi. Utilizzarli per replicare i dati ai motori di ricerca (Elasticsearch), costruire viste materializzate, sincronizzare con i data warehouse, o attivare processi a valle. Questo riduce il carico sul database primario e servizi di decouples.
Capire i vostri bisogni di coerenza
Se possibile, è possibile ridurre i costi e migliorare la latenza. Per Cosmos DB, utilizzare la consistenza della sessione per molte applicazioni di e-commerce o social media – fornisce garanzie di lettura-your-writes per sessione client a un costo più basso RU che forte.
Utilizzare la modalità di capacità appropriata
Per DynamoDB, scegliere la capacità di messa a disposizione con auto-scaling per carichi di lavoro costanti e on-demand per punte imprevedibili. Per Cosmos DB, il throughput fornito con autoscale è buono per la maggior parte dei carichi di lavoro di produzione; considerare serverless (preview) per applicazioni dev/test o leggere.
Pianifica per il backup e il ripristino del disastri
I due servizi offrono un recupero puntuale (PITR).Abilitarlo per tutti i database di produzione. Il backup DynamoDB è continuo e si ripristina su una nuova tabella; il backup Cosmos DB può essere continuo o periodico. I test vengono ripristinati periodicamente. Per il DR globale, configurare la replica multi-regione (Tavole globali o Scritti multi-regione Cosmos DB) e avere un piano di failover.
Gestione dei costi
Per DynamoDB, utilizzare la capacità riservata per il throughput prevedibile. Per Cosmos DB, considerare l'utilizzo senza server o di autoscala per evitare di pagare le RUs. Rimuovere gli indici e le tabelle inutilizzati. Utilizzare la compressione dove supportato (ad esempio, consentendo la compressione nel negozio analitico di Cosmos DB).
Conclusioni
I database senza server come Amazon DynamoDB e Azure Cosmos DB sono maturati in piattaforme di livello enterprise che permettono agli sviluppatori di costruire applicazioni scalabili a livello globale senza oneri operativi. DynamoDB eccelle nella semplicità, nei modelli di domanda ristretti e nell’integrazione profonda AWS, rendendolo una scelta predefinita per molti microservizi senza server.
AWS Serverless Database Resource Hub[] | ]Azure Cosmos DB Product Page[