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 TWO
motsvarar 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
, session
och 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.
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.
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_QUORUM
Serial
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
.
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 Strong
returneras ett lyckat svar så snart den lokala regionen bevarar skrivningen i minst tre av fyra repliker.
Global stark konsekvens för läsbegäranden i Apache Cassandra
Med konsekvensen EACH_QUORUM
kan 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.
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.
Lokal stark konsekvens i Apache Cassandra
En läsbegäran med konsekvensnivån TWO
, THREE
eller LOCAL_QUORUM
ger oss stark konsekvensläsning från den lokala regionen. Med konsekvensnivån LOCAL_QUORUM
behöver du ett svar från två noder i det angivna datacentret för en lyckad läsning.
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.
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.
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.
Å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
, THREE
LOCAL_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.