Consistentieniveaus van Apache Cassandra en Azure Cosmos DB voor Apache Cassandra
VAN TOEPASSING OP: Cassandra
In tegenstelling tot Azure Cosmos DB biedt Apache Cassandra geen nauwkeurig gedefinieerde consistentiegaranties. In plaats daarvan biedt Apache Cassandra een schrijfconsistentieniveau en een leesconsistentieniveau om de compromissen voor hoge beschikbaarheid, consistentie en latentie mogelijk te maken. Wanneer u Azure Cosmos DB voor Cassandra gebruikt:
- Het consistentieniveau voor schrijven van Apache Cassandra wordt toegewezen aan het standaardconsistentieniveau dat is geconfigureerd in uw Azure Cosmos DB-account. Consistentie voor een schrijfbewerking (CL) kan niet per aanvraag worden gewijzigd.
- Azure Cosmos DB wijst dynamisch het leesconsistentieniveau toe dat is opgegeven door het Cassandra-clientstuurprogramma. Het consistentieniveau wordt toegewezen aan een van de Azure Cosmos DB-consistentieniveaus die dynamisch zijn geconfigureerd voor een leesaanvraag.
Schrijfbewerkingen in meerdere regio's versus schrijfbewerkingen in één regio
Apache Cassandra-database is standaard een systeem met meerdere masters en biedt geen out-of-box-optie voor schrijfbewerkingen in één regio met replicatie voor meerdere regio's voor leesbewerkingen. Azure Cosmos DB biedt echter kant-en-klare mogelijkheid om één regio of schrijfconfiguraties voor meerdere regio's te hebben. Een van de voordelen van het kiezen van een schrijfconfiguratie voor één regio voor meerdere regio's is het vermijden van conflictscenario's tussen regio's en de optie om sterke consistentie tussen meerdere regio's te behouden.
Met schrijfbewerkingen in één regio kunt u sterke consistentie behouden, terwijl u nog steeds een hoge beschikbaarheid in verschillende regio's behoudt met door de service beheerde failover. In deze configuratie kunt u nog steeds gebruikmaken van de locatie van gegevens om de leeslatentie te verminderen door de uiteindelijke consistentie per aanvraag te verlagen. Naast deze mogelijkheden biedt het Azure Cosmos DB-platform ook de optie zoneredundantie bij het selecteren van een regio. In tegenstelling tot systeemeigen Apache Cassandra kunt u met Azure Cosmos DB door het cap-theorema trade-off spectrum navigeren met meer granulariteit.
Consistentieniveaus toewijzen
Het Azure Cosmos DB-platform biedt een set van vijf goed gedefinieerde, bedrijfsgebruiksscenariogeoriënteerde consistentie-instellingen met betrekking tot replicatie. De compromissen voor deze consistentie-instellingen worden gedefinieerd door de CAP- en PACLC-theorems. Omdat deze benadering aanzienlijk verschilt van Apache Cassandra, raden we u aan om de consistentie van Azure Cosmos DB te controleren en te begrijpen. U kunt ook deze korte videohandleiding bekijken voor informatie over consistentie-instellingen in het Azure Cosmos DB-platform. In de volgende tabel ziet u de mogelijke toewijzingen tussen Apache Cassandra- en Azure Cosmos DB-consistentieniveaus bij het gebruik van API voor Cassandra. Deze tabel bevat configuraties voor één regio, leesbewerkingen in meerdere regio's met schrijfbewerkingen in één regio en schrijfbewerkingen in meerdere regio's.
Toewijzingen
Notitie
Dit zijn geen exacte toewijzingen. In plaats daarvan hebben we de dichtstbijzijnde analogen aan Apache Cassandra geleverd en hebben we eventuele kwalitatieve verschillen in de meest rechtse kolom ondubbelzinnig gemaakt. Zoals hierboven vermeld, raden we u aan de consistentie-instellingen van Azure Cosmos DB te controleren.
ALL
, EACH_QUOROM
, QUOROM
, LOCAL_QUORUM
of THREE
schrijfconsistentie in Apache Cassandra
Consistentie van Apache-leesbewerkingen | Lezen uit | Het dichtstbijzijnde consistentieniveau van Azure Cosmos DB voor Lees-/schrijfinstellingen van Apache Cassandra |
---|---|---|
ALL |
Lokale regio | Strong |
EACH_QUOROM |
Lokale regio | Strong |
QUOROM |
Lokale regio | Strong |
LOCAL_QUORUM |
Lokale regio | Strong |
LOCAL_ONE |
Lokale regio | Eventual |
ONE |
Lokale regio | Eventual |
TWO |
Lokale regio | Strong |
THREE |
Lokale regio | Strong |
In tegenstelling tot Apache en DSE Cassandra voert Azure Cosmos DB een quorumschrijfbewerking standaard door. Ten minste drie van de vier (3/4) knooppunten voeren de schrijfbewerking door naar schijf en niet alleen een doorvoerlogboek in het geheugen.
ONE
ANY
consistentie of LOCAL_ONE
schrijfconsistentie in Apache Cassandra
Consistentie van Apache-leesbewerkingen | Lezen uit | Het dichtstbijzijnde consistentieniveau van Azure Cosmos DB voor Lees-/schrijfinstellingen van Apache Cassandra |
---|---|---|
ALL |
Lokale regio | Strong |
EACH_QUOROM |
Lokale regio | Eventual |
QUOROM |
Lokale regio | Eventual |
LOCAL_QUORUM |
Lokale regio | Eventual |
LOCAL_ONE |
Lokale regio | Eventual |
ONE |
Lokale regio | Eventual |
TWO |
Lokale regio | Eventual |
THREE |
Lokale regio | Eventual |
Azure Cosmos DB-API voor Cassandra voert standaard altijd een quorumschrijfbewerking door, waardoor alle leesuitingen kunnen worden gebruikt.
TWO
consistentie schrijven in Apache Cassandra
Consistentie van Apache-leesbewerkingen | Lezen uit | Het dichtstbijzijnde consistentieniveau van Azure Cosmos DB voor Lees-/schrijfinstellingen van Apache Cassandra |
---|---|---|
ALL |
Lokale regio | Strong |
EACH_QUOROM |
Lokale regio | Strong |
QUOROM |
Lokale regio | Strong |
LOCAL_QUORUM |
Lokale regio | Strong |
LOCAL_ONE |
Lokale regio | Eventual |
ONE |
Lokale regio | Eventual |
TWO |
Lokale regio | Eventual |
THREE |
Lokale regio | Strong |
Azure Cosmos DB heeft geen idee van schrijfconsistentie tot slechts twee knooppunten. Daarom behandelen we deze consistentie voor de meeste gevallen vergelijkbaar met quorum. Voor leesconsistentie TWO
is deze consistentie gelijk aan schrijven met QUOROM
en lezen uit ONE
.
Serial
of Local_Serial
schrijfconsistentie in Apache Cassandra
Consistentie van Apache-leesbewerkingen | Lezen uit | Het dichtstbijzijnde consistentieniveau van Azure Cosmos DB voor Lees-/schrijfinstellingen van Apache Cassandra |
---|---|---|
ALL |
Lokale regio | Strong |
EACH_QUOROM |
Lokale regio | Strong |
QUOROM |
Lokale regio | Strong |
LOCAL_QUORUM |
Lokale regio | Strong |
LOCAL_ONE |
Lokale regio | Eventual |
ONE |
Lokale regio | Eventual |
TWO |
Lokale regio | Strong |
THREE |
Lokale regio | Strong |
Serieel is alleen van toepassing op lichtgewicht transacties. Azure Cosmos DB volgt standaard een duurzaam doorgevoerd algoritme en daarom Serial
is consistentie vergelijkbaar met quorum.
Andere regio's voor schrijven in één regio
Azure Cosmos DB faciliteert vijf consistentie-instellingen, waaronder sterk, in meerdere regio's waar schrijfbewerkingen in één regio zijn geconfigureerd. Deze facilitering vindt plaats zolang regio's zich binnen 2000 mijl van elkaar bevinden.
Azure Cosmos DB heeft geen toepasselijke toewijzing voor Apache Cassandra, omdat alle knooppunten/regio's schrijfbewerkingen zijn en een sterke consistentiegarantie niet mogelijk is in alle regio's.
Andere regio's voor schrijven in meerdere regio's
Azure Cosmos DB faciliteert slechts vier consistentie-instellingen; eventual
, , session
consistent prefix
en bounded staleness
in meerdere regio's waar schrijfbewerkingen voor meerdere regio's zijn geconfigureerd.
Apache Cassandra biedt alleen uiteindelijke consistentie voor leesbewerkingen in andere regio's, ongeacht de instellingen.
Ondersteunde dynamische onderdrukkingen
Azure Cosmos DB-accountinstelling | Waarde in clientaanvraag overschrijven | Onderdrukkingseffect |
---|---|---|
Strong |
All |
Geen effect (blijven als strong ) |
Strong |
Quorum |
Geen effect (blijven als strong ) |
Strong |
LocalQuorum |
Geen effect (blijven als strong ) |
Strong |
Two |
Geen effect (blijven als strong ) |
Strong |
Three |
Geen effect (blijven als strong ) |
Strong |
Serial |
Geen effect (blijven als strong ) |
Strong |
LocalSerial |
Geen effect (blijven als strong ) |
Strong |
One |
Consistentiewijzigingen in Eventual |
Strong |
LocalOne |
Consistentiewijzigingen in Eventual |
Strong |
Any |
Niet toegestaan (fout) |
Strong |
EachQuorum |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
All |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
Quorum |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
LocalQuorum |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
Two |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
Three |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
Serial |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
LocalSerial |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
One |
Consistentiewijzigingen in Eventual |
Bounded staleness , session of consistent prefix |
LocalOne |
Consistentiewijzigingen in Eventual |
Bounded staleness , session of consistent prefix |
Any |
Niet toegestaan (fout) |
Bounded staleness , session of consistent prefix |
EachQuorum |
Niet toegestaan (fout) |
Metrische gegevens
Als uw Azure Cosmos DB-account is geconfigureerd met een ander consistentieniveau dan de sterke consistentie, controleert u de metrische gegevens probabilistisch gebonden veroudering (PBS). De metrische waarde legt de kans vast dat uw clients sterke en consistente leesbewerkingen voor uw workloads kunnen krijgen. Deze metrische waarde wordt weergegeven in Azure Portal. Zie voor meer informatie over de pbs-metrische gegevens monitor probabilistisch gebonden veroudering (PBS).
Probabilistisch gebonden veroudering toont hoe uiteindelijk uw uiteindelijke consistentie is. Deze metrische waarde biedt een inzicht in hoe vaak u een sterkere consistentie kunt krijgen dan het consistentieniveau dat u momenteel hebt geconfigureerd in uw Azure Cosmos DB-account. Met andere woorden, u kunt de waarschijnlijkheid (gemeten in milliseconden) zien van het verkrijgen van consistente leesbewerkingen voor een combinatie van schrijf- en leesregio's.
Wereldwijde sterke consistentie voor schrijfaanvragen in Apache Cassandra
Apache Cassandra, de instelling van EACH_QUORUM
of QUORUM
geeft een sterke consistentie. Wanneer een schrijfaanvraag naar een regio wordt verzonden, EACH_QUORUM
worden de gegevens in een quorumaantal knooppunten in elk datacenter bewaard. Voor deze persistentie moet elk datacenter beschikbaar zijn om de schrijfbewerking te laten slagen. QUORUM
is iets minder beperkend, waarbij een QUORUM
aantal knooppunten in alle datacenters die nodig zijn om de gegevens te behouden voordat de schrijfbewerking wordt erkend om succesvol te zijn.
In de volgende afbeelding ziet u een globale instelling voor sterke consistentie in Apache Cassandra tussen twee regio's 1 en 2. Nadat gegevens naar regio 1 zijn geschreven, moet de schrijfbewerking worden bewaard in een quorumaantal knooppunten in zowel regio 1 als regio 2 voordat een bevestiging door de toepassing wordt ontvangen.
Wereldwijde sterke consistentie voor schrijfaanvragen in Azure Cosmos DB voor Apache Cassandra
De consistentie van Azure Cosmos DB wordt ingesteld op accountniveau. Met Strong
consistentie in Azure Cosmos DB voor Cassandra worden gegevens synchroon gerepliceerd naar de leesregio's voor het account. Hoe verder de regio's voor het Azure Cosmos DB-account zijn, hoe hoger de latentie van de consistente schrijfbewerkingen.
Hoe het aantal regio's van invloed is op uw lees- of schrijfaanvraag:
- Twee regio's: met sterke consistentie, quorum
(N/2 + 1) = 2
. Dus als de leesregio uitvalt, kan het account schrijfbewerkingen met sterke consistentie niet meer accepteren, omdat een quorumaantal regio's niet beschikbaar is voor de schrijfbewerking waarnaar moet worden gerepliceerd. - Drie of meer regio's: voor
N = 3
,quorum = 2
. Als een van de leesregio's niet beschikbaar is, kan de schrijfregio de schrijfbewerkingen nog steeds repliceren naar een totaal van twee regio's die voldoen aan de quorumvereiste. Op dezelfde manier, met vier regio's,quorum = 4/2 + 1 = 3
. Zelfs als er één leesregio uitvalt, kan aan het quorum worden voldaan.
Notitie
Als een wereldwijd sterke consistentie vereist is voor alle schrijfbewerkingen, moet de consistentie voor het Azure Cosmos DB voor Cassandra-account worden ingesteld op Sterk. Het consistentieniveau voor schrijfbewerkingen kan niet worden overschreven naar een lager consistentieniveau per aanvraag in Azure Cosmos DB.
Zwakkere consistentie voor schrijfaanvragen in Apache Cassandra
Een consistentieniveau van ANY
, ONE
, TWO
, , THREE
of Serial
LOCAL_QUORUM
Local_Serial
? Overweeg een schrijfaanvraag met LOCAL_QUORUM
een RF
van 4
in een datacenter met zes knooppunten. Quorum = 4/2 + 1 = 3
.
Zwakkere consistentie voor schrijfaanvragen in Azure Cosmos DB voor Apache Cassandra
Wanneer een schrijfaanvraag wordt verzonden met een van de consistentieniveaus lager dan Strong
, wordt er een geslaagde reactie geretourneerd zodra de lokale regio de schrijfbewerking in ten minste drie van de vier replica's persistent maakt.
Wereldwijde sterke consistentie voor leesaanvragen in Apache Cassandra
Met een consistentie van EACH_QUORUM
, kan een consistente leesbewerking worden bereikt in Apache Cassandra. In, een installatie met meerdere regio's voor EACH_QUORUM
als het quorumaantal knooppunten niet wordt voldaan in elke regio, wordt de leesbewerking mislukt.
Wereldwijde sterke consistentie voor leesaanvragen in Azure Cosmos DB voor Apache Cassandra
De leesaanvraag wordt uitgevoerd vanuit twee replica's in de opgegeven regio. Omdat de schrijfbewerking al heeft gezorgd voor een quorumaantal regio's (en alle regio's als elke regio beschikbaar was), biedt het lezen van twee replica's in de opgegeven regio sterke consistentie. Deze sterke consistentie moet EACH_QUORUM
worden opgegeven in het stuurprogramma bij het uitgeven van de leesbewerking voor een regio voor het Cosmos DB-account, samen met sterke consistentie als het standaardconsistentieniveau voor het account.
Lokale sterke consistentie in Apache Cassandra
Een leesaanvraag met een consistentieniveau van TWO
, THREE
of LOCAL_QUORUM
geeft ons een sterke consistentie die wordt gelezen vanuit de lokale regio. Met een consistentieniveau hebt LOCAL_QUORUM
u een reactie van twee knooppunten in het opgegeven datacenter nodig voor een geslaagde leesbewerking.
Lokale sterke consistentie in Azure Cosmos DB voor Apache Cassandra
In Azure Cosmos DB voor Cassandra, met een consistentieniveau van TWO
of THREE
LOCAL_QUORUM
een lokale sterke consistentie voor een leesaanvraag. Omdat het schrijfpad garandeert dat er minimaal drie van de vier replica's worden gerepliceerd, garandeert een leesbewerking van twee replica's in de opgegeven regio een quorumleesbewerking van de gegevens in die regio.
Uiteindelijke consistentie in Apache Cassandra
Een consistentieniveau van LOCAL_ONE
en One
ANY with LOCAL_ONE
resulteert in uiteindelijke consistentie. Deze consistentie wordt gebruikt in gevallen waarin de focus op latentie ligt.
Uiteindelijke consistentie in Azure Cosmos DB voor Apache Cassandra?
Een consistentieniveau van LOCAL_ONE
, ONE
of Any
geeft u uiteindelijke consistentie. Met uiteindelijke consistentie wordt een leesbewerking uitgevoerd vanaf slechts een van de replica's in de opgegeven regio.
Consistentieniveau overschrijven voor leesbewerkingen in Azure Cosmos DB voor Cassandra
Voorheen kon het consistentieniveau voor leesaanvragen alleen worden overschreven naar een lagere consistentie dan de standaardinstelling voor het account. Met de standaardconsistentie van Strong kunnen leesaanvragen bijvoorbeeld standaard worden uitgegeven met Strong en worden overschreven op aanvraagbasis (indien nodig) naar een consistentieniveau dat zwakker is dan Sterk. Leesaanvragen kunnen echter niet worden uitgegeven met een overschreven consistentieniveau dat hoger is dan de standaardinstelling van het account. Een account met uiteindelijke consistentie kan geen leesaanvragen met een consistentieniveau hoger dan Uiteindelijk ontvangen (dat in de Apache Cassandra-stuurprogramma's wordt omgezet in TWO
, THREE
LOCAL_QUORUM
of QUORUM
).
Azure Cosmos DB voor Cassandra vereenvoudigt nu de consistentie van leesaanvragen naar een hogere waarde dan de standaardconsistentie van het account. Als de standaardconsistentie voor het Cosmos DB-account bijvoorbeeld is ingesteld op Eventual (Apache Cassandra-equivalent van One
of ANY
), kunnen leesaanvragen per aanvraag worden overschreven naar LOCAL_QUORUM
. Deze onderdrukking zorgt ervoor dat een quorumaantal replica's binnen de opgegeven regio wordt geraadpleegd voordat de resultatenset wordt geretourneerd, zoals vereist door LOCAL_QUORUM
.
Met deze optie voorkomt u ook dat u een standaardconsistentie moet instellen die hoger is dan Eventual
, wanneer deze alleen nodig is voor leesaanvragen.