Livelli di coerenza in Azure Cosmos DBConsistency levels in Azure Cosmos DB

I database distribuiti che si basano sulla replica per gestire la disponibilità elevata, la bassa latenza o entrambe, applicano il compromesso fondamentale tra coerenza di lettura e disponibilità, latenza e velocità effettiva.Distributed databases relying on replication for high availability, low latency or both, make the fundamental tradeoff between the read consistency vs. availability, latency and throughput. La maggior parte dei database distribuiti disponibili in commercio richiede che gli sviluppatori scelgano tra due modelli di coerenza estremi: la coerenza assoluta e la coerenza finale.Most commercially available distributed databases ask developers to choose between the two extreme consistency models: strong consistency and eventual consistency. Anche se la  linearizzabilità o il modello di coerenza assoluta è lo standard più alto di programmabilità dei dati, presenta un notevole svantaggio in termini di maggiore latenza (in stato stazionario) e disponibilità ridotta (in caso di errori).While the linearizability or the strong consistency model is the gold standard of data programmability, it adds a steep price of higher latency (in steady state) and reduced availability (during failures). La coerenza finale, d'altra parte, offre maggiore disponibilità e migliori prestazioni, ma è difficile da programmare.On the other hand, eventual consistency offers higher availability and better performance, but is hard to program applications.

Cosmos DB affronta la coerenza dei dati offrendo uno spettro di scelte che si collocano tra i due estremi.Cosmos DB approaches data consistency as a spectrum of choices instead of the two extremes. La coerenza assoluta e la coerenza finale sono le due estremità dello spettro, nel mezzo del quale sono disponibili molte altre opzioni.While strong consistency and eventual consistency are the two ends of the spectrum, there are many consistency choices along the spectrum. Queste opzioni di coerenza consentono agli sviluppatori di effettuare scelte precise e compromessi di granularità in relazione alla disponibilità o alle prestazioni.These consistency options enable developers to make precise choices and granular tradeoffs with respect to high availability or performance. Cosmos DB offre agli sviluppatori la possibilità di scegliere tra cinque modelli di coerenza ben definiti nello spettro della coerenza (dal più sicuro al più debole): assoluto, decadimento ristretto, sessione, coerenza del prefisso e finale.Cosmos DB enabled developers to choose among the five well-defined consistency models from the consistency spectrum (strongest to weakest) – strong, bounded staleness, session, consistent prefix, and eventual. Ognuno di questi modelli di coerenza è ben definito, intuitivo e può essere usato per scenari reali specifici.Each of these consistency models is well-defined, intuitive and can be used for specific real-world scenarios. Ognuno dei cinque modelli prevede compromessi in termini di disponibilità e prestazioni ed è supportato da un contratto di servizio completo.Each of the five consistency models provide availability and performance tradeoffs and are backed by comprehensive SLAs. L'immagine seguente mostra i diversi livelli di coerenza sotto forma di spettro:The following image shows different consistency levels as a spectrum:

La coerenza come spettro

I livelli di coerenza sono indipendenti dall'area.The consistency levels are region-agnostic. Il livello di coerenza dell'account Cosmos DB è garantito per tutte le operazioni di lettura indipendentemente dall'area da cui vengono gestite le operazioni di lettura e scrittura, dal numero di aree associate all'account Cosmos o dal fatto che l'account sia configurato con una o più aree di scrittura.The consistency level of your Cosmos DB account, is guaranteed for all read operations regardless of the region from which the reads and writes are served, the number of regions associated with your Cosmos account or whether your account is configured with a single or multiple write regions.

L'ambito della coerenza di letturaScope of the read-consistency

La coerenza di lettura si applica a una singola operazione di lettura il cui ambito si trova nell'intervallo delle chiavi di partizione, ovvero una partizione logica.The read-consistency applies to a single read operation scoped within a partition-key range (that is a logical partition). L'operazione di lettura può essere generata da un client remoto o da una stored procedure.The read operation can be issued by a remote client or a stored procedure.

Configurazione del livello di coerenza predefinitoConfiguring the default consistency level

È possibile configurare il livello di coerenza predefinito nell'account Cosmos DB in qualsiasi momento.You can configure the default consistency level on your Cosmos DB account at any time. Il livello di coerenza predefinito configurato per l'account si applica a tutti i database Cosmos (e i contenitori) in tale account.The default consistency level configured on your account applies to all Cosmos databases (and containers) under that account. Per impostazione predefinita, tutte le operazioni di lettura e le query eseguite su un contenitore o un database usano il livello di coerenza specificato.All reads and queries issued against a container or a database will use the specified consistency level by default. Per altre informazioni, vedere l'articolo su come configurare il livello di coerenza predefinito.To learn more, see how to configure the default consistency level article.

Garanzie associate ai livelli di coerenzaGuarantees associated with consistency levels

I contratti di servizio completi offerti da Azure Cosmos DB garantiscono che il 100% delle richieste di lettura soddisfino la garanzia di coerenza per qualsiasi livello di coerenza scelto.The comprehensive SLAs provided by Azure Cosmos DB guarantee that 100% of read requests will meet the consistency guarantee for any consistency level you choose. Si considera che una richiesta abbia soddisfatto il contratto di servizio per la coerenza se sono state soddisfatte tutte le garanzie associate al livello di coerenza.A read request is considered to meet the consistency SLA, if all the consistency guarantees associated with the consistency level are satisfied. Le definizioni precise dei cinque livelli di coerenza in Cosmos DB che usano il linguaggio di specifica TLA+ sono disponibili nel repository GitHub azure-cosmos-tla.The precise definitions of the five consistency levels in Cosmos DB by using the TLA+ specification language are provided in the azure-cosmos-tla GitHub repo. La semantica dei cinque livelli di coerenza è descritta di seguito:The semantics of the five consistency levels are described below:

  • Livello di coerenza = "assoluto": questo livello offre una garanzia di linearizzabilità, assicurando che le operazioni di lettura restituiscano la versione di un elemento più recente sottoposta a commit.Consistency level = "strong": Strong consistency offers a linearizability guarantee, with the reads guaranteed to return the most recent committed version of an item. Un client non visualizzerà mai una scrittura parziale o non sottoposta a commit.A client will never see an uncommitted or partial write. Gli utenti possono sempre essere certi di leggere la scrittura più recente sottoposta a commit.Users are always guaranteed to read the latest committed write.

  • Livello di coerenza = "decadimento ristretto": questo livello assicura che le operazioni di lettura rispettino la garanzia della coerenza del prefisso.Consistency level = "bounded staleness": The reads are guaranteed to honor the consistent-prefix guarantee. Le operazioni di lettura possono essere in ritardo rispetto alle operazioni di scrittura per al massimo K versioni (ovvero gli aggiornamenti) di un elemento o per un intervallo temporale "t".The reads may lag behind writes by at most K versions (that is "updates") of an item or by ‘t’ time-interval. Quando si sceglie il decadimento ristretto, il decadimento può essere configurato in due modi:When choosing bounded staleness, the "staleness" can be configured in two ways:

    • Numero di versioni (K) dell'elemento oppureNumber of versions (K) of the item or
    • Intervallo di tempo (t) con cui le operazioni di lettura possono accumulare ritardo rispetto alle operazioni di scrittura.The time interval (t) by which the reads may lag behind the writes.

    Il decadimento ristretto offre un ordine globale totale tranne all'interno della "finestra di decadimento".Bounded staleness offers total global order except within the "staleness window." La garanzia di lettura monotona esiste in un'area sia all'interno che all'esterno della "finestra di decadimento".The monotonic read guarantees exist within a region both inside and outside the "staleness window." La coerenza assoluta è basata sulla stessa semantica della coerenza con decadimento ristretto, fatta eccezione per la "finestra di decadimento", che è pari a zero.Strong consistency has the same semantics as the ones offered by bounded staleness and with a “staleness window” equal to zero. Il decadimento ristretto è anche definito linearizzabilità posticipata.Bounded staleness is also referred to as time-delayed linearizability. Quando un client esegue operazioni di lettura all'interno di un'area che accetta operazioni di scrittura, le garanzie offerte dal livello di coerenza con decadimento ristretto sono identiche a quelle della coerenza assoluta.When a client performs read operations within a region that accepts writes, the guarantees provided by bounded staleness consistency are identical to those with the strong consistency.

  • Livello di coerenza = "sessione": questo livello assicura che le operazioni di lettura rispettino le garanzie della coerenza del prefisso (presupponendo una singola sessione di scrittura), delle letture monotoniche, delle scritture monotoniche, della lettura delle proprie scritture, delle letture che seguono la scrittura.Consistency level = "session": The reads are guaranteed to honor the consistent-prefix (assuming a single “writer” session), monotonic reads, monotonic writes, read-your-writes, write-follows-reads guarantees. L'ambito di una coerenza di sessione è una sessione client.Session consistency is scoped to a client session.

  • Livello di coerenza = "coerenza del prefisso": gli aggiornamenti restituiti contengono un prefisso di tutti gli aggiornamenti, senza interruzioni.Consistency level = "consistent prefix": Updates returned contain some prefix of all the updates, with no gaps. La coerenza del prefisso garantisce che le operazioni di lettura non vedano mai il fuori sequenza delle operazioni di scrittura.Consistent prefix guarantee that reads never see out of order writes.

  • Livello di coerenza = "finale": non vi è garanzia di ordinamento per le operazioni di lettura.Consistency level = "eventual": There is no ordering guarantee for reads. In assenza di altre scritture, le repliche finiscono per convergere.In absence of any further writes, the replicas eventually converge.

I livelli di coerenza spiegati attraverso il baseballConsistency levels explained through baseball

Si prenda come esempio una partita di baseball e si immagini una sequenza di operazioni di scrittura che rappresenta il punteggio della partita con i punti inning per inning, come illustrato nel white paper Replicated Data Consistency Through Baseball (La coerenza dei dati replicati illustrata attraverso il baseball).Let's take the baseball game scenario as an example, imagine a sequence of writes representing the score from a baseball game with the inning-by-inning line score as described in the Replicated data consistency through baseball paper. Questa ipotetica partita di baseball si trova al momento nel mezzo del settimo inning e la squadra locale sta vincendo 2-5.This hypothetical baseball game is currently in the middle of the seventh inning (the proverbial seventh-inning stretch), and the home team is winning 2-5.

11 22 33 44 55 66 77 88 99 PuntiRuns
OspitiVisitors 00 00 11 00 11 00 00 22
LocaliHome 11 00 11 11 00 22 55

Un contenitore Cosmos DB include i punti totali della squadra ospite e della squadra locale.A Cosmos DB container holds the visitors and home team’s run totals. Nel corso della partita, garanzie di lettura diverse possono determinare la lettura di punteggi diversi da parte dei client.While the game is in progress, different read guarantees may result in clients reading different scores. La tabella seguente elenca il set completo di punteggi che potrebbero essere restituiti leggendo i punteggi delle due squadre con ognuna delle cinque garanzie di coerenza.The following table lists the complete set of scores that could be returned by reading the visitors and home scores with each of the five consistency guarantees. Il punteggio della squadra ospite viene elencato per primo e i diversi valori restituiti possibili sono separati da virgole.The visitors’ score is listed first, and different possible return values are separated by commas.

Livello di coerenzaConsistency Level PunteggioScores
AssolutoStrong 2-52-5
Decadimento ristrettoBounded Staleness punteggio precedente al massimo di un inning" 2-3, 2-4, 2-5scores that are at most one inning out-of-date" 2-3, 2-4, 2-5
SessioneSession
  • per il writer" 2-5for the writer" 2-5
  • per chiunque, eccetto il writer: 0-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-5for anyone other than the writer: 0-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-5
  • dopo la lettura 1-3: 1-3, 1-4, 1-5, 2-3, 2-4, 2-5after reading 1-3: 1-3, 1-4, 1-5, 2-3, 2-4, 2-5
Coerenza del prefissoConsistent Prefix 0-0, 0-1, 1-1, 1-2, 1-3, 2-3, 2-4, 2-50-0, 0-1, 1-1, 1-2, 1-3, 2-3, 2-4, 2-5
FinaleEventual 0-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-50-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-5

Informazioni aggiuntiveAdditional reading

Per altre informazioni sui concetti di coerenza, vedere gli articoli seguenti:To learn more about consistency concepts, read the following articles:

Passaggi successiviNext steps

Per altre informazioni sui livelli di coerenza in Cosmo DB, vedere gli articoli seguenti:To learn more about consistency levels in Cosmos DB, read the following articles: