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

PLATÍ PRO: Rozhraní API Cassandra API Gremlin API Pro tabulky ROZHRANÍ API služby Azure Cosmos DB API pro MongoDB

Distribuované databáze, které se spoléhají na replikaci pro vysokou dostupnost, nízkou latenci nebo obojí, musí mít zásadní kompromis mezi konzistencí čtení, dostupností, latencí a propustností, jak je definováno teorémem PACELC. Linearizovatelnost silného modelu konzistence je zlatý standard programovatelnosti dat. Přidává ale strmou cenu od vyšší latence zápisu kvůli tomu, že data se musí replikovat a provádět napříč velkými vzdálenostmi. Silná konzistence může také mít omezenou dostupnost (během selhání), protože data nemohou replikovat a potvrdit v každé oblasti. Konečná konzistence nabízí vyšší dostupnost a lepší výkon, ale je obtížnější programovat aplikace, protože data nemusí být ve všech oblastech úplně konzistentní.

Většina komerčně dostupných distribuovaných databází NoSQL dostupných na trhu dnes poskytuje pouze silnou a konečnou konzistenci. Azure Cosmos DB nabízí pět dobře definovaných úrovní. Úrovně jsou od nejsilnějších po nejslabší:

Další informace o výchozí úrovni konzistence najdete v tématu Konfigurace výchozí úrovně konzistence nebo přepsání výchozí úrovně konzistence.

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

Consistency as a spectrum

Úrovně konzistence jsou nezávislé na oblastech a jsou zaručené pro všechny operace bez ohledu na oblast, ze které se obsluhují čtení a zápisy, počet oblastí přidružených k vašemu účtu Služby Azure Cosmos nebo to, jestli je váš účet nakonfigurovaný s jednou nebo více oblastmi zápisu.

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

Azure Cosmos DB poskytuje nativní podporu rozhraní API kompatibilní s 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í Table API se použije výchozí úroveň konzistence nakonfigurovaná pro účet Služby Azure Cosmos. Podrobnosti o mapování na úrovni konzistence mezi rozhraním API Cassandra nebo rozhraním API pro MongoDB a úrovněmi konzistence služby Azure Cosmos DB najdete v tématu Mapování konzistence rozhraní API Cassandra a rozhraní API pro mapování konzistence MongoDB.

Rozsah konzistence čtení

Konzistence čtení se vztahuje na jednu operaci čtení vymezenou v rámci logického oddílu. Operaci čtení může vystavit vzdálený klient nebo uložená procedura.

Konfigurace výchozí úrovně konzistence

Výchozí úroveň konzistence pro účet Azure Cosmos můžete kdykoli nakonfigurovat. Výchozí úroveň konzistence nakonfigurovaná pro váš účet platí pro všechny databáze a kontejnery 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 konfigurace výchozí úrovně konzistence. Další informace o přepsání výchozí úrovně konzistence pro konkrétní požadavek najdete v článku o přepsání výchozí úrovně konzistence .

Tip

Přepsání výchozí úrovně konzistence platí jenom pro čtení v klientovi sady SDK. Účet nakonfigurovaný pro silnou konzistenci ve výchozím nastavení stále zapisuje a replikuje data synchronně do každé oblasti v účtu. Když instance klienta sady SDK nebo požadavek přepíše tuto relaci nebo slabší konzistenci, čtení se provede pomocí jedné repliky. Další informace najdete v tématu Úrovně konzistence a propustnost.

Důležité

Po změně výchozí úrovně konzistence je nutné znovu vytvořit libovolnou instanci sady SDK. Můžete to provést restartováním aplikace. Tím se zajistí, že sada SDK používá novou výchozí úroveň konzistence.

Záruky spojené s úrovněmi konzistence

Azure Cosmos DB zaručuje, že 100 % požadavků na čtení splňuje záruku konzistence zvolené úrovně konzistence. Přesné definice pěti úrovní konzistence ve službě Azure Cosmos DB pomocí jazyka specifikace TLA+ 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. Linearizovatelnost odkazuje na souběžné poskytování požadavků. Čtení zaručuje vrácení nejnovější potvrzené verze položky. Klient nikdy neuvidí nepotvrzené ani částečné zápisy. Uživatelům je vždy zaručeno, že budou číst nejnovější potvrzené zápisy.

Následující obrázek znázorňuje silnou konzistenci s hudebními poznámkami. Po zápisu dat do oblasti USA – západ 2 při čtení dat z jiných oblastí získáte nejnovější hodnotu:

Illustration of strong consistency level

Konzistence Omezená neaktuálnost

V omezené nekonzistenci je zaručeno, že čtení respektují záruku konzistentní předpony. Čtení může za zápisy zpožďovat maximálně " K" verze (tj. "aktualizace") položky nebo podle časového intervalu "T" , podle toho, co je dosaženo jako první. Jinými slovy, když zvolíte ohraničenou nestarost, může být "neschválnost" nakonfigurována dvěma způsoby:

  • Počet verzí (K) položky
  • Časové intervaly čtení (T) můžou za zápisy zpožďovat.

Pro účet jedné oblasti je minimální hodnota K a T 10 operací zápisu nebo 5 sekund. U účtů s více oblastmi je minimální hodnota K a T 100 000 operací zápisu nebo 300 sekund.

Ohraničená neakutnost nabízí celkový globální pořadí mimo "okno nestaralosti". Když klient provádí operace čtení v rámci oblasti, která přijímá zápisy, záruky poskytované konzistencí omezené zastaralé konzistence jsou stejné jako záruky silné konzistence. Vzhledem k tomu, že se okno nestaralosti blíží času nebo aktualizacím, podle toho, co je blíže, služba omezí nové zápisy, aby replikace mohla dohnat a respektovat záruku konzistence.

V okně nestaralosti poskytuje ohraničená nealkoholnost následující záruky konzistence:

  • Konzistence pro klienty ve stejné oblasti pro účet s jednou oblastí zápisu = Silná

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

  • Konzistence pro klienty zápisu do jedné oblasti pro účet s více oblastmi zápisu = konzistentní předpona

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

    Vázaná nefektivnost se často volí globálně distribuovanými aplikacemi, které očekávají nízkou latenci zápisu, ale vyžadují celkovou globální záruku objednávek. Ohraničovaná nefektivnost je skvělá pro aplikace, které obsahují spolupráci a sdílení skupin, burzovní ticker, publikování-přihlášení k odběru nebo zařaování do front atd. Následující obrázek znázorňuje konzistenci ohraničené zastaralé konzistence s hudebními poznámkami. Po zápisu dat do oblasti USA – západ 2 si oblasti USA – východ 2 a Austrálie – východ načtou zapisovanou hodnotu na základě nakonfigurované maximální doby prodlevy nebo maximálního počtu operací:

    Illustration of bounded staleness consistency level

Konzistence Relace

V konzistenci relace je zaručeno, že v rámci jedné relace klienta bude respektovat záruky konzistentního čtení, monotónní čtení, monotónní zápisy, čtení-zápisy a záruky zápisu-následujících čtení. To předpokládá jednu relaci zápisu nebo sdílení tokenu relace pro více zapisovačů.

Klienti mimo relaci, kteří provádějí zápisy, uvidí následující záruky:

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

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

  • Konzistence pro klienty zápisu do jedné oblasti pro účet s více oblastmi zápisu = konzistentní předpona

  • Konzistence pro klienty zápisu do více oblastí pro účet s více oblastmi zápisu = Případ

  • Konzistence pro klienty využívající integrovanou mezipaměť = Azure Cosmos DB– případná

    Konzistence relací je nejčastěji používanou úrovní konzistence pro jednu oblast i globálně distribuované aplikace. Poskytuje latence zápisu, dostupnost a propustnost čtení srovnatelnou s konečnou konzistencí, ale také poskytuje záruky konzistence, které vyhovují potřebám aplikací, které jsou napsané pro provoz v kontextu uživatele. Následující obrázek znázorňuje konzistenci relace s hudebními poznámkami. "Zapisovač USA – západ 2" a "Čtenář USA – západ 2" používají stejnou relaci (relace A), aby obě četly stejná data současně. Zatímco oblast "Austrálie – východ" používá relaci B, takže přijímá data později, ale ve stejném pořadí jako zápisy.

    Illustration of session consistency level

Konzistence Konzistentní předpona

V konzistentní možnosti předpony obsahují vrácené aktualizace určitou předponu všech aktualizací bez mezer. Konzistentní úroveň konzistence předpon zaručuje, že čtení nikdy neuvidí zápisy mimo pořadí.

Pokud byly zápisy provedeny v pořadí A, B, C, pak klient uvidí Abuď , A,Bnebo , nebo A,B,C, ale nikdy mimo pořadí permutace jako A,C nebo B,A,C. Konzistentní předpona poskytuje latence zápisu, dostupnost a propustnost čtení srovnatelnou s konečnou konzistencí, ale také poskytuje záruky objednávek, které vyhovují potřebám scénářů, ve kterých je pořadí důležité.

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

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

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

Illustration of consistent prefix

Případná konzistence

V konečné konzistenci neexistuje žádná záruka řazení pro čtení. Pokud nedojde k žádným dalším operacím zápisu, repliky se nakonec konvergují.

Konečná konzistence je nejslabší forma konzistence, protože klient může číst hodnoty starší než ty, které předtím četl. Konečná konzistence je ideální v případě, že aplikace nevyžaduje žádné záruky řazení. Mezi příklady patří počet retweetů, lajků nebo komentářů bez vláken. Následující obrázek znázorňuje konečnou konzistenci s hudebními poznámkami.

viIllustration of eventual consistency

Záruky konzistence v praxi

V praxi můžete často získat silnější záruky konzistence. Konzistence zaručuje, že operace čtení odpovídá aktuálnosti a řazení stavu databáze, který požadujete. Konzistence čtení je svázaná s řazením a šířením operací zápisu a aktualizace.

Pokud v databázi neexistují žádné operace zápisu, operace čtení s případnými úrovněmi konzistence, relace nebo konzistentní úrovně konzistence předpony pravděpodobně vrátí stejné výsledky jako operace čtení se silnou úrovní konzistence.

Pokud je váš účet Služby Azure Cosmos nakonfigurovaný s jinou úrovní konzistence než silnou konzistencí, můžete zjistit pravděpodobnost, že vaši klienti můžou pro vaše úlohy získat silné a konzistentní čtení, a to tak, že se podíváte na metriku Probabilisticky omezená nestarost (PBS). Tato metrika je zpřístupněna na webu Azure Portal, kde se dozvíte více o metrikách monitoru probabilisticky ohraničenou nestarost (PBS).

Pravděpodobnostní zastaralost ukazuje, jak je případná konečná konzistence. Tato metrika poskytuje přehled o tom, jak často můžete získat silnější konzistenci než úroveň konzistence, kterou jste aktuálně nakonfigurovali ve svém účtu Azure Cosmos. Jinými slovy můžete vidět pravděpodobnost (měřenou v milisekundách) silné konzistentní čtení pro kombinaci oblastí zápisu a čtení.

Úrovně konzistence a latence

Latence čtení pro všechny úrovně konzistence je vždy zaručená, že při 99. percentilu bude menší než 10 milisekund. Průměrná latence čtení při 50. percentilu je obvykle 4 milisekundy nebo méně.

Latence zápisu pro všechny úrovně konzistence je vždy zaručena, že při 99. percentilu bude menší než 10 milisekund. Průměrná latence zápisu na 50. percentilu je obvykle 5 milisekund nebo méně. Účty Azure Cosmos, které pokrývají několik oblastí a jsou nakonfigurované se silnou konzistencí, jsou výjimkou této záruky.

Latence zápisu a silná konzistence

U účtů Služby Azure Cosmos nakonfigurovaných se silnou konzistencí s více než jednou oblastí se latence zápisu rovná dvounásobné době odezvy (RTT) mezi libovolnou ze dvou nejbližších oblastí a 10 milisekund v 99. percentilu. Vysoká hodnota RTT sítě mezi oblastmi se pro požadavky Cosmos DB přeloží na vyšší latenci, protože silná konzistence dokončí operaci až po zajištění toho, aby byla potvrzena do všech oblastí v rámci účtu.

Přesná latence RTT je funkce rychlosti světla a síťové topologie Azure. Sítě Azure neposkytují žádné smlouvy SLA latence pro rtT mezi dvěma oblastmi Azure, ale publikuje statistiku latence odezvy sítě Azure. U vašeho účtu Azure Cosmos se na webu Azure Portal zobrazují latence replikace. Pomocí webu Azure Portal (přejděte do okna Metriky, vyberte kartu Konzistence) můžete monitorovat latence replikace mezi různými oblastmi přidruženými k vašemu účtu Azure Cosmos.

Důležité

Silná konzistence pro účty s oblastmi, které mají více než 5 000 mil (8000 kilometrů), je ve výchozím nastavení blokováno kvůli vysoké latenci zápisu. Pokud chcete tuto funkci povolit, obraťte se na podporu.

Úrovně konzistence a propustnost

  • Pro silnou a ohraničenou nestarost se čtení provádí proti dvěma replikám ve čtyřech replikách (kvorum menšiny), aby se zajistily záruky konzistence. Relace, konzistentní předpona a případná čtení jedné repliky Výsledkem je, že pro stejný počet jednotek požadavků je propustnost čtení pro silnou a ohraničenou nestarost polovinu ostatních úrovní konzistence.

  • Pro daný typ operace zápisu, jako je vložení, nahrazení, upsert a odstranění, je propustnost zápisu pro jednotky žádostí stejná pro všechny úrovně konzistence. Pro silnou konzistenci je potřeba změny potvrdit 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 4 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í ru/s pro čtení místních menšin jsou dvakrát nižší úrovně konzistence, protože čtení jsou vyrobeny ze dvou replik, aby poskytovaly záruky konzistence pro silnou a ohraničenou nestarost.

Úrovně konzistence a stálost dat

V globálně distribuovaném databázovém prostředí existuje přímý vztah mezi úrovní konzistence a stálostí dat v případě výpadku celého regionu. Při vývoji plánu provozní kontinuity potřebujete porozumět maximálnímu období nedávných aktualizací dat, které aplikace může tolerovat ztrátu při obnovení po rušivé události. Časové období aktualizací, které si můžete dovolit ztratit, se označuje jako cíl bodu obnovení (RPO).

Následující tabulka definuje vztah mezi modelem konzistence a stálostí dat v případě výpadku široké oblasti.

Oblasti 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. aktualizací) položky.

T = Časový interval "T" od poslední aktualizace.

Pro účet jedné oblasti je minimální hodnota K a T 10 operací zápisu nebo 5 sekund. U účtů s více oblastmi je minimální hodnota K a T 100 000 operací zápisu nebo 300 sekund. Tím se definuje minimální cíl bodu obnovení pro data při použití omezené nestarosti.

Silná konzistence a více oblastí zápisu

Účty Cosmos nakonfigurované s více oblastmi zápisu nelze nakonfigurovat pro silnou konzistenci, protože distribuovaný systém nemůže poskytovat cíl bodu obnovení nuly a rtO nuly. Kromě toho neexistují žádné výhody latence zápisu při použití 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 zápisu.

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 ve službě Azure Cosmos DB najdete v následujících článcích: