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

PLATÍ PRO: Cassandra

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

  • Úroveň konzistence zápisu Apache Cassandra se mapuje na výchozí úroveň konzistence nakonfigurovanou pro váš účet služby Azure Cosmos DB. Konzistence operace zápisu (CL) se nedá změnit na základě jednotlivých požadavků.
  • Azure Cosmos DB bude dynamicky mapovat úroveň konzistence čtení určenou klientským ovladačem Cassandra. Úroveň konzistence se mapuje 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 pro zápisy do jedné oblasti s replikací pro čtení do více oblastí. Azure Cosmos DB ale poskytuje možnost na klíč mít buď jednu oblast, nebo konfiguraci zápisu do více oblastí . Jednou z výhod možnosti zvolit konfiguraci 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.

Při zápisech do jedné oblasti můžete zachovat silnou konzistenci a současně zachovat úroveň vysoké dostupnosti napříč oblastmi s převzetím služeb při selhání spravovaném službou. V této konfiguraci můžete stále zneužít umístění dat, abyste snížili latenci čtení tak, že downgradujete 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 redundance zón při výběru oblasti. Na rozdíl od nativní apache Cassandry vám azure Cosmos DB umožňuje procházet spektrum CAP Theorem s větší členitostí.

Mapování úrovní konzistence

Platforma Azure Cosmos DB poskytuje sadu pěti dobře definovaných nastavení konzistence orientovaných na obchodní použití s ohledem na replikaci. Kompromisy 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 Cassandra, doporučujeme, abyste si prostudovali a porozuměli konzistenci služby Azure Cosmos DB. Případně si můžete projít tohoto krátkého videokudružce, abyste porozuměli 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 Cassandru. Tato tabulka ukazuje konfigurace pro jednu oblast, čtení s více oblastmi s zápisy do jedné oblasti a zápisy do více oblastí.

Mapování

Poznámka:

Nejedná se o přesná mapování. Spíše jsme poskytli nejbližší analogy Apache Cassandra a nejednoznačných kvalitativních rozdílů ve sloupci úplně vpravo. Jak už jsme zmínili výše, doporučujeme zkontrolovat nastavení konzistence služby Azure Cosmos DB.

ALL, , EACH_QUOROMQUOROM, LOCAL_QUORUMnebo THREE konzistence zápisu v Apache Cassandra

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 služba Azure Cosmos DB ve výchozím nastavení potvrdí zápis kvora. Alespoň tři ze čtyř (3/4) uzlů potvrdí 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 Cassandru vždy trvale potvrdí zápis kvora ve výchozím nastavení, a proto je možné využít všechny konzistence č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 pro dva uzly, proto tuto konzistenci považujeme ve většině případů za podobnou kvorum. Pro konzistenci čtení je tato konzistence TWOekvivalentní zápisu a QUOROM čtení z ONE.

Serialnebo Local_Serial konzistenci 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

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 je konzistence podobná kvoru.

Další oblasti pro zápis do jedné oblasti

Azure Cosmos DB usnadňuje pět nastavení konzistence, včetně silné, napříč několika oblastmi, kde se konfigurují zápisy do jedné oblasti. K tomuto usnadnění dochází, pokud jsou oblasti v okruhu 2 000 mil od sebe.

Azure Cosmos DB nemá platné mapování na Apache Cassandra, protože všechny uzly a oblasti jsou zápisy a ve všech oblastech není možné zajistit silnou konzistenci.

Další oblasti pro zápis do více oblastí

Azure Cosmos DB usnadň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 poskytovala konečnou konzistenci jen 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 Přepsání efektu
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 v Eventual
Strong LocalOne Změny konzistence v Eventual
Strong Any Nepovoleno (chyba)
Strong EachQuorum Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix All Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix Quorum Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix LocalQuorum Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix Two Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix Three Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix Serial Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix LocalSerial Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix One Změny konzistence v Eventual
Bounded staleness, session nebo consistent prefix LocalOne Změny konzistence v Eventual
Bounded staleness, session nebo consistent prefix Any Nepovoleno (chyba)
Bounded staleness, session nebo consistent prefix EachQuorum Nepovoleno (chyba)

Metriky

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

Probabilisticky ohraničená neaučnost 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 služby Azure Cosmos DB. Jinými slovy, můžete vidět pravděpodobnost (měřenou v milisekundách) získání konzistentních čtení pro kombinaci oblastí zápisu a čtení.

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

Apache Cassandra, nastavení EACH_QUORUM nebo QUORUM dává silnou konzistenci. Když se žádost o zápis odešle do oblasti, EACH_QUORUM zachovají se data v počtu uzlů kvora v každém datovém centru. Tato trvalost vyžaduje, aby každé datové centrum bylo k dispozici pro úspěšnou operaci zápisu. QUORUM je mírně méně omezující, s QUORUM řadou uzlů ve všech datových centrech potřebných k uchování dat před potvrzením úspěšného zápisu.

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 musí být zápis trvalý v počtu uzlů kvora v obou oblastech 1 a oblasti 2 před potvrzením, které aplikace obdrží.

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

Globální silná konzistence pro žádosti o 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 for Cassandra se data replikují synchronně do oblastí čtení účtu. Čím dál od sebe jsou oblasti pro účet 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

Vliv počtu oblastí na váš požadavek na čtení nebo zápis:

  • Dvě oblasti: Se silnou konzistencí, kvorem (N/2 + 1) = 2. Takže pokud oblast čtení přestane fungovat, účet už nemůže přijímat zápisy se silnou konzistencí, protože počet oblastí kvora není k dispozici pro replikaci zápisu do.
  • Tři nebo více oblastí: pro N = 3, quorum = 2. Pokud je některá z oblastí čtení nižší, může oblast zápisu replikovat zápisy do celkem dvou oblastí, které splňují požadavek kvora. Podobně, se čtyřmi oblastmi, quorum = 4/2 + 1 = 3. I v případě výpadku jedné oblasti čtení je možné splnit 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 Hodnotu Strong. Úroveň konzistence operací zápisu nelze přepsat na nižší úroveň konzistence na základě jednotlivých požadavků ve službě Azure Cosmos DB.

Slabší konzistence pro žádosti o zápis v Apache Cassandře

Úroveň ANYkonzistence , , ONETHREETWO, , LOCAL_QUORUMnebo ? Serial Local_Serial Zvažte žádost o zápis s LOCAL_QUORUM datovou 4 RF sadou se šesti uzly. Quorum = 4/2 + 1 = 3.

Diagram nekonzistentní konzistence zápisu v Apache Cassandře

Slabší konzistence pro žádosti o zápis ve službě Azure Cosmos DB pro Apache Cassandra

Když se odešle požadavek na zápis s některou z úrovní konzistence nižší než Strong, vrátí se odpověď na úspěch, jakmile místní oblast zachová zápis nejméně ve třech ze čtyř replik.

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

Globální silná konzistence pro žádosti o čtení v Apache Cassandra

S konzistencí lze v Apache Cassandře dosáhnout konzistentního EACH_QUORUMčtení. Nastavení více oblastí pro EACH_QUORUM to, jestli není v každé oblasti splněn počet uzlů kvora, bude čtení neúspěšné.

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

Globální silná konzistence pro požadavky na čtení ve službě Azure Cosmos DB pro Apache Cassandra

Požadavek na čtení se obsluhuje ze dvou replik v zadané oblasti. Vzhledem k tomu, že se zápis už postaral o zachování počtu oblastí kvora (a všech oblastí, pokud jsou k dispozici všechny oblasti), stačí jednoduše číst ze dvou replik v zadané oblasti 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í úroveň konzistence pro daný úč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 silné čtení konzistence z místní oblasti. S úrovní LOCAL_QUORUMkonzistence potřebujete odpověď ze dvou uzlů v zadaném datacentru pro úspěšné čtení.

Diagram místní silné konzistence č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ň TWOTHREE konzistence nebo LOCAL_QUORUM poskytne místní silnou konzistenci požadavku na čtení. Vzhledem k tomu, že cesta zápisu zaručuje replikaci na minimálně tři ze čtyř replik, čtení ze dvou replik v zadané oblasti zaručuje čtení dat v této oblasti kvorum.

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

Konečná konzistence v Apache Cassandře

Úroveň LOCAL_ONEOne konzistence a ANY with LOCAL_ONE bude mít za následek konečnou konzistenci. Tato konzistence se používá v případech, kdy je fokus na latenci.

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

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

Úroveň LOCAL_ONEkonzistence nebo ONE Any vám poskytne konečnou konzistenci. V případě konečné konzistence se čtení obsluhuje jenom z jedné z replik v zadané oblasti.

Diagram konzistence konečného č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é přepsat úroveň konzistence pro požadavky na čtení pouze na nižší konzistenci, než je výchozí nastavená pro účet. Například s výchozí konzistencí strong může být požadavky na čtení vydány se silnou ve výchozím nastavení a přepsány na základě jednotlivých požadavků (v případě potřeby) na úroveň konzistence slabší než Strong. Žádosti o čtení ale nešlo vystavit s přepsanou úrovní konzistence vyšší než výchozí nastavení účtu. Účet s konečnou konzistencí nemohl přijímat žádosti o čtení s vyšší úrovní konzistence než Případný (který se v ovladačích Apache Cassandra překládá na TWO, THREELOCAL_QUORUM nebo QUORUM).

Azure Cosmos DB for Cassandra teď usnadňuje přepsání konzistence požadavků na čtení na hodnotu vyšší než výchozí konzistence účtu. Například s výchozí konzistencí účtu Cosmos DB nastaveným na případný (ekvivalent One Apache Cassandra nebo ANY) je možné požadavky na čtení přepsat na každý požadavek na LOCAL_QUORUM. Toto přepsání zajišťuje, že se před vrácením sady výsledků podle potřeby LOCAL_QUORUMporadit s počtem replik kvora v zadané oblasti.

Tato možnost také zabraňuje tomu, aby bylo nutné nastavit výchozí konzistenci, která je vyšší než Eventual, pokud je potřebná pouze pro žádosti o čtení.