Ú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_QUOROM
QUOROM
, LOCAL_QUORUM
nebo 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_ONE
nebo 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 TWO
ekvivalentní zápisu a QUOROM
čtení z ONE
.
Serial
nebo 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
, session
a 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ží.
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.
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ň ANY
konzistence , , ONE
THREE
TWO
, , LOCAL_QUORUM
nebo ? Serial
Local_Serial
Zvažte žádost o zápis s LOCAL_QUORUM
datovou 4
RF
sadou se šesti uzly. Quorum = 4/2 + 1 = 3
.
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.
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é.
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.
Místní silná konzistence v Apache Cassandře
Požadavek na čtení s úrovní TWO
konzistence , THREE
nebo LOCAL_QUORUM
nám poskytne silné čtení konzistence z místní oblasti. S úrovní LOCAL_QUORUM
konzistence potřebujete odpověď ze dvou uzlů v zadaném datacentru pro úspěšné čtení.
Místní silná konzistence ve službě Azure Cosmos DB pro Apache Cassandra
Ve službě Azure Cosmos DB for Cassandra má úroveň TWO
THREE
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.
Konečná konzistence v Apache Cassandře
Úroveň LOCAL_ONE
One
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.
Konečná konzistence ve službě Azure Cosmos DB pro Apache Cassandra?
Úroveň LOCAL_ONE
konzistence 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.
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
, THREE
LOCAL_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_QUORUM
poradit 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í.