Come distribuire i dati a livello globale con Azure Cosmos DBHow to distribute data globally with Azure Cosmos DB

Azure è ovunque, offre una copertura globale in oltre 30 aree geografiche ed è in continua espansione.Azure is ubiquitous - it has a global footprint across 30+ geographical regions and is continuously expanding. Ciò consente ad Azure di offrire in esclusiva agli sviluppatori la possibilità di creare, distribuire e gestire applicazioni distribuite a livello globale con la massima semplicità.With its worldwide presence, one of the differentiated capabilities Azure offers to its developers is the ability to build, deploy, and manage globally distributed applications easily.

Azure Cosmos DB è il servizio di database multimodello distribuito a livello globale di Microsoft per applicazioni cruciali.Azure Cosmos DB is Microsoft's globally distributed, multi-model database service for mission-critical applications. Azure Cosmos DB offre distribuzione globale chiavi in mano, scalabilità elastica in termini di archiviazione e velocità effettiva ovunque nel mondo, latenze pari a singole unità di millisecondi al 99° percentile, cinque livelli di coerenza ben definiti e disponibilità elevata garantita, il tutto supportato da contratti di servizio leader del settore.Azure Cosmos DB provides turnkey global distribution, elastic scaling of throughput and storage worldwide, single-digit millisecond latencies at the 99th percentile, five well-defined consistency levels, and guaranteed high availability, all backed by industry-leading SLAs. Azure Cosmos DB indicizza automaticamente i dati senza che sia necessario gestire manualmente indici e schemi.Azure Cosmos DB automatically indexes data without requiring you to deal with schema and index management. Si tratta di un database multimodello che supporta modelli di dati di documenti, coppie chiave/valore, grafi e colonne.It is multi-model and supports document, key-value, graph, and columnar data models. In quanto servizio cloud, Azure Cosmos DB è stato accuratamente progettato fin dall'inizio per gestire multi-tenancy e distribuzione globale.As a cloud-born service, Azure Cosmos DB is carefully engineered with multi-tenancy and global distribution from the ground up.

Una singola raccolta di Azure Cosmos DB partizionata e distribuita tra più aree di AzureA single Azure Cosmos DB collection partitioned and distributed across multiple Azure regions

Raccolta di Azure Cosmos DB partizionata e distribuita tra tre aree

Durante lo sviluppo di Azure Cosmos DB, è emerso che non era possibile aggiungere la distribuzione globale a posteriori, perché non è una funzionalità che si può integrare su un sistema di database basato su "singolo sito".As we have learned while building Azure Cosmos DB, adding global distribution cannot be an afterthought - it cannot be "bolted-on" atop a "single site" database system. Le funzionalità offerte da un database distribuito a livello globale superano quelle del ripristino di emergenza con ridondanza geografica tradizionale offerte dai database basati su "singolo sito".The capabilities offered by a globally distributed database span beyond that of traditional geographical disaster recovery (Geo-DR) offered by "single-site" databases. Il database basati su singolo sito che offrono la funzionalità di ripristino di emergenza con ridondanza geografica rappresentano un sottoinsieme limitato dei database distribuiti a livello globale.Single site databases offering Geo-DR capability are a strict subset of globally distributed databases.

Grazie alla funzionalità di distribuzione globale chiavi in mano di Azure Cosmos DB, gli sviluppatori non devono creare i propri scaffolding di replica usando il modello lambda, ad esempio la replica di AWS DynamoDB, sul log del database oppure eseguendo "doppie scritture" tra più aree.With Azure Cosmos DB's turnkey global distribution, developers do not have to build their own replication scaffolding by employing either the Lambda pattern (for example, AWS DynamoDB replication) over the database log or by doing "double writes" across multiple regions. Questi approcci non sono consigliati perché la correttezza non è garantita e non offrono contratti di servizio affidabili.We do not recommend these approaches since it is impossible to ensure correctness of such approaches and provide sound SLAs.

In questo articolo viene illustrata una panoramica delle funzionalità di distribuzione globale di Azure Cosmos DBIn this article, we provide an overview of Azure Cosmos DB's global distribution capabilities. e viene descritto l'approccio esclusivo di Azure Cosmos DB per l'offerta di contratti di servizio completi.We also describe Azure Cosmos DB's unique approach to providing comprehensive SLAs.

Abilitazione della distribuzione globale chiavi in manoEnabling turnkey global distribution

Azure Cosmos DB offre le funzionalità seguenti per consentire agli sviluppatori di scrivere applicazioni su scala globale in tutta semplicità.Azure Cosmos DB provides the following capabilities to enable you to easily write planet scale applications. Queste funzionalità sono disponibili tramite API REST basate su provider di risorse di Azure Cosmos DB e tramite il portale di Azure.These capabilities are available via the Azure Cosmos DB's resource provider-based REST APIs as well as the Azure portal.

Nel video seguente Andrew Liu, Program Manager di Azure Cosmos DB, illustra le funzionalità di distribuzione globale chiavi in mano.In the following video, Azure Cosmos DB Program Manager Andrew Liu demonstrates the turnkey global distribution features.

Presenza in tutte le areeUbiquitous regional presence

La presenza geografica di Azure è in continuo aumento, grazie alla disponibilità di un crescente numero di nuove aree.Azure is constantly growing its geographical presence by bringing new regions online. Per impostazione predefinita, Azure Cosmos DB è disponibile in tutte le nuove aree di Azure.Azure Cosmos DB is available in all new Azure regions by default. In questo modo, è possibile associare un'area geografica all'account del database Azure Cosmos DB non appena Azure rende disponibile la nuova area.This allows you to associate a geographical region with your Azure Cosmos DB database account as soon as Azure opens the new region for business.

Associazione di un numero di aree illimitato all'account del database Azure Cosmos DBAssociating an unlimited number of regions with your Azure Cosmos DB database account

Azure Cosmos DB consente di associare tutte le aree desiderate all'account del database Azure Cosmos DB.Azure Cosmos DB allows you to associate any number of Azure regions with your Azure Cosmos DB database account. Ad eccezione delle limitazioni di geofencing, ad esempio Cina e Germania, non sono previsti limiti per il numero di aree che è possibile associare all'account del database Azure Cosmos DB.Outside of geo-fencing restrictions (for example, China, Germany), there are no limitations on the number of regions that can be associated with your Azure Cosmos DB database account. La figura seguente mostra un account del database configurato per estendersi su 25 aree di Azure.The following figure shows a database account configured to span across 25 Azure regions.

Account del database Azure Cosmos DB di un tenant che si estende su 25 aree di AzureA tenant's Azure Cosmos DB database account spanning 25 Azure regions

Account del database Azure Cosmos DB che si estende su 25 aree di Azure

Geofencing basato su criteriPolicy-based geo-fencing

Azure Cosmos DB è progettato per l'uso di funzionalità di geofencing basate su criteri.Azure Cosmos DB is designed to have policy-based geo-fencing capabilities. Il geofencing è un componente importante che garantisce la governance dei dati e il rispetto delle limitazioni di conformità e che può impedire l'associazione di una determinata area all'account.Geo-fencing is an important component to ensure data governance and compliance restrictions and may prevent associating a specific region with your account. Tra gli esempi di geofencing sono inclusi, a titolo esemplificativo, la limitazione dell'ambito della distribuzione globale alle aree con cloud sovrano, come Cina e Germania, oppure all'interno dei confini di applicazione delle imposte governative, ad esempio l'Australia.Examples of geo-fencing include (but are not restricted to), scoping global distribution to the regions within a sovereign cloud (for example, China and Germany), or within a government taxation boundary (for example, Australia). I criteri vengono controllati tramite i metadati della sottoscrizione di Azure.The policies are controlled using the metadata of your Azure subscription.

Aggiunta e rimozione di aree in modo dinamicoDynamically add and remove regions

Azure Cosmos DB consente di aggiungere (associare) o rimuovere (dissociare) aree nell'account del database in qualsiasi momento (vedere la figura precedente).Azure Cosmos DB allows you to add (associate) or remove (dissociate) regions to your database account at any point in time (see preceding figure). Grazie alla replica dei dati in parallelo tra le partizioni, Azure Cosmos DB garantisce che, quando viene aggiunta una nuova area in Azure, Azure Cosmos DB sia disponibile in qualsiasi parte del mondo per un massimo di 100 TB entro 30 minuti.By virtue of replicating data across partitions in parallel, Azure Cosmos DB ensures that when a new region comes online, Azure Cosmos DB is available within 30 minutes anywhere in the world for up to 100 TBs.

Priorità di failoverFailover priorities

Per controllare la sequenza esatta dei failover a livello di area quando si verifica un'interruzione di servizio in più aree, Azure Cosmos DB consente di impostare una priorità per le varie aree associate all'account del database, come illustrato nella figura seguente.To control exact sequence of regional failovers when there is a multi-regional outage, Azure Cosmos DB enables you to associate the priority to various regions associated with the database account (see the following figure). Azure Cosmos DB garantisce che la sequenza di failover automatico venga eseguita in base all'ordine di priorità specificato.Azure Cosmos DB ensures that the automatic failover sequence occurs in the priority order you specified. Per altre informazioni su failover regionali, vedere Failover a livello di area automatici per la continuità aziendale in Azure Cosmos DB.For more information about regional failovers, see Automatic regional failovers for business continuity in Azure Cosmos DB.

Un tenant di Azure Cosmos DB può configurare l'ordine di priorità di failover (riquadro a destra) per le aree associate a un account del databaseA tenant of Azure Cosmos DB can configure the failover priority order (right pane) for regions associated with a database account

Configurazione delle priorità di failover con Azure Cosmos DB

Più modelli di coerenza ben definiti per i database con replica a livello globaleMultiple, well-defined consistency models for globally replicated databases

Azure Cosmos DB espone più livelli di coerenza ben definiti supportati da contratti di servizio.Azure Cosmos DB exposes multiple well-defined consistency levels backed by SLAs. È possibile scegliere un modello di coerenza specifico nell'elenco di opzioni disponibili, a seconda del carico di lavoro e degli scenari.You can choose a specific consistency model (from the available list of options) depending on the workload/scenarios.

Livelli di coerenza regolabili per i database con replica a livello globaleTunable consistency for globally replicated databases

Azure Cosmos DB consente di eseguire l'override a livello di codice e sostituire il livello di coerenza per singola richiesta, in fase di esecuzione.Azure Cosmos DB allows you to programmatically override and relax the default consistency choice on a per request basis, at runtime.

Aree di lettura e scrittura configurabili in modo dinamicoDynamically configurable read and write regions

Azure Cosmos DB consente di configurare le aree associate al database come aree di "lettura", "scrittura" o "lettura/scrittura".Azure Cosmos DB enables you to configure the regions (associated with the database) for "read", "write" or "read/write" regions.

Scalabilità elastica della velocità effettiva tra aree di AzureElastically scaling throughput across Azure regions

È possibile ridimensionare in modo elastico una raccolta di Azure Cosmos DB eseguendo il provisioning della velocità effettiva a livello di codice.You can elastically scale an Azure Cosmos DB collection by provisioning throughput programmatically. La velocità effettiva viene applicata a tutte le aree in cui è distribuita la raccolta.The throughput is applied to all the regions the collection is distributed in.

Letture e scritture nell'area locale specificaGeo-local reads and writes

Il vantaggio principale di un database distribuito a livello globale è l'accesso a bassa latenza ai dati ovunque nel mondo.The key benefit of a globally distributed database is to offer low latency access to the data anywhere in the world. Azure Cosmos DB offre garanzie di bassa latenza di livello p99 per varie operazioni su database.Azure Cosmos DB offers low latency guarantees at P99 for various database operations. Garantisce che tutte le letture siano instradate all'area di lettura locale più vicina.It ensures that all reads are routed to the closest local read region. Per gestire una richiesta di lettura, viene usato il quorum locale dell'area in cui viene inviata la richiesta di lettura. Lo stesso si applica alle operazioni di scrittura.To serve a read request, the quorum local to the region in which the read is issued is used; the same applies to the writes. Un'operazione di scrittura viene riconosciuta solo dopo che la maggior parte delle repliche ha eseguito in modo durevole il commit della scrittura localmente senza che sia vincolata al riconoscimento delle operazioni di scrittura da parte delle repliche remote.A write is acknowledged only after a majority of replicas has durably committed the write locally but without being gated on remote replicas to acknowledge the writes. In altre parole, il protocollo di replica di Azure Cosmos DB parte dal presupposto che i quorum di lettura e scrittura si trovino sempre rispettivamente nelle stesse aree di lettura e scrittura in cui viene inviata la richiesta.Put differently, the replication protocol of Azure Cosmos DB operates under the assumption that the read and write quorums are always local to the read and write regions, respectively, in which the request is issued.

Avvio manuale del failover a livello di areaManually initiate regional failover

Azure Cosmos DB consente di attivare il failover dell'account del database per convalidare le proprietà di disponibilità end-to-end dell'intera applicazione, oltre il database.Azure Cosmos DB allows you to trigger the failover of the database account to validate the end to end availability properties of the entire application (beyond the database). Poiché sia le proprietà di sicurezza e di attività del rilevamento di errori e dell'algoritmo di elezione sono garantite, Azure Cosmos DB garantisce una perdita di dati pari a zero per un'operazione di failover avviata manualmente dal tenant.Since both the safety and liveness properties of the failure detection and leader election are guaranteed, Azure Cosmos DB guarantees zero-data-loss for a tenant-initiated manual failover operation.

Failover automaticoAutomatic failover

Azure Cosmos DB supporta il failover automatico in caso di una o più interruzioni di servizio a livello di area.Azure Cosmos DB supports automatic failover in case of one or more regional outages. Durante un failover a livello di area, Azure Cosmos DB mantiene i contratti di servizio per latenza di lettura, disponibilità di tempo di attività, coerenza e velocità effettiva.During a regional failover, Azure Cosmos DB maintains its read latency, uptime availability, consistency, and throughput SLAs. Azure Cosmos DB prevede un limite superiore per la durata di completamento di un'operazione di failover automatico.Azure Cosmos DB provides an upper bound on the duration of an automatic failover operation to complete. Si tratta dell'intervallo di tempo della potenziale perdita di dati durante l'interruzione di servizio a livello di area.This is the window of potential data loss during the regional outage.

Progettato per varie granularità di failoverDesigned for different failover granularities

Attualmente le funzionalità di failover automatico e manuale sono esposte al livello di granularità dell'account del database.Currently the automatic and manual failover capabilities are exposed at the granularity of the database account. Si noti che internamente Azure Cosmos DB è progettato per offrire funzionalità di failover automatico a granularità più fini di un database, di una raccolta o persino di una partizione (di una raccolta proprietaria di un intervallo di chiavi).Note, internally Azure Cosmos DB is designed to offer automatic failover at finer granularity of a database, collection, or even a partition (of a collection owning a range of keys).

API multihosting in Azure Cosmos DBMulti-homing APIs in Azure Cosmos DB

Azure Cosmos DB consente di interagire con il database tramite endpoint logici (indipendenti dall'area) o fisici (specifici dell'area).Azure Cosmos DB allows you to interact with the database using either logical (region agnostic) or physical (region-specific) endpoints. L'uso di endpoint logici garantisce che l'applicazione possa usufruire del multihoming in modo trasparente in caso di failover.Using logical endpoints ensures that the application can transparently be multi-homed in case of failover. Gli endpoint fisici, invece, offrono all'applicazione un controllo con granularità fine per reindirizzare le letture e le scritture ad aree specifiche.The latter, physical endpoints, provide fine-grained control to the application to redirect reads and writes to specific regions.

Informazioni su come configurare le preferenze di lettura per le API SQL, API Graph, API Table e API MongoDB sono disponibili nei rispettivi articoli collegati.You can find information on how to configure read preferences for the SQL API, Graph API, Table API, and MongoDB API in their respective linked articles.

Migrazione di indici e di schemi del database trasparente e coerenteTransparent and consistent database schema and index migration

Azure Cosmos DB è completamente indipendente dallo schema.Azure Cosmos DB is fully schema agnostic. La struttura esclusiva del motore di database consente di indicizzare automaticamente e in modo sincrono tutti i dati inseriti senza richiedere all'utente schemi o indici secondari.The unique design of its database engine allows it to automatically and synchronously index all of the data it ingests without requiring any schema or secondary indices from you. In questo modo è possibile iterare rapidamente l'applicazione distribuita a livello globale senza preoccuparsi della migrazione dell'indice o dello schema del database o del coordinamento di implementazioni di modifiche dello schema dell'applicazione in più fasi.This enables you to iterate your globally distributed application rapidly without worrying about database schema and index migration or coordinating multi-phase application rollouts of schema changes. Azure Cosmos DB garantisce che qualsiasi modifica ai criteri di indicizzazione eseguita dall'utente non comporti un calo significativo di prestazioni o disponibilità.Azure Cosmos DB guarantees that any changes to indexing policies explicitly made by you does not result into degradation of either performance or availability.

Contratti di servizio completi (oltre la sola disponibilità elevata)Comprehensive SLAs (beyond just high availability)

In quanto servizio di database distribuito a livello globale, Azure Cosmos DB offre un contratto di servizio ben definito per perdita di dati, disponibilità, latenza a livello p99, velocità effettiva e coerenza per il database nel suo complesso, indipendentemente dal numero di aree associate al database.As a globally distributed database service, Azure Cosmos DB offers well-defined SLA for data-loss, availability, latency at P99, throughput and consistency for the database as a whole, regardless of the number of regions associated with the database.

Garanzie di latenzaLatency guarantees

Il vantaggio principale di un database distribuito a livello globale come Azure Cosmos DB è l'accesso a bassa latenza ai dati ovunque nel mondo.The key benefit of a globally distributed database service like Azure Cosmos DB is to offer low latency access to your data anywhere in the world. Azure Cosmos DB offre garanzie di bassa latenza di livello p99 per varie operazioni su database.Azure Cosmos DB offers guaranteed low latency at P99 for various database operations. Il protocollo di replica usato da Azure Cosmos DB garantisce che le operazioni su database, lettura e scrittura, vengano sempre eseguite nell'area in cui si trova il client.The replication protocol that Azure Cosmos DB employs ensures that the database operations (ideally, both reads and writes) are always performed in the region local to that of the client. Il contratto di servizio per la latenza di Azure Cosmos DB prevede il livello p99 per letture, scritture indicizzate in modo sincrono e query per varie dimensioni di richiesta e risposta.The latency SLA of Azure Cosmos DB includes P99 for both reads, (synchronously) indexed writes and queries for various request and response sizes. Le garanzie di latenza per le operazioni di scrittura includono i commit dei quorum di maggioranza durevoli all'interno del data center locale.The latency guarantees for writes include durable majority quorum commits within the local datacenter.

Relazione tra latenza e coerenzaLatency's relationship with consistency

Affinché un servizio distribuito a livello globale possa offrire coerenza assoluta in una configurazione distribuita a livello globale, deve replicare in modo sincrono le operazioni di scrittura oppure eseguire letture sincrone tra aree: la velocità della luce e l'affidabilità della rete WAN indicano che la coerenza assoluta comporta latenze elevate e disponibilità ridotta delle operazioni su database.For a globally distributed service to offer strong consistency in a globally distributed setup, it needs to synchronously replicate the writes or synchronous perform cross-region reads – the speed of light and the wide area network reliability dictate that strong consistency results in higher latencies and reduced availability of database operations. Di conseguenza, per offrire basse latenze p99 e disponibilità del 99,99% garantite per tutti gli account in una singola area e per tutti gli account in più aree con coerenza flessibile e disponibilità in lettura del 99,999% per tutti gli account di database in più aree, il servizio deve usare la replica asincrona.Hence, in order to offer guaranteed low latencies at P99 and 99.99% availability for all single region accounts and all multi-region accounts with relaxed consistency, and 99.999% read availability on all multi-region database accounts, the service must employ asynchronous replication. Questo, a sua volta, richiede che il servizio offra inoltre opzioni di coerenza media ben definite, meno efficienti rispetto alla coerenza assoluta (per offrire le garanzie di bassa latenza e disponibilità) ma più efficienti rispetto alla coerenza "finale" (per garantire un modello di programmazione intuitivo).This in-turn requires that the service must also offer well-defined, relaxed consistency choice(s) – weaker than strong (to offer low latency and availability guarantees) and ideally stronger than "eventual" consistency (to offer an intuitive programming model).

Azure Cosmos DB garantisce che un'operazione di lettura non sia tenuta a contattare le repliche estese su più aree per rispettare la garanzia del livello di coerenza specifico.Azure Cosmos DB ensures that a read operation is not required to contact replicas across multiple regions to deliver the specific consistency level guarantee. Allo stesso modo, assicura che un'operazione di scrittura non venga bloccata mentre è in corso la replica dei dati su tutte le aree, ovvero le operazioni di scrittura sono replicate in modo asincrono tra le aree.Likewise, it ensures that a write operation does not get blocked while the data is being replicated across all the regions (i.e. writes are asynchronously replicated across regions). Per gli account del database in più aree sono disponibili più livelli di coerenza media.For multi-region database accounts multiple relaxed consistency levels are available.

Relazione tra latenza e disponibilitàLatency's relationship with availability

Latenza e disponibilità sono le due facce della stessa medaglia.Latency and availability are the two sides of the same coin. Si parla di latenza dell'operazione in stato stabile e di disponibilità in caso di errori.We talk about latency of the operation in steady state and availability, in the face of failures. Dal punto di vista dell'applicazione, un'operazione di database con esecuzione lenta non si distingue da un database non disponibile.From the application standpoint, a slow running database operation is indistinguishable from a database that is unavailable.

Per distinguere la latenza elevata dalla mancata disponibilità, Azure Cosmos DB consente un limite superiore per la latenza di varie operazioni su database.To distinguish high latency from unavailability, Azure Cosmos DB provides an absolute upper bound on latency of various database operations. Se il tempo necessario per completare un'operazione su database è maggiore del limite superiore, Azure Cosmos DB restituisce un errore di timeout.If the database operation takes longer than the upper bound to complete, Azure Cosmos DB returns a timeout error. Il contratto di servizio relativo alla disponibilità di Azure Cosmos DB garantisce che i timeout vengano conteggiati ai fini del contratto di servizio per la disponibilità.The Azure Cosmos DB availability SLA ensures that the timeouts are counted against the availability SLA.

Relazione tra latenza e velocità effettivaLatency's relationship with throughput

Con Azure Cosmos DB non è necessario scegliere tra latenza e velocità effettiva.Azure Cosmos DB does not make you choose between latency and throughput. Viene rispettato il contratto di servizio per latenza a livello p99 e viene garantita la velocità effettiva di cui è stato effettuato il provisioning.It honors the SLA for both latency at P99 and deliver the throughput that you have provisioned.

Garanzie di coerenzaConsistency guarantees

Sebbene il modello di coerenza assoluta rappresenti lo standard di programmabilità più elevato, comporta una latenza elevata (in stato stabile) e una disponibilità ridotta (in caso di errori).While the strong consistency model is the gold standard of programmability, it comes at the steep price of higher latency (in steady state) and reduced availability (in the face of failures).

Azure Cosmos DB offre un modello di programmazione ben definito che consente di valutare la coerenza dei dati replicati.Azure Cosmos DB offers a well-defined programming model to you to reason about replicated data's consistency. Per consentire la creazione di applicazioni multihosting, i modelli di coerenza esposti da Azure Cosmos DB sono progettati per essere indipendenti dall'area e per non dipendere dall'area in cui vengono gestite le operazioni di lettura e scrittura.In order to enable you to build multi-homed applications, the consistency models exposed by Azure Cosmos DB are designed to be region-agnostic and not depend on the region from where the reads and writes are served.

Il contratto di servizio per la coerenza di Azure Cosmos DB garantisce che il 100% delle richieste di lettura soddisferà la garanzia di coerenza per il livello di coerenza necessario all'utente o il livello di coerenza predefinito per l'account del database o per il valore sostituito nella richiesta.Azure Cosmos DB's consistency SLA guarantees that 100% of read requests will meet the consistency guarantee for the consistency level requested by you (either the default consistency level on the database account or the overridden value on the request). Si considera che una richiesta abbia soddisfatto il contratto di servizio per la coerenza se sono state soddisfatte tutte le garanzie di coerenza associate al livello di coerenza.A read request is considered to have met the consistency SLA if all the consistency guarantees associated with the consistency level are satisfied. La tabella seguente mostra le garanzie di coerenza corrispondenti ai livelli di coerenza specifici offerti da Azure Cosmos DB.The following table captures the consistency guarantees that correspond to specific consistency levels offered by Azure Cosmos DB.

Garanzie di coerenza associate ai livelli di coerenza specifici in Azure Cosmos DB Consistency guarantees associated with a given consistency level in Azure Cosmos DB

Livello di coerenzaConsistency Level Caratteristiche di coerenzaConsistency Characteristics Contratto di servizioSLA
sessioneSession Lettura delle proprie scrittureRead your own write 100%100%
Lettura monotonicaMonotonic read 100%100%
Prefisso coerenteConsistent prefix 100%100%
Obsolescenza associataBounded staleness Lettura monotonica (all'interno di un'area)Monotonic read (within a region) 100%100%
Prefisso coerenteConsistent prefix 100%100%
Decadimento ristretto < K,TStaleness bound < K,T 100%100%
Prefisso coerenteConsistent prefix Prefisso coerenteConsistent prefix 100%100%
AssolutaStrong LinearizzabileLinearizable 100%100%

Relazione tra coerenza e disponibilitàConsistency's relationship with availability

Il risultato di impossibilità determinato dal teorema CAP (Consistency, Availability, Partition Tolerance - Coerenza, Disponibilità, Tolleranza di partizione) dimostra che è impossibile che il sistema rimanga disponibile e offra coerenza linearizzabile in caso di errori.The impossibility result of the CAP theorem proves that it is indeed impossible for the system to remain available and offer linearizable consistency in the face of failures. Il servizio di database deve scegliere tra coerenza e tolleranza di partizione (CP) o tra disponibilità e tolleranza di partizione (AP). I sistemi CP rinunciano alla disponibilità a favore della coerenza linearizzabile, mentre i sistemi AP rinunciano alla coerenza linearizzabile a favore della disponibilità.The database service must choose to be either CP or AP - CP systems forgo availability in favor of linearizable consistency while the AP systems forgo linearizable consistency in favor of availability. Azure Cosmos DB non viola mai il livello di coerenza necessario, di conseguenza può essere formalmente considerato un sistema CP.Azure Cosmos DB never violates the requested consistency level, which formally makes it a CP system. In pratica, però, la coerenza non è una soluzione del tipo "tutto o niente": esistono più modelli di coerenza ben definiti tra la coerenza linearizzabile e la coerenza finale.However, in practice consistency is not an all or nothing proposition – there are multiple well-defined consistency models along the consistency spectrum between linearizable and eventual consistency. Per Azure Cosmos DB sono stati identificati vari modelli di coerenza media tramite l'applicabilità reale e un modello di programmazione intuitivo.In Azure Cosmos DB, we have tried to identify several of the relaxed consistency models with real world applicability and an intuitive programming model. Azure Cosmos DB supera i compromessi relativi a coerenza e disponibilità offrendo più livelli di coerenza media ben definiti e una disponibilità del 99,99% per tutti gli account in una singola area e per tutti gli account in più aree con coerenza flessibile. Garantisce inoltre al 99,999% la disponibilità in lettura per tutti gli account di database in più aree.Azure Cosmos DB navigates the consistency-availability tradeoffs by offering a multiple relaxed yet well-defined consistency levels and a 99.99% availability for all single region accounts and all multi-region accounts with relaxed consistency, and 99.999% read availability on all multi-region database accounts.

Relazione tra coerenza e latenzaConsistency's relationship with latency

Il Prof. Daniel Abadi ha proposto una variante più completa del teorema CAP denominata PACELC, che tiene in considerazione i compromessi tra latenza e coerenza in stato stabile.A more comprehensive variation of CAP was proposed by Prof. Daniel Abadi and it is called PACELC, which also accounts for latency and consistency tradeoffs in steady state. Afferma che nello stato stabile, il sistema di database deve scegliere tra coerenza e latenza.It states that in steady state, the database system must choose between consistency and latency. Con più modelli di coerenza media (supportati da replica asincrona e quorum di lettura/scrittura locali), Azure Cosmos DB garantisce che tutte le operazioni di lettura e scrittura vengano eseguite rispettivamente nelle aree di lettura e scrittura locali specifiche.With multiple relaxed consistency models (backed by asynchronous replication and local read, write quorums), Azure Cosmos DB ensures that all reads and writes are local to the read and write regions respectively. Questo consente a Azure Cosmos DB di offrire garanzie di bassa latenza all'interno dell'area per i livelli di coerenza.This allows Azure Cosmos DB to offer low latency guarantees within the region for the consistency levels.

Relazione tra coerenza e velocità effettivaConsistency's relationship with throughput

Poiché l'implementazione di un modello di coerenza specifico dipende dalla scelta di un tipo di quorum, anche la velocità effettiva varia in base al tipo di coerenza scelto.Since the implementation of a specific consistency model depends on the choice of a quorum type, the throughput also varies based on the choice of consistency. In Azure Cosmos DB, ad esempio, l'addebito delle unità richiesta con le letture con coerenza assoluta è pari al doppio di quella delle letture con coerenza finale.For instance, in Azure Cosmos DB, the RU charge for strongly consistent reads is roughly double that of eventually consistent reads. In questo caso sarà necessario eseguire il provisioning del doppio delle unità richiesta nella raccolta per ottenere la stessa velocità effettiva.In this case you will need to provision double the RUs on your collection to achieve the same throughput.

Relazione della capacità di lettura per un livello di coerenza specifico in Azure Cosmos DB Relationship of read capacity for a specific consistency level in Azure Cosmos DB

Relazione tra coerenza e velocità effettiva

Garanzie di velocità effettivaThroughput guarantees

Azure Cosmos DB consente di ridimensionare la velocità effettiva e lo spazio di archiviazione in modo elastico su più aree a seconda della domanda.Azure Cosmos DB allows you to scale throughput (as well as, storage), elastically across different regions depending on the demand.

Una singola raccolta di Azure Cosmos DB partizionata (su tre partizioni) e quindi distribuita su tre aree di AzureA single Azure Cosmos DB collection partitioned (across three shards) and then distributed across three Azure regions

Raccolte di Azure Cosmos DB partizionate e distribuite

Una raccolta di Azure Cosmos DB viene distribuita usando due dimensioni, all'interno di un'area e in più aree.An Azure Cosmos DB collection gets distributed using two dimensions – within a region and then across regions. Ecco come:Here's how:

  • All'interno di una singola area, la scalabilità di una raccolta di Azure Cosmos DB viene garantita tramite l'aumento di partizioni di risorse.Within a single region, an Azure Cosmos DB collection is scaled out in terms of resource partitions. Ogni partizione di risorsa gestisce un set di chiavi e offre coerenza assoluta e disponibilità elevata grazie alla replica della macchina a stati tra un set di repliche.Each resource partition manages a set of keys and is strongly consistent and highly available by virtue of state machine replication among a set of replicas. Azure Cosmos DB è un sistema completamente gestito da risorse in cui una partizione di risorsa è responsabile della distribuzione della propria quota di velocità effettiva per il budget di risorse di sistema allocate.Azure Cosmos DB is a fully resource governed system where a resource partition is responsible for delivering its share of throughput for the budget of system resources allocated to it. La scalabilità di una raccolta di Azure Cosmos DB è completamente trasparente. Azure Cosmos DB gestisce le partizioni di risorse, dividendole e unendole in base alle esigenze.The scaling of an Azure Cosmos DB collection is completely transparent – Azure Cosmos DB manages the resource partitions and splits and merges it as needed.
  • Ogni partizione di risorsa viene quindi distribuita in più aree.Each of the resource partitions is then distributed across multiple regions. Le partizioni di risorse proprietarie dello stesso set di chiavi in più aree formano un set di partizioni (vedere la figura precedente).Resource partitions owning the same set of keys across various regions form partition set (see preceding figure). Le partizioni di risorse in un set di partizioni sono coordinate tramite la replica della macchina a stati tra le aree.Resource partitions within a partition set are coordinated using state machine replication across the multiple regions. A seconda del livello di coerenza configurato, le partizioni di risorse in un set di partizioni sono configurate in modo dinamico con topologie diverse, ad esempio a stella, con collegamento in cascata, ad albero e così via.Depending on the consistency level configured, the resource partitions within a partition set are configured dynamically using different topologies (for example, star, daisy-chain, tree etc.).

Grazie a funzionalità di gestione delle partizioni a velocità di risposta elevata, bilanciamento del carico e governance delle risorse rigida, Azure Cosmos DB consente di ridimensionare in modo elastico la velocità effettiva in più aree di Azure per una raccolta di Azure Cosmos DB.By virtue of a highly responsive partition management, load balancing and strict resource governance, Azure Cosmos DB allows you to elastically scale throughput across multiple Azure regions on an Azure Cosmos DB collection. La modifica della velocità effettiva per una raccolta è un'operazione di runtime in Azure Cosmos DB. Come per qualsiasi altra operazione su database, Azure Cosmos DB garantisce il limite superiore assoluto della latenza durante l'operazione di modifica della velocità effettiva.Changing throughput on a collection is a runtime operation in Azure Cosmos DB - like with other database operations Azure Cosmos DB guarantees the absolute upper bound on latency for your request to change the throughput. Ad esempio, la figura seguente mostra la raccolta di un cliente per la quale il provisioning della velocità effettiva (compreso tra 1 milione e 10 milioni di richieste al secondo in due aree) viene eseguito in modo elastico in base alla domanda.As an example, the following figure shows a customer's collection with elastically provisioned throughput (ranging from 1M-10M requests/sec across two regions) based on the demand.

Raccolta di un cliente con provisioning elastico della velocità effettiva (compresa tra 1 milione e 10 milioni di richieste al secondo)A customer's collection with elastically provisioned throughput (1M-10M requests/sec)

Provisioning elastico della velocità effettiva di Azure Cosmos DB

Relazione tra velocità effettiva e coerenzaThroughput's relationship with consistency

Analoga alla Relazione tra coerenza e velocità effettiva.Same as Consistency's relationship with throughput.

Relazione tra velocità effettiva e disponibilitàThroughput's relationship with availability

Azure Cosmos DB continua a mantenere la disponibilità anche quando vengono apportate modifiche alla velocità effettiva.Azure Cosmos DB continues to maintain its availability when the changes are made to the throughput. Azure Cosmos DB gestisce le partizioni in modo trasparente (operazioni di divisione, unione e clonazione) e garantisce che le operazioni non degradino le prestazioni o la disponibilità mentre l'applicazione aumenta o riduce la velocità effettiva in modo elastico.Azure Cosmos DB transparently manages partitions (for example, split, merge, clone operations) and ensures that the operations do not degrade performance or availability, while the application elastically increases or decreases throughput.

Garanzie di disponibilitàAvailability guarantees

Azure Cosmos DB offre un contratto di servizio con disponibilità del 99,99% per tutti gli account in una singola area e tutti gli account in più aree con coerenza media e con disponibilità in lettura del 99,999% per tutti gli account di database in più aree.Azure Cosmos DB offers a 99.99% availability SLA for all single region accounts and all multi-region accounts with relaxed consistency, and 99.999% read availability on all multi-region database accounts. Come descritto in precedenza, le garanzie di disponibilità di Azure Cosmos DB includono un limite superiore assoluto di latenza per ogni operazione del piano dati e controllo.As described earlier, Azure Cosmos DB's availability guarantees include an absolute upper bound on latency for every data and control plane operations. Le garanzie di disponibilità sono costanti e non variano in base al numero di aree o alla distanza geografica tra aree.The availability guarantees are steadfast and do not change with the number of regions or geographical distance between regions. Le garanzie di disponibilità si applicano sia al failover manuale sia a quello automatico.Availability guarantees apply with both manual as well as, automatic failover. Azure Cosmos DB offre API multihosting trasparenti che garantiscono che l'applicazione possa funzionare su endpoint logici e indirizzare le richieste in modo trasparente alla nuova area in caso di failover.Azure Cosmos DB offers transparent multi-homing APIs that ensure that your application can operate against logical endpoints and can transparently route the requests to the new region in case of failover. In altre parole, non è necessario ridistribuire l'applicazione in caso di failover in un'altra area e i contratti di servizio relativi alla disponibilità vengono comunque mantenuti.Put differently, your application does not need to be redeployed upon regional failover and the availability SLAs are maintained.

Relazione tra disponibilità e coerenza, latenza e velocità effettivaAvailability's relationship with consistency, latency, and throughput

La relazione tra disponibilità e coerenza, latenza e velocità effettiva è descritta nelle sezioni Relazione tra coerenza e disponibilità, Relazione tra latenza e disponibilità e Relazione tra velocità effettiva e disponibilità.Availability’s relationship with consistency, latency, and throughput is described in Consistency's relationship with availability, Latency's relationship with availability and Throughput's relationship with availability.

Garanzie e comportamento del sistema per la "perdita di dati"Guarantees and system behavior for "data loss"

In Azure Cosmos DB la disponibilità elevata di ogni partizione (di una raccolta) è determinata da un numero di repliche distribuite tra un minimo di 10 e un massimo di 20 domini di errore.In Azure Cosmos DB, each partition (of a collection) is made highly available by a number of replicas, which are spread across at least 10-20 fault domains. Il commit sincrono e durevole delle scritture viene eseguito da un quorum di maggioranza di repliche prima che ne venga accertata la ricezione nel client.All writes are synchronously and durably committed by a majority quorum of replicas before they are acknowledged to the client. La replica asincrona è coordinata tra partizioni distribuite in più aree.Asynchronous replication is applied with coordination across partitions spread across multiple regions. Azure Cosmos DB garantisce che non si verifichi alcuna perdita di dati per un failover manuale avviato dal tenant.Azure Cosmos DB guarantees that there is no data loss for a tenant-initiated manual failover. Durante il failover automatico, Azure Cosmos DB garantisce un limite superiore dell'intervallo di decadimento ristretto nell'intervallo di perdita dei dati come parte del contratto di servizio.During automatic failover, Azure Cosmos DB guarantees an upper bound of the configured bounded staleness interval on the data loss window as part of its SLA.

Metriche del contratto di servizio per il clienteCustomer-facing SLA metrics

Azure Cosmos DB espone in modo trasparente le metriche per velocità effettiva, latenza, coerenza e disponibilità.Azure Cosmos DB transparently exposes the throughput, latency, consistency and availability metrics. Queste metriche sono accessibili a livello di codice e tramite il portale di Azure (vedere la figura seguente).These metrics are accessible programmatically and via the Azure portal (see following figure). È anche possibile impostare avvisi per varie soglie usando Azure Application Insights.You can also set up alerts on various thresholds using Azure Application Insights.

Le metriche per coerenza, latenza, velocità effettiva e disponibilità sono disponibili in modo trasparente per ogni tenantConsistency, Latency, Throughput, and Availability metrics are transparently available to each tenant

Metriche del contratto di servizio di Azure Cosmos DB visibili per il cliente

Passaggi successiviNext steps

RiferimentiReferences

  1. Eric Brewer.Eric Brewer. Towards Robust Distributed Systems (Verso sistemi distribuiti affidabili)Towards Robust Distributed Systems
  2. Eric Brewer.Eric Brewer. CAP Twelve Years Later – How the rules have changed (Teorema CAP dodici anni dopo - Come sono cambiate le regole)CAP Twelve Years Later – How the rules have changed
  3. Gilbert, Lynch.Gilbert, Lynch. - Brewer's Conjecture and Feasibility of Consistent, Available, Partition Tolerant Web Services (Ipotesi e fattibilità dei servizi Web con coerenza, disponibilità e tolleranza di errore) - Brewer's Conjecture and Feasibility of Consistent, Available, Partition Tolerant Web Services
  4. Daniel Abadi.Daniel Abadi. Consistency Tradeoffs in Modern Distributed Database Systems Design (Compromessi sulla coerenza nella progettazione di sistemi di database distribuiti moderni)Consistency Tradeoffs in Modern Distributed Database Systems Design
  5. Martin Kleppmann.Martin Kleppmann. Please stop calling databases CP or AP (Non definire più i database come CP (coerenza e tolleranza di partizione) o AP (disponibilità e tolleranza di partizione))Please stop calling databases CP or AP
  6. Peter Bailis et al. Probabilistic Bounded Staleness (PBS) for Practical Partial Quorums (Decadimento ristretto probabilistico per quorum parziali pratici)Peter Bailis et al. Probabilistic Bounded Staleness (PBS) for Practical Partial Quorums
  7. Naor e Wool.Naor and Wool. Load, Capacity and Availability in Quorum Systems (Carico, capacità e disponibilità nei sistemi di quorum)Load, Capacity and Availability in Quorum Systems
  8. Herlihy e Wing.Herlihy and Wing. Lineralizability: A correctness condition for concurrent objects (Linearizzabilità: una condizione di correttezza per gli oggetti simultanei)Lineralizability: A correctness condition for concurrent objects
  9. Contratto di servizio Azure Cosmos DBAzure Cosmos DB SLA