Ú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_QUOROM
QUOROM
, LOCAL_QUORUM
nebo 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_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 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
, session
a 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 , 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 na Eventual |
Bounded staleness , session nebo consistent prefix |
LocalOne |
Změny konzistence na 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ž 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í.
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.
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 , ANY
ONE
, TWO
, THREE
, LOCAL_QUORUM
Serial
nebo Local_Serial
? Zvažte žádost o zápis s LOCAL_QUORUM
an of 4
RF
v datacentru se šesti uzly. Quorum = 4/2 + 1 = 3
.
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.
Globální silná konzistence pro požadavky na čtení v Apache Cassandra
S konzistencí EACH_QUORUM
je 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é.
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.
Místní silná konzistence v Apache Cassandře
Požadavek na čtení s úrovní TWO
konzistence , THREE
nebo LOCAL_QUORUM
nám poskytne silnou konzistenci čtení 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
konzistence , 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.
Konečná konzistence v Apache Cassandře
Úroveň konzistence LOCAL_ONE
a One
ANY 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.
Konečná konzistence ve službě Azure Cosmos DB pro Apache Cassandra?
Úroveň LOCAL_ONE
konzistence , ONE
nebo Any
vám poskytne konečnou konzistenci. Při konečné konzistenci se čtení obsluhuje jenom z jedné repliky v zadané oblasti.
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_QUORUM
THREE
nebo 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_QUORUM
bude 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: