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

I database distribuiti che si basano sulla replica per garantire disponibilità elevata, bassa latenza o entrambe, applicano il compromesso fondamentale tra coerenza di lettura e disponibilità, latenza e velocità effettiva.Distributed databases that rely 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. La  linearizzabilità o il modello di coerenza assoluta rappresenta lo standard assoluto di programmabilità dei dati,The linearizability or the strong consistency model is the gold standard of data programmability. ma aggiunge il caro prezzo di una latenza elevata (in uno stato stabile) e di una disponibilità ridotta (in caso di errori).But 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.

Azure Cosmos DB affronta la coerenza dei dati offrendo uno spettro di scelte che si collocano tra i due estremi.Azure Cosmos DB approaches data consistency as a spectrum of choices instead of two extremes. La coerenza assoluta e la coerenza finale rappresentano le due estremità, ma all'interno dello spettro sono disponibili molte altre opzioni.Strong consistency and eventual consistency are at the ends, but there are many consistency choices along the spectrum. Gli sviluppatori possono usare queste opzioni per effettuare scelte precise e compromessi di granularità in relazione alla disponibilità elevata o alle prestazioni.Developers can use these options to make precise choices and granular tradeoffs with respect to high availability or performance.

Con Azure Cosmos DB, gli sviluppatori possono scegliere tra cinque modelli di coerenza ben definiti nello spettro della coerenza.With Azure Cosmos DB, developers can choose from five well-defined consistency models on the consistency spectrum. Dal più forte al più debole, un modello può essere assoluto, con obsolescenza associata, sessione, coerenza del prefisso ed eventuale.From strongest to weakest, the models are strong, bounded staleness, session, consistent prefix, and eventual. I modelli sono ben definiti e intuitiviThe models are well-defined and intuitive. e possono essere usati per scenari reali specifici.They can be used for specific real-world scenarios. Ogni modello prevede compromessi di disponibilità e prestazioni ed è supportato da un contratto di servizio completo.Each model provides availability and performance tradeoffs and is backed by comprehensive SLAs. L'immagine seguente illustra 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 Azure Cosmos è 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 Azure Cosmos o dal fatto che l'account sia configurato con una o più aree di scrittura.The consistency level of your Azure Cosmos 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 Azure Cosmos account, or whether your account is configured with a single or multiple write regions.

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 in un intervallo di chiavi di partizione o in una partizione logica.Read consistency applies to a single read operation scoped within a partition-key range or 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.

Configurare il livello di coerenza predefinitoConfigure the default consistency level

È possibile configurare il livello di coerenza predefinito nell'account Azure Cosmos in qualsiasi momento.You can configure the default consistency level on your Azure Cosmos account at any time. Il livello di coerenza predefinito configurato per l'account si applica a tutti i database di Azure Cosmos DB e ai contenitori in tale account.The default consistency level configured on your account applies to all Azure Cosmos DB 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 use the specified consistency level by default. Per altre informazioni, vedere come configurare il livello di coerenza predefinito.To learn more, see how to configure the default consistency level.

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 soddisfano la garanzia di coerenza per qualsiasi livello di coerenza scelto.The comprehensive SLAs provided by Azure Cosmos DB guarantee that 100 percent of read requests meet the consistency guarantee for any consistency level you choose. Una richiesta soddisfa il contratto di servizio per la coerenza se sono soddisfatte tutte le garanzie associate al livello di coerenza.A read request meets the consistency SLA if all the consistency guarantees associated with the consistency level are satisfied. Le definizioni precise dei cinque livelli di coerenza in Azure 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 Azure 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 qui:The semantics of the five consistency levels are described here:

  • Assoluta: La coerenza assoluta offre una garanzia di linearizzabilità.Strong: Strong consistency offers a linearizability guarantee. È garantito che le letture restituiscano sempre la versione di un elemento di cui sia stato eseguito il commit più di recente.The reads are guaranteed to return the most recent committed version of an item. Un client non visualizza mai una scrittura parziale o di cui non sia stato eseguito il commit.A client never sees 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.

  • Decadimento ristretto: è garantito che le operazioni di lettura rispettino la garanzia della coerenza del prefisso.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 al massimo per "K" versioni (ovvero "aggiornamenti") di un elemento o per un intervallo di tempo "t".The reads might lag behind writes by at most "K" versions (that is "updates") of an item or by "t" time interval. Quando si sceglie l'obsolescenza associata, è possibile configurare l'obsolescenza in due modi:When you choose bounded staleness, the "staleness" can be configured in two ways:

    • Numero di versioni (K) dell'elementoThe number of versions (K) of the item
    • Intervallo di tempo (t) in cui le operazioni di lettura possono essere in ritardo rispetto alle operazioni di scritturaThe time interval (t) by which the reads might 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 obsolescenza.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 obsolescenza associata.Strong consistency has the same semantics as the ones offered by bounded staleness. La finestra di obsolescenza è uguale a zero.The staleness window is equal to zero. L'obsolescenza associata è anche definita 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 obsolescenza associata 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 guarantees with the strong consistency.

  • 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 e delle letture che seguono la scrittura.Session: The reads are guaranteed to honor the consistent-prefix (assuming a single “writer” session), monotonic reads, monotonic writes, read-your-writes, and write-follows-reads guarantees. L'ambito di una coerenza di sessione è una sessione client.Session consistency is scoped to a client session.

  • Coerenza del prefisso: gli aggiornamenti restituiti contengono un prefisso di tutti gli aggiornamenti, senza lacune.Consistent prefix: Updates that are returned contain some prefix of all the updates, with no gaps. La coerenza del prefisso garantisce che le operazioni di lettura non riscontrino mai scritture non in ordine.Consistent prefix guarantees that reads never see out-of-order writes.

  • Finale: Non c'è garanzia di ordinamento per le letture.Eventual: There's no ordering guarantee for reads. In assenza di altre scritture, le repliche finiscono per convergere.In the absence of any further writes, the replicas eventually converge.

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

Come esempio, ecco uno scenario tratto dal baseball.Let's take a baseball game scenario as an example. Si immagini una sequenza di operazioni di scrittura che rappresentano il punteggio di una partita di baseball.Imagine a sequence of writes that represent the score from a baseball game. Il punteggio inning per inning è descritto nel documento Replicated data consistency through baseball (La coerenza dei dati replicati spiegata tramite il baseball).The inning-by-inning line score is described in the Replicated data consistency through baseball paper. In questa ipotetica partita di baseball si sta svolgendo il settimo inning.This hypothetical baseball game is currently in the middle of the seventh inning. È la dirittura del settimo inning.It's the seventh-inning stretch. La squadra ospite perde 2 a 5.The visitors are behind with a score of 2 to 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

I punti totali della squadra ospite e della squadra locale si trovano in un contenitore Azure Cosmos DB.An Azure Cosmos DB container holds the visitors' and home team 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 might result in clients reading different scores. La tabella seguente elenca il set completo di punteggi che possono essere restituiti dalla lettura dei punteggi delle due squadre con ognuna delle cinque garanzie di coerenza.The following table lists the complete set of scores that might 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.The visitors' score is listed first. Possibili valori restituiti diversi sono separati da virgole.Different possible return values are separated by commas.

Livello di coerenzaConsistency level PunteggioScores
AssolutoStrong 2-52-5
Obsolescenza associataBounded staleness Punteggi non aggiornati di un inning al massimo: 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 Azure Cosmo DB, vedere gli articoli seguenti:To learn more about consistency levels in Azure Cosmos DB, read the following articles: