Konsekvensnivåer för Apache Cassandra och Azure Cosmos DB för Apache Cassandra

GÄLLER FÖR: Kassandra

Till skillnad från Azure Cosmos DB ger Apache Cassandra inte exakt definierade konsekvensgarantier. I stället tillhandahåller Apache Cassandra en skrivkonsekvensnivå och en läskonsekvensnivå för att möjliggöra kompromisser med hög tillgänglighet, konsekvens och svarstid. När du använder Azure Cosmos DB för Cassandra:

  • Skrivkonsekvensnivån för Apache Cassandra mappas till standardkonsekvensnivån som konfigurerats för ditt Azure Cosmos DB-konto. Konsekvens för en skrivåtgärd (CL) kan inte ändras per begäran.
  • Azure Cosmos DB mappar dynamiskt den läskonsekvensnivå som anges av Cassandra-klientdrivrutinen. Konsekvensnivån mappas till en av azure Cosmos DB-konsekvensnivåerna som konfigureras dynamiskt på en läsbegäran.

Skrivningar mellan flera regioner och skrivningar i en region

Apache Cassandra-databasen är ett system med flera huvudservrar som standard och tillhandahåller inte något out-of-box-alternativ för skrivningar i en region med replikering i flera regioner för läsningar. Azure Cosmos DB ger dock nyckelfärdig möjlighet att ha skrivkonfigurationer för en region eller flera regioner . En av fördelarna med att kunna välja en enda regions skrivkonfiguration i flera regioner är att undvika konfliktscenarier mellan regioner och alternativet att upprätthålla stark konsekvens i flera regioner.

Med skrivningar med en region kan du upprätthålla stark konsekvens, samtidigt som du behåller en hög tillgänglighetsnivå mellan regioner med tjänsthanterad redundans. I den här konfigurationen kan du fortfarande utnyttja datalokaliteten för att minska läsfördröjningen genom att nedgradera till slutlig konsekvens per begäran. Utöver dessa funktioner erbjuder Azure Cosmos DB-plattformen även alternativet zonredundans när du väljer en region. Till skillnad från inbyggda Apache Cassandra kan du med Azure Cosmos DB navigera i CAP Theorem-kompromissspektrumet med mer kornighet.

Mappning av konsekvensnivåer

Azure Cosmos DB-plattformen innehåller en uppsättning med fem väldefinierade, verksamhetsspecifika konsekvensinställningar för replikering. Kompromisserna med dessa konsekvensinställningar definieras av CAP- och PACLC-satserna. Eftersom den här metoden skiljer sig avsevärt från Apache Cassandra rekommenderar vi att du tar dig tid att granska och förstå Azure Cosmos DB-konsekvens. Du kan också läsa den här korta videoguiden för att förstå konsekvensinställningar på Azure Cosmos DB-plattformen. I följande tabell visas möjliga mappningar mellan Konsekvensnivåer för Apache Cassandra och Azure Cosmos DB när du använder API för Cassandra. Den här tabellen visar konfigurationer för enskilda regioner, läsningar i flera regioner med skrivningar i en region och skrivningar i flera regioner.

Mappningar

Kommentar

Det här är inte exakta mappningar. I stället har vi angett de närmaste analogerna till Apache Cassandra och tvetydigt alla kvalitativa skillnader i kolumnen längst till höger. Som nämnts ovan rekommenderar vi att du granskar Konsekvensinställningar för Azure Cosmos DB.

ALL, EACH_QUOROM, QUOROM, LOCAL_QUORUM, eller THREE skrivkonsekvens i Apache Cassandra

Apache-läskonsekvens Läsa från Närmaste Azure Cosmos DB-konsekvensnivå till Apache Cassandra-läs-/skrivinställningar
ALL Lokal region Strong
EACH_QUOROM Lokal region Strong
QUOROM Lokal region Strong
LOCAL_QUORUM Lokal region Strong
LOCAL_ONE Lokal region Eventual
ONE Lokal region Eventual
TWO Lokal region Strong
THREE Lokal region Strong

Till skillnad från Apache och DSE Cassandra genomför Azure Cosmos DB som standard kvorumskrivning. Minst tre av fyra (3/4) noder checkar in skrivningen till disken och INTE bara en incheckningslogg i minnet.

ONE, LOCAL_ONE, eller ANY skriva konsekvens i Apache Cassandra

Apache-läskonsekvens Läsa från Närmaste Azure Cosmos DB-konsekvensnivå till Apache Cassandra-läs-/skrivinställningar
ALL Lokal region Strong
EACH_QUOROM Lokal region Eventual
QUOROM Lokal region Eventual
LOCAL_QUORUM Lokal region Eventual
LOCAL_ONE Lokal region Eventual
ONE Lokal region Eventual
TWO Lokal region Eventual
THREE Lokal region Eventual

Azure Cosmos DB API för Cassandra genomför alltid kvorumskrivning som standard. Därför kan alla lässamenden användas.

TWO skrivkonsekvens i Apache Cassandra

Apache-läskonsekvens Läsa från Närmaste Azure Cosmos DB-konsekvensnivå till Apache Cassandra-läs-/skrivinställningar
ALL Lokal region Strong
EACH_QUOROM Lokal region Strong
QUOROM Lokal region Strong
LOCAL_QUORUM Lokal region Strong
LOCAL_ONE Lokal region Eventual
ONE Lokal region Eventual
TWO Lokal region Eventual
THREE Lokal region Strong

Azure Cosmos DB har ingen uppfattning om skrivkonsekvens till endast två noder, därför behandlar vi den här konsekvensen som liknar kvorum i de flesta fall. För läskonsekvens TWOmotsvarar den här konsekvensen att skriva med QUOROM och läsa från ONE.

Serial, eller Local_Serial skriva konsekvens i Apache Cassandra

Apache-läskonsekvens Läsa från Närmaste Azure Cosmos DB-konsekvensnivå till Apache Cassandra-läs-/skrivinställningar
ALL Lokal region Strong
EACH_QUOROM Lokal region Strong
QUOROM Lokal region Strong
LOCAL_QUORUM Lokal region Strong
LOCAL_ONE Lokal region Eventual
ONE Lokal region Eventual
TWO Lokal region Strong
THREE Lokal region Strong

Seriell gäller endast för enkla transaktioner. Azure Cosmos DB följer en korrekt bekräftad algoritm som standard och därför Serial liknar konsekvens kvorum.

Andra regioner för skrivning i en region

Azure Cosmos DB underlättar fem konsekvensinställningar, inklusive starka, i flera regioner där skrivningar i en region har konfigurerats. Den här underlättande inträffar så länge regioner ligger inom 2000 miles från varandra.

Azure Cosmos DB har ingen tillämplig mappning till Apache Cassandra eftersom alla noder/regioner skrivs och en stark konsekvensgaranti inte är möjlig i alla regioner.

Andra regioner för skrivning i flera regioner

Azure Cosmos DB underlättar endast fyra konsekvensinställningar. eventual, consistent prefix, sessionoch bounded staleness i flera regioner där skrivning i flera regioner har konfigurerats.

Apache Cassandra skulle bara ge slutlig konsekvens för läsningar i andra regioner oavsett inställningar.

Dynamiska åsidosättningar stöds

Kontoinställning för Azure Cosmos DB Åsidosätt värde i klientbegäran Åsidosättningseffekt
Strong All Ingen effekt (förblir som strong)
Strong Quorum Ingen effekt (förblir som strong)
Strong LocalQuorum Ingen effekt (förblir som strong)
Strong Two Ingen effekt (förblir som strong)
Strong Three Ingen effekt (förblir som strong)
Strong Serial Ingen effekt (förblir som strong)
Strong LocalSerial Ingen effekt (förblir som strong)
Strong One Konsekvensändringar i Eventual
Strong LocalOne Konsekvensändringar i Eventual
Strong Any Tillåts inte (fel)
Strong EachQuorum Tillåts inte (fel)
Bounded staleness, session eller consistent prefix All Tillåts inte (fel)
Bounded staleness, session eller consistent prefix Quorum Tillåts inte (fel)
Bounded staleness, session eller consistent prefix LocalQuorum Tillåts inte (fel)
Bounded staleness, session eller consistent prefix Two Tillåts inte (fel)
Bounded staleness, session eller consistent prefix Three Tillåts inte (fel)
Bounded staleness, session eller consistent prefix Serial Tillåts inte (fel)
Bounded staleness, session eller consistent prefix LocalSerial Tillåts inte (fel)
Bounded staleness, session eller consistent prefix One Konsekvensändringar i Eventual
Bounded staleness, session eller consistent prefix LocalOne Konsekvensändringar i Eventual
Bounded staleness, session eller consistent prefix Any Tillåts inte (fel)
Bounded staleness, session eller consistent prefix EachQuorum Tillåts inte (fel)

Mått

Om ditt Azure Cosmos DB-konto har konfigurerats med en annan konsekvensnivå än den starka konsekvensen läser du PBS-måttet (Probabilistically Bounded Staleness). Måttet fångar upp sannolikheten för att dina klienter kan få starka och konsekventa läsningar för dina arbetsbelastningar. Det här måttet exponeras i Azure Portal. Mer information om PBS-måttet finns i Övervaka PBS-mått (Probabilistically Bounded Staleness).

Probabilistically bounded staleness visar hur slutlig är din slutliga konsekvens. Det här måttet ger en inblick i hur ofta du kan få en starkare konsekvens än den konsekvensnivå som du för närvarande har konfigurerat på ditt Azure Cosmos DB-konto. Med andra ord kan du se sannolikheten (mätt i millisekunder) för att få konsekventa läsningar för en kombination av skriv- och läsregioner.

Global stark konsekvens för skrivbegäranden i Apache Cassandra

Apache Cassandra, inställningen för EACH_QUORUM eller QUORUM ger en stark konsekvens. När en skrivbegäran skickas till en region bevaras EACH_QUORUM data i ett kvorumantal noder i varje datacenter. Den här beständigheten kräver att varje datacenter är tillgängligt för att skrivåtgärden ska lyckas. QUORUM är något mindre restriktivt, med ett QUORUM antal noder i alla datacenter som behövs för att bevara data innan skrivningen bekräftas.

Följande bild illustrerar en global stark konsekvensinställning i Apache Cassandra mellan två regioner 1 och 2. När data har skrivits till region 1 måste skrivning bevaras i ett kvorumantal noder i både region 1 och region 2 innan en bekräftelse tas emot av programmet.

Diagram över global skrivkonsekvens i Apache Cassandra.

Global stark konsekvens för skrivbegäranden i Azure Cosmos DB för Apache Cassandra

I Azure Cosmos DB anges konsekvens på kontonivå. Med Strong konsekvens i Azure Cosmos DB för Cassandra replikeras data synkront till läsregionerna för kontot. Desto längre ifrån varandra är regionerna för Azure Cosmos DB-kontot, desto högre svarstid för konsekventa skrivåtgärder.

Diagram över global skrivkonsekvens i Azure Cosmos DB för Apache Cassandra.

Hur antalet regioner påverkar din läs- eller skrivbegäran:

  • Två regioner: Med stark konsekvens, kvorum (N/2 + 1) = 2. Så om läsregionen slutar fungera kan kontot inte längre acceptera skrivningar med stark konsekvens eftersom ett kvorumantal regioner inte är tillgängligt för den skrivning som ska replikeras till.
  • Tre eller fler regioner: för N = 3, quorum = 2. Om en av läsregionerna är nere kan skrivregionen fortfarande replikera skrivningar till totalt två regioner som uppfyller kvorumkravet. På samma sätt, med fyra regioner, quorum = 4/2 + 1 = 3. Även om en läsregion är nere kan kvorum uppfyllas.

Kommentar

Om en globalt stark konsekvens krävs för alla skrivåtgärder måste konsekvensen för Azure Cosmos DB för Cassandra-kontot anges till Stark. Konsekvensnivån för skrivåtgärder kan inte åsidosättas till en lägre konsekvensnivå per begäran i Azure Cosmos DB.

Svagare konsekvens för skrivbegäranden i Apache Cassandra

En konsekvensnivå för ANY, ONE, TWO, THREE, LOCAL_QUORUMSerial eller Local_Serial? Överväg en skrivbegäran med med ett RF av 4 i ett datacenter med LOCAL_QUORUM sex noder. Quorum = 4/2 + 1 = 3.

Diagram över icke-global skrivkonsekvens i Apache Cassandra.

Svagare konsekvens för skrivbegäranden i Azure Cosmos DB för Apache Cassandra

När en skrivbegäran skickas med någon av konsekvensnivåerna som är lägre än Strongreturneras ett lyckat svar så snart den lokala regionen bevarar skrivningen i minst tre av fyra repliker.

Diagram över icke-global skrivkonsekvens i Azure Cosmos DB för Apache Cassandra.

Global stark konsekvens för läsbegäranden i Apache Cassandra

Med konsekvensen EACH_QUORUMkan en konsekvent läsning uppnås i Apache Cassandra. I misslyckas en installation med flera regioner för EACH_QUORUM om kvorumantalet noder inte uppfylls i varje region.

Diagram över global läskonsekvens i Apache Cassandra.

Global stark konsekvens för läsbegäranden i Azure Cosmos DB för Apache Cassandra

Läsbegäran hanteras från två repliker i den angivna regionen. Eftersom skrivningen redan tog hand om att bevara till ett kvorumantal regioner (och alla regioner om varje region var tillgänglig), ger bara läsning från två repliker i den angivna regionen stark konsekvens. Den här starka konsekvensen måste EACH_QUORUM anges i drivrutinen när du utfärdar läsningen mot en region för Cosmos DB-kontot tillsammans med Stark konsekvens som standardkonsekvensnivå för kontot.

Diagram över global läskonsekvens i Azure Cosmos DB för Apache Cassandra.

Lokal stark konsekvens i Apache Cassandra

En läsbegäran med konsekvensnivån TWO, THREEeller LOCAL_QUORUM ger oss stark konsekvensläsning från den lokala regionen. Med konsekvensnivån LOCAL_QUORUMbehöver du ett svar från två noder i det angivna datacentret för en lyckad läsning.

Diagram över lokal stark läskonsekvens i Apache Cassandra.

Lokal stark konsekvens i Azure Cosmos DB för Apache Cassandra

I Azure Cosmos DB för Cassandra ger konsekvensnivån TWO, THREE eller LOCAL_QUORUM en lokal stark konsekvens för en läsbegäran. Eftersom skrivsökvägen garanterar replikering till minst tre av fyra repliker garanterar en läsning från två repliker i den angivna regionen en kvorumläsning av data i den regionen.

Diagram över lokal stark läskonsekvens i Azure Cosmos DB för Apache Cassandra.

Slutlig konsekvens i Apache Cassandra

En konsekvensnivå på LOCAL_ONE, One och ANY with LOCAL_ONE resulterar i slutlig konsekvens. Den här konsekvensen används i fall där fokus ligger på svarstid.

Diagram över eventuell läskonsekvens i Apache Cassandra.

Eventuell konsekvens i Azure Cosmos DB för Apache Cassandra?

En konsekvensnivå på LOCAL_ONE, ONE eller Any ger dig slutlig konsekvens. Med slutlig konsekvens hanteras en läsning från bara en av replikerna i den angivna regionen.

Diagram över eventuell läskonsekvens i Azure Cosmos DB för Apache Cassandra.

Åsidosätt konsekvensnivå för läsåtgärder i Azure Cosmos DB för Cassandra

Tidigare kunde konsekvensnivån för läsbegäranden endast åsidosättas till en lägre konsekvens än standardinställningen för kontot. Med standardkonsekvensen Stark kan läsbegäranden till exempel utfärdas med Stark som standard och åsidosättas per begäran (om det behövs) till en konsekvensnivå som är svagare än Stark. Det gick dock inte att utfärda läsbegäranden med en övergripande konsekvensnivå som är högre än kontots standard. Ett konto med slutlig konsekvens kunde inte ta emot läsbegäranden med en konsekvensnivå som är högre än Eventual (som i Apache Cassandra-drivrutinerna översätts till TWO, THREELOCAL_QUORUM eller QUORUM).

Azure Cosmos DB för Cassandra gör det nu enklare att åsidosätta konsekvensen för läsbegäranden till ett värde som är högre än kontots standardkonsekvens. Till exempel med standardkonsekvensen för Cosmos DB-kontot inställd på Eventual (Apache Cassandra motsvarande One eller ANY), kan läsbegäranden åsidosättas per begäran till LOCAL_QUORUM. Den här åsidosättningen säkerställer att ett kvorumantal repliker inom den angivna regionen konsulteras innan resultatuppsättningen returneras, enligt vad som krävs av LOCAL_QUORUM.

Det här alternativet förhindrar också behovet av att ange en standardkonsekvens som är högre än Eventual, när den bara behövs för läsbegäranden.