Úrovně konzistence ve službě Azure Cosmos DB

platí pro: SQL api rozhraní API Cassandra Gremlin api rozhraní API pro tabulky Azure Cosmos DB api pro MongoDB

Distribuované databáze, které spoléhají na replikaci při vysoké dostupnosti, nízké latenci nebo obojí, musí učinit zásadní kompromis mezi úrovní konzistence čtení, dostupností, latencí a propustností podle definice PACELC věta. Linearizability modelu silné konzistence je Gold Standard pro programovatelnost dat. Přidává ale strméou cenu z vyšších latencí zápisu, protože data se musí replikovat a potvrzovat napříč velkými vzdálenostmi. Silná konzistence může mít taky vliv na omezenou dostupnost (během selhání), protože data nejde replikovat a potvrzovat v každé oblasti. Konečná konzistence nabízí vyšší dostupnost a lepší výkon, ale jejich aplikace je obtížnější, protože data nemusí být zcela konzistentní napříč všemi oblastmi.

Většina komerčně dostupných distribuovaných databází NoSQL dostupných na trhu nabízí jenom silnou a konečnou konzistenci. Azure Cosmos DB nabízí pět jasně definovaných úrovní. Od nejsilnějších po nejslabších úrovních jsou tyto úrovně:

  • Silná
  • Ohraničená neaktuálnost
  • Relace
  • Konzistentní předpona
  • Případná

Každá úroveň poskytuje kompromisy k dostupnosti a výkonu. Následující obrázek znázorňuje různé úrovně konzistence jako spektrum.

Konzistence jako spektrum

úrovně konzistence jsou nezávislá oblasti a jsou zaručené pro všechny operace bez ohledu na oblast, ze které jsou předávány čtení a zápisy, počet oblastí přidružených k vašemu účtu Azure Cosmos nebo zda je váš účet nakonfigurován s jednou nebo více oblastmi zápisu.

Úrovně konzistence a rozhraní API služby Cosmos DB

Azure Cosmos DB poskytuje nativní podporu pro rozhraní api kompatibilní se síťovými protokoly pro oblíbené databáze. Patří mezi ně MongoDB, Apache Cassandra, Gremlin a Azure Table Storage. při použití rozhraní Gremlin API a rozhraní API pro tabulky se používá výchozí úroveň konzistence nakonfigurovaná na účtu Azure Cosmos. podrobnosti o mapování na úrovni konzistence mezi rozhraní API Cassandra nebo rozhraní api pro MongoDB a Azure Cosmos DB úrovně konzistence najdete v tématu rozhraní API Cassandra mapování konzistence a rozhraní api pro mapování konzistence MongoDB.

Rozsah konzistence čtení

Konzistence čtení se vztahuje na jeden obor operace čtení v rámci logického oddílu. Operaci čtení je možné vystavit pomocí vzdáleného klienta nebo uložené procedury.

Konfigurace výchozí úrovně konzistence

výchozí úroveň konzistence můžete v účtu Azure Cosmos kdykoli nakonfigurovat. výchozí úroveň konzistence nakonfigurovaná na vašem účtu se vztahuje na všechny databáze a kontejnery služby Azure Cosmos v rámci daného účtu. Všechny čtení a dotazy vydané pro kontejner nebo databázi používají ve výchozím nastavení zadanou úroveň konzistence. Další informace najdete v tématu Postup Konfigurace výchozí úrovně konzistence. U konkrétního požadavku můžete také přepsat výchozí úroveň konzistence. Další informace najdete v článku postup přepsání výchozí úrovně konzistence .

Tip

Přepsání výchozí úrovně konzistence platí pouze pro čtení v rámci klienta sady SDK. Účet nakonfigurovaný pro silnou konzistenci ve výchozím nastavení bude pořád zapisovat a replikovat data synchronně do každé oblasti v účtu. Když instance klienta sady SDK nebo požadavek potlačí tuto relaci nebo slabší konzistenci, budou čtení provedeny pomocí jediné repliky. Další podrobnosti najdete v tématu úrovně a propustnost konzistence .

Důležité

Po změně výchozí úrovně konzistence se musí znovu vytvořit jakákoli instance sady SDK. To se dá udělat restartováním aplikace. Tím se zajistí, že sada SDK bude používat novou výchozí úroveň konzistence.

Záruky spojené s úrovněmi konzistence

Azure Cosmos DB zaručuje, že 100 procento žádostí o čtení odpovídá záruku konzistence pro zvolenou úroveň konzistence. přesné definice pěti úrovní konzistence v Azure Cosmos DB používání jazyka TLA + specification jsou k dispozici v úložišti Azure-Cosmos-TLA GitHub.

Sémantika pěti úrovní konzistence je popsána v následujících částech.

Silná konzistence

Silná konzistence nabízí záruku linearizovatelnosti. Linearizability odkazuje na obsluhu souběžných požadavků. U čtení je zaručeno, že vrátí nejnovější potvrzenou verzi položky. Klient nikdy nevidí nepotvrzené nebo částečné zápisy. Uživatelům se vždycky ručí, že si přečtou poslední potvrzený zápis.

Následující obrázek znázorňuje silnou konzistenci se hudebními poznámkami. Po zapsání dat do oblasti "Západní USA 2" se při čtení dat z jiných oblastí zobrazí nejnovější hodnota:

Ilustrace silné úrovně konzistence

Konzistence Omezená neaktuálnost

V ohraničené konzistenci neaktuálnosti mají čtení zaručenou záruku konzistence. Čtení můžou na konci zápisu zajímat maximálně "K" verzí (to znamená "aktualizace") položky nebo časového intervalu "T" , podle toho, co je dosaženo jako první. Jinými slovy, pokud vyberete možnost ohraničená neaktuálnost, lze nakonfigurovat "zastaralost" dvěma způsoby:

  • Počet verzí položky (KB)
  • Čtení s časovým intervalem (T) může odvést zpoždění za zápisy.

Pro účet s jednou oblastí je minimální hodnota K a T 10 operací zápisu nebo 5 sekund. Pro účty ve více oblastech je minimální hodnota K a T 100 000 operací zápisu nebo 300 sekund.

Ohraničená neaktuálnost nabízí celkové globální pořadí mimo "okno pro zastaralost". Když klient provádí operace čtení v rámci oblasti, která přijímá zápisy, záruky poskytnuté konzistencí neaktuálnosti jsou stejné jako záruky silnými konzistencí. Vzhledem k tomu, že se v okně zastaralosti blíží čas nebo aktualizace, podle toho, co je blíže, služba omezí nové zápisy, aby replikace mohla zachytit a přijmout záruku konzistence.

V rámci okna zastaralost poskytuje ohraničená neaktuálnost následující záruky konzistence:

  • Konzistence klientů ve stejné oblasti pro účet s oblastí pro zápis s jednou oblastí zápisu = Strong

  • Konzistence klientů v různých oblastech pro účet s jednou oblastí zápisu = konzistentní předpona

  • Konzistence klientů zapisujících do jedné oblasti pro účet s více oblastmi zápisu = konzistentní předpona

  • Konzistence pro klienty zapisujících do různých oblastí pro účet s více oblastmi zápisu = případné

    Ohraničená neaktuálnost se často volí globálně distribuovanými aplikacemi, které očekávají nízkou latenci zápisu, ale vyžadují celkovou záruku globální objednávky. Ohraničená neaktuálnost je ideální pro aplikace, které nabízí spolupráci skupin a sdílení, burzovní, doplňování a publikování a zařazování do fronty atd. Následující obrázek znázorňuje konzistenci s ohraničenou neaktuálností pomocí hudebních poznámek. Po zapsání dat do oblasti "Západní USA 2" přečtou oblasti "Východní USA 2" a "Austrálie – východ" písemnou hodnotu na základě nakonfigurovaného maximálního času prodlevy nebo maximálního počtu operací:

    Ilustrace úrovně konzistence s ohraničenou kostarou

Konzistence Relace

V konzistenci relace je v rámci jedné klientské relace čtení zaručeno respektovat konzistentní předpony, monotónní čtení, monotónní zápisy, čtení a zápisy a záruky za čtení za běhu. Předpokládá se jedna relace "zapisovače" nebo sdílení tokenu relace pro více modulů pro zápis.

Klientům mimo relaci, která provádí zápis, se zobrazí následující záruky:

  • Konzistence pro klienty ve stejné oblasti pro účet s jednou oblastí zápisu = konzistentní předpona

  • Konzistence klientů v různých oblastech pro účet s jednou oblastí zápisu = konzistentní předpona

  • Konzistence klientů zapisujících do jedné oblasti pro účet s více oblastmi zápisu = konzistentní předpona

  • Konzistence klientů zapisujících do více oblastí pro účet s více oblastmi zápisu = případné

  • konzistence klientů využívajících Azure Cosmos DB integrovanou mezipaměť = případný

    Konzistence relací je nejčastěji používaná úroveň konzistence pro jednu oblast i pro globálně distribuované aplikace. Poskytuje latence zápisu, dostupnost a propustnost čtení srovnatelné s tím, že má konečnou konzistenci, ale také poskytuje záruky konzistence, které vyhovují potřebám aplikací zapsaných v kontextu uživatele. Následující obrázek znázorňuje konzistenci relace se hudebními poznámkami. "Západní USA 2 Writer" a "Západní USA 2 Reader" používají stejnou relaci (relaci A), aby obě současně četly stejná data. Vzhledem k tomu, že oblast Austrálie – východ používá "relaci B", získá data později, ale ve stejném pořadí jako zápisy.

    Ilustrace úrovně konzistence relace

Konzistence Konzistentní předpona

V možnosti konzistentní předpona, vrácené aktualizace obsahují předponu všech aktualizací bez mezer. Konzistentní předpony úrovně konzistence, které nemají nikdy vidět zápisy mimo pořadí.

Pokud byla zápisy provedena v pořadí A, B, C , klient uvidí buď A , A,B nebo A,B,C , ale nikdy mimo pořadí, například A,C nebo B,A,C . Konzistentní předpona poskytuje latence zápisu, dostupnost a propustnost čtení srovnatelné s tím, že má konečnou konzistenci, ale také poskytuje pořadí záruk, které vyhovuje potřebám scénářů, ve kterých je pořadí důležité.

Níže jsou uvedené záruky konzistence pro konzistentní předpony:

  • Konzistence pro klienty ve stejné oblasti pro účet s jednou oblastí zápisu = konzistentní předpona
  • Konzistence klientů v různých oblastech pro účet s jednou oblastí zápisu = konzistentní předpona
  • Konzistence klientů zapisujících do jedné oblasti pro účet s více oblastmi pro zápis = konzistentní předpona
  • Konzistence klientů zapisujících do více oblastí pro účet s více oblastmi zápisu = případný

Následující obrázek znázorňuje konzistenci předpon konzistence se hudebními poznámkami. Ve všech oblastech čtení nikdy nevidí zápisy mimo pořadí:

Obrázek konzistentní předpony

Případná konzistence

V konečné konzistenci není zaručeno řazení pro čtení. Pokud nedojde k žádným dalším operacím zápisu, repliky se nakonec konvergují.
Konečná konzistence představuje slabší formu konzistence, protože klient může číst hodnoty, které jsou starší než ty, které se předtím četly. Konečná konzistence je ideální, pokud aplikace nevyžaduje žádné záruky na řazení. Mezi příklady patří počet re, podobně jako u jiných než vlákenných komentářů. Následující obrázek znázorňuje konečnou konzistenci se hudebními poznámkami.

viIllustration s konečnou konzistencí

Záruky konzistence v praxi

V praxi můžete často získat silnější záruky konzistence. Záruky konzistence pro operaci čtení odpovídají aktuálnosti a objednání stavu databáze, který požadujete. Konzistence čtení je vázána na řazení a šíření operací zápisu a aktualizace.

Pokud v databázi neexistují žádné operace zápisu, může být operace čtení s úrovněmi konzistence s případnými, relačními nebo konzistentními předponami stejná jako operace čtení se silným stupněm konzistence.

pokud je váš účet Azure Cosmos nakonfigurovaný s úrovní konzistence jinou než silná konzistence, můžete zjistit pravděpodobnost, že klienti mohou získat silné a konzistentní čtení pro vaše úlohy, a to tak, že se podíváte na metriku služby PBS ( Probabilistically bounded ). Tato metrika se zveřejňuje v Azure Portal. Další informace najdete v tématu monitorování metriky služby PBS (probabilistically Bounded).

Pravděpodobnostní s ohraničenou neaktuálností ukazuje, jak je to vaše konečná konzistence. tato metrika poskytuje přehled o tom, jak často můžete získat silnější konzistenci než úroveň konzistence, kterou jste v účtu Azure Cosmos aktuálně nakonfigurovali. Jinými slovy můžete zobrazit pravděpodobnost (měřeno v milisekundách) pro získání silně konzistentních čtení pro kombinaci oblastí zápisu a čtení.

Úrovně konzistence a latence

Latence čtení pro všechny úrovně konzistence je vždycky zaručená za méně než 10 milisekund na 99. percentilu. Průměrná latence čtení v 50. percentilu má obvykle 4 milisekundy nebo méně.

Latence zápisu pro všechny úrovně konzistence je vždycky zaručená za méně než 10 milisekund na 99. percentilu. Průměrná latence zápisu na 50. percentilu je obvykle 5 milisekund nebo méně. účty Azure Cosmos, které jsou v několika oblastech a jsou nakonfigurované se silnými konzistencí, představují výjimku z této záruky.

Latence zápisu a silná konzistence

u účtů Azure Cosmos nakonfigurovaných se silnou konzistencí s více než jednou oblastí se latence zápisu rovná dvojnásobku doby odezvy (RTT) mezi kteroukoli ze dvou nejvzdálenějších oblastí plus 10 milisekund na 99. percentilu. vysoká doba odezvy sítě mezi oblastmi se přeloží na vyšší latenci pro Cosmos DB požadavky, protože silná konzistence dokončí operaci jenom poté, co zaručí, že se potvrdila ve všech oblastech v rámci účtu.

Přesná latence RTT je funkce rychlosti a topologie sítě Azure. Azure Networking neposkytuje žádnou latenci SLA pro dobu odezvy mezi dvěma oblastmi Azure, ale zveřejňuje statistiku latence pro službu Azure Network Round-Trip. v případě účtu Azure Cosmos se latence replikace zobrazují v Azure Portal. můžete použít Azure Portal (přejít do okna metriky, vybrat kartu konzistence) a monitorovat latence replikace mezi různými oblastmi, které jsou přidruženy k vašemu účtu Azure Cosmos.

Důležité

Při vysoké latenci zápisu je ve výchozím nastavení zablokovaná silná konzistence pro účty s oblastmi zahrnujícími více než 5000 mil (8000 kilometrů). Pokud chcete tuto funkci povolit, obraťte se prosím na podporu.

Úrovně konzistence a propustnost

  • V případě silné a ohraničené neaktuálnosti se čtení provádí se dvěma replikami ve čtyři sadě replik (minoritní kvorum), aby poskytovala záruky konzistence. Relace, konzistentní předpona a konečné čtení pro jednu repliku. Výsledkem je, že pro stejný počet jednotek žádosti je propustnost čtení pro silná a ohraničená neaktuálnost v polovině dalších úrovní konzistence.

  • Pro daný typ operace zápisu, například INSERT, Replace, Upsert a DELETE, je propustnost zápisu pro jednotky požadavků stejná pro všechny úrovně konzistence. V případě silné konzistence je třeba provést změny v každé oblasti (globální většina), zatímco pro všechny ostatní úrovně konzistence se používá místní většina (tři repliky ve čtyři sadě replik).

Úroveň konzistence Čtení kvora Zápisy kvora
Silná Místní menšina Globální většina
Omezená neaktuálnost Místní menšina Místní většina
Relace Jedna replika (pomocí tokenu relace) Místní většina
Konzistentní předpona Jedna replika Místní většina
Případná Jedna replika Místní většina

Poznámka

Náklady na čtení v úrovni RU/s pro místní minoritní čtení jsou dvojnásobné od slabší úrovně konzistence, protože čtení se provádí ze dvou replik, které poskytují záruky konzistence pro silnou a ohraničenou neaktuálnost.

Úrovně konzistence a trvanlivost dat

V globálně distribuovaném databázovém prostředí existuje přímý vztah mezi úrovní konzistence a odolností s daty v oblasti výpadku v rámci oblasti. Při vývoji plánu provozní kontinuity musíte pochopit maximální dobu nedávných aktualizací dat. aplikace může při obnovování po poškození události tolerovat ztrátu. Časové období aktualizací, které můžete chtít ztratit, se označuje jako cíl bodu obnovení (RPO).

Následující tabulka definuje vztah mezi modelem konzistence a odolností dat při výpadku oblasti v rámci sítě.

Oblast (y) Režim replikace Úroveň konzistence RPO
1 Jedna nebo více oblastí zápisu Jakákoli úroveň konzistence < 240 minut
>1 Jedna oblast zápisu Relace, konzistentní předpona, případný < 15 minut
>1 Jedna oblast zápisu Omezená neaktuálnost K & T
>1 Jedna oblast zápisu Silná 0
>1 Více oblastí zápisu Relace, konzistentní předpona, případný < 15 minut
>1 Více oblastí zápisu Omezená neaktuálnost K & T

K = počet verzí "K" (tj. aktualizace) položky.

T = časový interval "t" od poslední aktualizace.

Pro účet s jednou oblastí je minimální hodnota K a T 10 operací zápisu nebo 5 sekund. Pro účty ve více oblastech je minimální hodnota K a T 100 000 operací zápisu nebo 300 sekund. Tato definice definuje minimální RPO pro data při použití ohraničené neaktuálnosti.

Silná konzistence a vícenásobné oblasti zápisu

účty Cosmos nakonfigurované s více oblastmi zápisu nelze nakonfigurovat pro silnou konzistenci, protože není možné, aby distribuovaný systém poskytoval bod RPO nula a RTO nula. Navíc neexistují žádné výhody latence zápisu na používání silné konzistence s více oblastmi zápisu, protože zápis do jakékoli oblasti musí být replikován a potvrzen do všech nakonfigurovaných oblastí v rámci účtu. Výsledkem je stejná latence zápisu jako jeden účet oblasti pro zápis.

Další materiály ke čtení

Další informace o konceptech konzistence najdete v následujících článcích:

Další kroky

další informace o úrovních konzistence v Azure Cosmos DB najdete v následujících článcích: