Úrovně konzistence Apache Cassandra a Azure Cosmos DB for Apache Cassandra

PLATÍ PRO: Cassandra

Na rozdíl od Azure Cosmos DB neposkytuje Apache Cassandra nativně přesně definované záruky konzistence. Místo toho poskytuje Apache Cassandra úroveň konzistence zápisu a úroveň konzistence čtení, která umožňuje kompromisy mezi vysokou dostupností, konzistencí a latencí. Při použití služby Azure Cosmos DB for Cassandra:

  • Úroveň konzistence zápisu Apache Cassandra je namapovaná na výchozí úroveň konzistence nakonfigurovanou ve vašem účtu služby Azure Cosmos DB. Konzistenci pro operaci zápisu (CL) není možné změnit u jednotlivých požadavků.
  • Azure Cosmos DB bude dynamicky mapovat úroveň konzistence čtení určenou klientským ovladačem Cassandra. Úroveň konzistence se namapuje na jednu z úrovní konzistence služby Azure Cosmos DB nakonfigurovaných dynamicky v požadavku na čtení.

Zápisy do více oblastí vs. zápisy do jedné oblasti

Databáze Apache Cassandra je ve výchozím nastavení multi-master systém a neposkytuje možnost předefinovaná pro zápisy do jedné oblasti s replikací do více oblastí pro čtení. Azure Cosmos DB ale nabízí možnost konfigurace zápisu do jedné oblasti nebo do více oblastí . Jednou z výhod možnosti volby konfigurace zápisu do jedné oblasti napříč několika oblastmi je zabránění konfliktům mezi oblastmi a možnost zachování silné konzistence napříč několika oblastmi.

Díky zápisům do jedné oblasti můžete zachovat silnou konzistenci a současně zachovat úroveň vysoké dostupnosti napříč oblastmi pomocí převzetí služeb při selhání spravovaného službou. V této konfiguraci můžete stále využívat umístění dat ke snížení latence čtení downgradem na konečnou konzistenci na základě jednotlivých požadavků. Kromě těchto možností nabízí platforma Azure Cosmos DB také možnost zónové redundance při výběru oblasti. Na rozdíl od nativního Apache Cassandry tak azure Cosmos DB umožňuje navigovat ve spektru kompromisů CAP teorémů s větší členitostí.

Mapování úrovní konzistence

Platforma Azure Cosmos DB poskytuje sadu pěti jasně definovaných nastavení konzistence s ohledem na replikaci, která se zaměřuje na obchodní případ. Kompromisy z těchto nastavení konzistence jsou definovány cap a PACLC teorémy. Vzhledem k tomu, že se tento přístup výrazně liší od Apache Cassandry, doporučujeme, abyste si prostudovali a porozuměli konzistenci služby Azure Cosmos DB. Případně si můžete projít toto krátké videonávodce, které vám pomůže porozumět nastavení konzistence na platformě Azure Cosmos DB. Následující tabulka ukazuje možné mapování mezi úrovněmi konzistence Apache Cassandra a Azure Cosmos DB při použití rozhraní API pro Cassandra. Tato tabulka ukazuje konfigurace pro jednu oblast, čtení ve více oblastech s zápisy do jedné oblasti a zápisy do více oblastí.

Mapování

Poznámka

Nejedná se o přesná mapování. Místo toho jsme poskytli nejbližší analogy k Apache Cassandře a rozpoznali jsme všechny kvalitativní rozdíly ve sloupci nejvíce vpravo. Jak je uvedeno výše, doporučujeme zkontrolovat nastavení konzistence služby Azure Cosmos DB.

ALL, , EACH_QUOROMQUOROM, LOCAL_QUORUMnebo THREE konzistence zápisu v Apache Cassandře

Konzistence apache pro čtení Čtení z Nejbližší úroveň konzistence služby Azure Cosmos DB k nastavení čtení a zápisu v Apache Cassandře
ALL Místní oblast Strong
EACH_QUOROM Místní oblast Strong
QUOROM Místní oblast Strong
LOCAL_QUORUM Místní oblast Strong
LOCAL_ONE Místní oblast Eventual
ONE Místní oblast Eventual
TWO Místní oblast Strong
THREE Místní oblast Strong

Na rozdíl od Apache a DSE Cassandra azure Cosmos DB ve výchozím nastavení trvale potvrdí zápis kvora. Nejméně tři ze čtyř (3/4) uzlů zapisují zápis na disk, a NE jenom protokol potvrzení v paměti.

ONE, LOCAL_ONEnebo ANY konzistence zápisu v Apache Cassandře

Konzistence apache pro čtení Čtení z Nejbližší úroveň konzistence služby Azure Cosmos DB k nastavení čtení a zápisu v Apache Cassandře
ALL Místní oblast Strong
EACH_QUOROM Místní oblast Eventual
QUOROM Místní oblast Eventual
LOCAL_QUORUM Místní oblast Eventual
LOCAL_ONE Místní oblast Eventual
ONE Místní oblast Eventual
TWO Místní oblast Eventual
THREE Místní oblast Eventual

Rozhraní API služby Azure Cosmos DB pro Cassandra vždy trvale potvrdí zápis kvora ve výchozím nastavení, proto je možné využít všechny konzistence pro čtení.

TWO konzistence zápisu v Apache Cassandře

Konzistence apache pro čtení Čtení z Nejbližší úroveň konzistence služby Azure Cosmos DB k nastavení čtení a zápisu v Apache Cassandře
ALL Místní oblast Strong
EACH_QUOROM Místní oblast Strong
QUOROM Místní oblast Strong
LOCAL_QUORUM Místní oblast Strong
LOCAL_ONE Místní oblast Eventual
ONE Místní oblast Eventual
TWO Místní oblast Eventual
THREE Místní oblast Strong

Azure Cosmos DB nemá žádnou představu o konzistenci zápisu pouze do dvou uzlů, proto tuto konzistenci ve většině případů považujeme za podobnou kvoru. Pro konzistenci TWOčtení je tato konzistence ekvivalentní zápisu QUOROM a čtení z ONE.

Serial, nebo Local_Serial zápis konzistence v Apache Cassandře

Konzistence apache pro čtení Čtení z Nejbližší úroveň konzistence služby Azure Cosmos DB k nastavení čtení a zápisu v Apache Cassandře
ALL Místní oblast Strong
EACH_QUOROM Místní oblast Strong
QUOROM Místní oblast Strong
LOCAL_QUORUM Místní oblast Strong
LOCAL_ONE Místní oblast Eventual
ONE Místní oblast Eventual
TWO Místní oblast Strong
THREE Místní oblast Strong

Sériové se vztahuje pouze na zjednodušené transakce. Azure Cosmos DB se ve výchozím nastavení řídí trvale potvrzeným algoritmem , a proto Serial se konzistence podobá kvoru.

Jiné oblasti pro zápis do jedné oblasti

Azure Cosmos DB umožňuje pět nastavení konzistence, včetně silné, napříč několika oblastmi, ve kterých je nakonfigurované zápisy do jedné oblasti. K tomuto usnadnění dochází, pokud jsou oblasti od sebe vzdálené 2 000 mil.

Azure Cosmos DB nemá platné mapování na Apache Cassandra, protože všechny uzly/oblasti jsou zápisy a není možné zajistit silnou konzistenci napříč všemi oblastmi.

Jiné oblasti pro zápis do více oblastí

Azure Cosmos DB umožňuje pouze čtyři nastavení konzistence. eventual, consistent prefix, sessiona bounded staleness napříč několika oblastmi, kde je nakonfigurovaný zápis do více oblastí.

Apache Cassandra by poskytoval pouze konečnou konzistenci pro čtení v jiných oblastech bez ohledu na nastavení.

Podporovaná dynamická přepsání

Nastavení účtu služby Azure Cosmos DB Hodnota přepsání v požadavku klienta Efekt přepsání
Strong All Žádný účinek (zůstat jako strong)
Strong Quorum Žádný účinek (zůstat jako strong)
Strong LocalQuorum Žádný účinek (zůstat jako strong)
Strong Two Žádný účinek (zůstat jako strong)
Strong Three Žádný účinek (zůstat jako strong)
Strong Serial Žádný účinek (zůstat jako strong)
Strong LocalSerial Žádný účinek (zůstat jako strong)
Strong One Změny konzistence na Eventual
Strong LocalOne Změny konzistence na Eventual
Strong Any Nepovoleno (chyba)
Strong EachQuorum Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix All Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix Quorum Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix LocalQuorum Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix Two Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix Three Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix Serial Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix LocalSerial Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix One Změny konzistence na Eventual
Bounded staleness, sessionnebo consistent prefix LocalOne Změny konzistence na Eventual
Bounded staleness, sessionnebo consistent prefix Any Nepovoleno (chyba)
Bounded staleness, sessionnebo consistent prefix EachQuorum Nepovoleno (chyba)

Metriky

Pokud je váš účet služby Azure Cosmos DB nakonfigurovaný s jinou úrovní konzistence, než je silná konzistence, projděte si metriku PbS (Probabilisticky Bounded Nestarost). Metrika zachycuje pravděpodobnost, že vaši klienti můžou získat silné a konzistentní čtení pro vaše úlohy. Tato metrika je vystavená v Azure Portal. Další informace o metrikě PBS najdete v tématu Monitorování probabilisticky ohraničené nestaralosti (PBS).

Probabilisticky ohraničená neschvátnost ukazuje, jak konečná je vaše konečná konzistence. Tato metrika poskytuje přehled o tom, jak často můžete získat silnější konzistenci, než je úroveň konzistence, kterou jste aktuálně nakonfigurovali pro svůj účet služby Azure Cosmos DB. Jinými slovy můžete vidět pravděpodobnost (měřenou v milisekundách) získání konzistentního čtení pro kombinaci oblastí zápisu a čtení.

Globální silná konzistence pro požadavky na zápis v Apache Cassandra

Apache Cassandra, nastavení EACH_QUORUM nebo QUORUM poskytuje silnou konzistenci. Při odeslání žádosti o zápis do oblasti EACH_QUORUM se data uchovávají v počtu uzlů kvora v každém datacentru. Tato trvalost vyžaduje, aby každé datové centrum bylo k dispozici pro úspěšnou operaci zápisu. QUORUM je o něco méně omezující a před potvrzením QUORUM úspěšného zápisu je několik uzlů ve všech datových centrech potřebných k uchování dat.

Následující obrázek znázorňuje globální nastavení silné konzistence v Apache Cassandře mezi dvěma oblastmi 1 a 2. Po zápisu dat do oblasti 1 je nutné zápis zachovat v počtu uzlů kvora v oblasti 1 i oblasti 2, aby aplikace přijala potvrzení.

Diagram globální konzistence zápisu v Apache Cassandře

Globální silná konzistence požadavků na zápis ve službě Azure Cosmos DB pro Apache Cassandra

Ve službě Azure Cosmos DB je konzistence nastavená na úrovni účtu. S Strong konzistencí ve službě Azure Cosmos DB pro Cassandra se data replikují synchronně do oblastí čtení účtu. Čím dál jsou od sebe oblasti účtu služby Azure Cosmos DB, tím vyšší je latence konzistentních operací zápisu.

Diagram globální konzistence zápisu ve službě Azure Cosmos DB pro Apache Cassandra

Jak počet oblastí ovlivňuje vaši žádost o čtení nebo zápis:

  • Dvě oblasti: Se silnou konzistencí, kvorum (N/2 + 1) = 2. Pokud tedy oblast čtení přestane fungovat, účet už nebude moct přijímat zápisy se silnou konzistencí, protože počet oblastí kvora není k dispozici pro replikaci zápisu.
  • Tři nebo více oblastí: pro N = 3. quorum = 2 Pokud je jedna z oblastí čtení mimo provoz, může oblast zápisu stále replikovat zápisy do celkem dvou oblastí, které splňují požadavek kvora. Podobně se čtyřmi oblastmi . quorum = 4/2 + 1 = 3 I když je jedna oblast čtení mimo provoz, může být splněno kvorum.

Poznámka

Pokud se pro všechny operace zápisu vyžaduje globálně silná konzistence, musí být konzistence pro účet Azure Cosmos DB for Cassandra nastavená na Silná. Úroveň konzistence pro operace zápisu nelze přepsat na nižší úroveň konzistence na základě požadavků ve službě Azure Cosmos DB.

Slabší konzistence pro požadavky na zápis v Apache Cassandře

Úroveň konzistence , ANYONE, TWO, THREE, LOCAL_QUORUMSerial nebo Local_Serial? Zvažte žádost o zápis s LOCAL_QUORUM an of 4RF v datacentru se šesti uzly. Quorum = 4/2 + 1 = 3.

Diagram ne globální konzistence zápisu v Apache Cassandře

Slabší konzistence pro požadavky na zápis ve službě Azure Cosmos DB pro Apache Cassandra

Když se odešle žádost o zápis s některou z úrovní konzistence nižší než Strong, vrátí se úspěšná odpověď, jakmile místní oblast zachová zápis alespoň ve třech ze čtyř replik.

Diagram ne globální konzistence zápisu ve službě Azure Cosmos DB pro Apache Cassandra

Globální silná konzistence pro požadavky na čtení v Apache Cassandra

S konzistencí EACH_QUORUMje možné v Apache Cassandře dosáhnout konzistentního čtení. V případě, že se EACH_QUORUM počet uzlů kvora v každé oblasti nesplní, bude čtení neúspěšné.

Diagram globální konzistence čtení v Apache Cassandře

Globální silná konzistence pro žádosti o čtení ve službě Azure Cosmos DB pro Apache Cassandra

Žádost o čtení se obsluhuje ze dvou replik v zadané oblasti. Vzhledem k tomu, že zápis už se postaral o zachování do počtu oblastí kvora (a všech oblastí, pokud byly k dispozici všechny oblasti), pouhé čtení ze dvou replik v zadané oblasti poskytuje silnou konzistenci. Tato silná konzistence musí EACH_QUORUM být zadána v ovladači při vydávání čtení proti oblasti pro účet Cosmos DB spolu se silnou konzistencí jako výchozí úrovní konzistence pro účet.

Diagram globální konzistence čtení ve službě Azure Cosmos DB pro Apache Cassandra

Místní silná konzistence v Apache Cassandře

Požadavek na čtení s úrovní TWOkonzistence , THREEnebo LOCAL_QUORUM nám poskytne silnou konzistenci čtení z místní oblasti. S úrovní LOCAL_QUORUMkonzistence potřebujete odpověď ze dvou uzlů v zadaném datacentru pro úspěšné čtení.

Diagram konzistence místního silného čtení v Apache Cassandře

Místní silná konzistence ve službě Azure Cosmos DB pro Apache Cassandra

Ve službě Azure Cosmos DB for Cassandra má úroveň TWOkonzistence , THREE nebo LOCAL_QUORUM zajistí místní silnou konzistenci pro požadavek na čtení. Vzhledem k tomu, že cesta zápisu zaručuje replikaci minimálně na tři ze čtyř replik, čtení ze dvou replik v zadané oblasti zajistí čtení dat v dané oblasti kvorem.

Diagram konzistence místního silného čtení ve službě Azure Cosmos DB pro Apache Cassandra

Konečná konzistence v Apache Cassandře

Úroveň konzistence LOCAL_ONEa OneANY with LOCAL_ONE bude mít za následek konečnou konzistenci. Tato konzistence se používá v případech, kdy se zaměřujeme na latenci.

Diagram konečné konzistence čtení v Apache Cassandře

Konečná konzistence ve službě Azure Cosmos DB pro Apache Cassandra?

Úroveň LOCAL_ONEkonzistence , ONE nebo Any vám poskytne konečnou konzistenci. Při konečné konzistenci se čtení obsluhuje jenom z jedné repliky v zadané oblasti.

Diagram konečné konzistence čtení ve službě Azure Cosmos DB pro Apache Cassandra

Přepsání úrovně konzistence pro operace čtení ve službě Azure Cosmos DB for Cassandra

Dříve bylo možné úroveň konzistence pro žádosti o čtení přepsat pouze na nižší konzistenci, než je výchozí nastavení pro účet. Například s výchozí konzistencí silné můžou být požadavky na čtení ve výchozím nastavení vystaveny se silnou hodnotou a přepsány na základě jednotlivých požadavků (v případě potřeby) na úroveň konzistence slabší než Silná. Žádosti o čtení se ale nedaly vydat s přepsanou úrovní konzistence vyšší, než je výchozí nastavení účtu. Účet s konzistencí typu Eventual nemohl přijímat žádosti o čtení s vyšší úrovní konzistence než Eventual (což se v ovladačích Apache Cassandra překládá na TWO, LOCAL_QUORUMTHREEnebo QUORUM).

Azure Cosmos DB for Cassandra teď usnadňuje přepsání konzistence požadavků na čtení na hodnotu vyšší, než je výchozí konzistence účtu. Například s výchozí konzistencí pro účet Cosmos DB nastavenou na Hodnotu Eventual (ekvivalent Apache Cassandra pro One nebo ANY) je možné žádosti o čtení přepsat na základě jednotlivých požadavků na LOCAL_QUORUM. Toto přepsání zajišťuje, že se před vrácením sady výsledků dotazu podle požadavků LOCAL_QUORUMbude dotazovat počet replik kvora v rámci zadané oblasti.

Tato možnost také zabrání nastavení výchozí konzistence, která je vyšší než Eventual, pokud je potřeba pouze pro žádosti o čtení.

Další kroky

Další informace o globální distribuci a úrovních konzistence pro službu Azure Cosmos DB: