Apache Cassandra és Azure Cosmos DB az Apache Cassandra konzisztenciaszintjeihez
A KÖVETKEZŐKRE VONATKOZIK: Cassandra
Az Azure Cosmos DB-től eltérően az Apache Cassandra nem nyújt natív módon pontos konzisztenciagaranciát. Ehelyett az Apache Cassandra írási konzisztenciaszintet és olvasási konzisztenciaszintet biztosít a magas rendelkezésre állás, a konzisztencia és a késés kompromisszumoinek lehetővé tételéhez. Az Azure Cosmos DB cassandra-hoz való használatakor:
- Az Apache Cassandra írási konzisztenciaszintje az Azure Cosmos DB-fiókban konfigurált alapértelmezett konzisztenciaszintre van leképezve. Az írási művelet (CL) konzisztenciája kérésenként nem módosítható.
- Az Azure Cosmos DB dinamikusan leképzi a Cassandra-ügyfélillesztő által megadott olvasási konzisztenciaszintet. A konzisztenciaszint az olvasási kérelemben dinamikusan konfigurált Azure Cosmos DB-konzisztenciaszintek egyikére lesz leképezve.
Többrégiós írások és egyrégiós írások
Az Apache Cassandra-adatbázis alapértelmezés szerint egy több főkiszolgálós rendszer, és nem biztosít beépített beállítást az olvasásokhoz többrégiós replikációval rendelkező egyrégiós írásokhoz. Az Azure Cosmos DB azonban kulcsrakész képességet biztosít egyetlen vagy többrégiós írási konfigurációkhoz. Az egyetlen régió írási konfigurációjának több régióban való kiválasztásának egyik előnye a régiók közötti ütközési forgatókönyvek elkerülése, valamint az erős konzisztencia fenntartása több régióban.
Az egyrégiós írásokkal megőrizheti az erős konzisztenciát, miközben továbbra is magas rendelkezésre állást tart fenn a szolgáltatások által felügyelt feladatátvétellel rendelkező régiók között. Ebben a konfigurációban továbbra is kihasználhatja az adat honosságát az olvasási késés csökkentése érdekében, ha kérésenként a végleges konzisztenciára vált. Ezen képességek mellett az Azure Cosmos DB-platform zónaredundanciát is kínál egy régió kiválasztásakor. Így a natív Apache Cassandra-val ellentétben az Azure Cosmos DB lehetővé teszi, hogy részletesebben navigáljon a CAP Theorem kompromisszumos spektrumában .
Konzisztenciaszintek leképezése
Az Azure Cosmos DB platform öt jól definiált, üzleti használatra vonatkozó konzisztenciabeállítást biztosít a replikáció tekintetében. A konzisztenciabeállítások kompromisszumoit a CAP és a PACLC-tétel határozza meg. Mivel ez a megközelítés jelentősen eltér az Apache Cassandra-tól, javasoljuk, hogy szánjon időt az Azure Cosmos DB konzisztenciájának áttekintésére és megértésére. Másik lehetőségként tekintse át ezt a rövid videós útmutatót az Azure Cosmos DB platform konzisztenciabeállításainak megértéséhez. Az alábbi táblázat az Apache Cassandra és az Azure Cosmos DB konzisztenciaszintjei közötti lehetséges leképezéseket mutatja be a Cassandra API használatakor. Ez a táblázat az egyrégiós konfigurációkat, a többrégiós olvasásokat egyrégiós írásokkal és a többrégiós írásokat mutatja be.
Leképezések
Feljegyzés
Ezek nem pontos leképezések. Ehelyett az Apache Cassandra legközelebbi analógjait biztosítottuk, és egyértelműsítettük a jobb szélső oszlop minőségi különbségeit. Ahogy fentebb említettük, javasoljuk, hogy tekintse át az Azure Cosmos DB konzisztenciabeállításait.
ALL
, EACH_QUOROM
, QUOROM
, LOCAL_QUORUM
vagy THREE
írási konzisztencia az Apache Cassandra-ban
Apache olvasási konzisztencia | Olvasás innen: | Az Azure Cosmos DB konzisztenciaszintje az Apache Cassandra olvasási/írási beállításaihoz legközelebbi |
---|---|---|
ALL |
Helyi régió | Strong |
EACH_QUOROM |
Helyi régió | Strong |
QUOROM |
Helyi régió | Strong |
LOCAL_QUORUM |
Helyi régió | Strong |
LOCAL_ONE |
Helyi régió | Eventual |
ONE |
Helyi régió | Eventual |
TWO |
Helyi régió | Strong |
THREE |
Helyi régió | Strong |
Az Apache-tól és a DSE Cassandra-tól eltérően az Azure Cosmos DB alapértelmezés szerint véglegesít egy kvórumírást. Négy (3/4) csomópontból legalább három véglegesíti az írást a lemezre, és NEM csak egy memórián belüli véglegesítési naplót.
ONE
, vagy LOCAL_ONE
ANY
írási konzisztencia az Apache Cassandra-ban
Apache olvasási konzisztencia | Olvasás innen: | Az Azure Cosmos DB konzisztenciaszintje az Apache Cassandra olvasási/írási beállításaihoz legközelebbi |
---|---|---|
ALL |
Helyi régió | Strong |
EACH_QUOROM |
Helyi régió | Eventual |
QUOROM |
Helyi régió | Eventual |
LOCAL_QUORUM |
Helyi régió | Eventual |
LOCAL_ONE |
Helyi régió | Eventual |
ONE |
Helyi régió | Eventual |
TWO |
Helyi régió | Eventual |
THREE |
Helyi régió | Eventual |
A Cassandra-hoz készült Azure Cosmos DB API mindig tartósan véglegesíti a kvórum írását alapértelmezés szerint, ezért minden olvasási konzisztencia használható.
TWO
írási konzisztencia az Apache Cassandra-ban
Apache olvasási konzisztencia | Olvasás innen: | Az Azure Cosmos DB konzisztenciaszintje az Apache Cassandra olvasási/írási beállításaihoz legközelebbi |
---|---|---|
ALL |
Helyi régió | Strong |
EACH_QUOROM |
Helyi régió | Strong |
QUOROM |
Helyi régió | Strong |
LOCAL_QUORUM |
Helyi régió | Strong |
LOCAL_ONE |
Helyi régió | Eventual |
ONE |
Helyi régió | Eventual |
TWO |
Helyi régió | Eventual |
THREE |
Helyi régió | Strong |
Az Azure Cosmos DB nem rendelkezik azzal a fogalmaval, hogy csak két csomóponton legyen írási konzisztencia, ezért ezt a konzisztenciát a legtöbb esetben a kvórumhoz hasonlóan kezeljük. Az olvasási konzisztencia TWO
esetében ez a konzisztencia egyenértékű az írással és a forrásból való olvasással QUOROM
ONE
.
Serial
, vagy Local_Serial
írási konzisztencia az Apache Cassandra-ban
Apache olvasási konzisztencia | Olvasás innen: | Az Azure Cosmos DB konzisztenciaszintje az Apache Cassandra olvasási/írási beállításaihoz legközelebbi |
---|---|---|
ALL |
Helyi régió | Strong |
EACH_QUOROM |
Helyi régió | Strong |
QUOROM |
Helyi régió | Strong |
LOCAL_QUORUM |
Helyi régió | Strong |
LOCAL_ONE |
Helyi régió | Eventual |
ONE |
Helyi régió | Eventual |
TWO |
Helyi régió | Strong |
THREE |
Helyi régió | Strong |
A sorozatszám csak az egyszerűsített tranzakciókra vonatkozik. Az Azure Cosmos DB alapértelmezés szerint egy tartósan lekötött algoritmust követ, ezért Serial
a konzisztencia a kvórumhoz hasonló.
Az egyrégiós írás egyéb régiói
Az Azure Cosmos DB öt konzisztenciabeállítást tesz lehetővé, beleértve az erős beállításokat is, több régióban, ahol az egyrégiós írások konfigurálva vannak. Ez a könnyítés addig történik, amíg a régiók egymástól 2000 mérfölden belül vannak.
Az Azure Cosmos DB nem rendelkezik az Apache Cassandra-ra vonatkozó leképezéssel, mivel minden csomópont/régió írásra szolgál, és az erős konzisztenciagarancia nem minden régióban lehetséges.
Más régiók többrégiós íráshoz
Az Azure Cosmos DB csak négy konzisztenciabeállítást tesz lehetővé; eventual
, consistent prefix
, session
és bounded staleness
több régióban, ahol többrégiós írás van konfigurálva.
Az Apache Cassandra csak a beállításoktól függetlenül biztosítana végleges konzisztenciát az olvasáshoz más régiókban.
Támogatott dinamikus felülbírálások
Azure Cosmos DB-fiókbeállítás | Felülbírálási érték az ügyfélkérésben | Felülbírálási effektus |
---|---|---|
Strong |
All |
Nincs hatás (változatlanul strong ) |
Strong |
Quorum |
Nincs hatás (változatlanul strong ) |
Strong |
LocalQuorum |
Nincs hatás (változatlanul strong ) |
Strong |
Two |
Nincs hatás (változatlanul strong ) |
Strong |
Three |
Nincs hatás (változatlanul strong ) |
Strong |
Serial |
Nincs hatás (változatlanul strong ) |
Strong |
LocalSerial |
Nincs hatás (változatlanul strong ) |
Strong |
One |
Konzisztenciaváltozások a Eventual |
Strong |
LocalOne |
Konzisztenciaváltozások a Eventual |
Strong |
Any |
Nem engedélyezett (hiba) |
Strong |
EachQuorum |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
All |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
Quorum |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
LocalQuorum |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
Two |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
Three |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
Serial |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
LocalSerial |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
One |
Konzisztenciaváltozások a Eventual |
Bounded staleness , session vagy consistent prefix |
LocalOne |
Konzisztenciaváltozások a Eventual |
Bounded staleness , session vagy consistent prefix |
Any |
Nem engedélyezett (hiba) |
Bounded staleness , session vagy consistent prefix |
EachQuorum |
Nem engedélyezett (hiba) |
Mérőszámok
Ha az Azure Cosmos DB-fiók konzisztenciaszintje nem az erős konzisztenciaszinttel van konfigurálva, tekintse át a probabilitásilag határolt elavultság (PBS) metrikát. A metrika rögzíti annak valószínűségét, hogy az ügyfelek erős és konzisztens olvasást kapnak a számítási feladatokhoz. Ez a metrika az Azure Portalon érhető el. A PBS-metrikával kapcsolatos további információkért lásd : Monitor Probabilistically Bounded Staleness (PBS) metrika.
A valószínűség szerint korlátozott elavultság azt mutatja, hogy milyen végleges a végleges konzisztencia. Ez a metrika bemutatja, hogy milyen gyakran kaphat erősebb konzisztenciát, mint az Azure Cosmos DB-fiókban jelenleg konfigurált konzisztenciaszint. Más szóval látható annak a valószínűsége (ezredmásodpercben mérve), hogy konzisztens olvasást kap az írási és olvasási régiók kombinációjához.
Az Apache Cassandra írási kéréseinek globális erős konzisztenciája
Apache Cassandra, a beállítás, EACH_QUORUM
vagy QUORUM
ad egy erős konzisztencia. Amikor egy írási kérést küld egy régiónak, EACH_QUORUM
az adatokat az egyes adatközpontokban lévő csomópontok kvórumszámában megőrzi. Ehhez az adatmegőrzéshez minden adatközpontnak rendelkezésre kell állnia ahhoz, hogy az írási művelet sikeres legyen. QUORUM
kissé kevésbé korlátozó, és QUORUM
az összes adatközpontban számos csomópont szükséges az adatok megőrzéséhez az írás sikerességének elismerése előtt.
Az alábbi ábra az Apache Cassandra globális erős konzisztenciabeállítását mutatja be két 1. és 2. régió között. Az adatok 1. régióba történő írása után az írást az 1. és a 2. régió csomópontjainak kvórumszámában kell őrizni, mielőtt az alkalmazás nyugtát kap.
Az Apache Cassandra-hoz készült Azure Cosmos DB írási kéréseinek globális erős konzisztenciája
Az Azure Cosmos DB-ben a konzisztencia a fiók szintjén van beállítva. Az Azure Cosmos DB for Cassandra konzisztenciájával Strong
az adatok szinkron módon replikálódnak a fiók olvasási régióiba. Minél távolabb vannak az Azure Cosmos DB-fiók régiói, annál nagyobb a konzisztens írási műveletek késése.
Hogyan befolyásolja a régiók száma az olvasási vagy írási kérést:
- Két régió: Erős konzisztenciával, kvórum
(N/2 + 1) = 2
. Ha tehát az olvasási régió leáll, a fiók már nem tud erős konzisztenciával rendelkező írásokat elfogadni, mivel a régiók kvórumszáma nem érhető el az írás replikálásához. - Három vagy több régió: a
N = 3
.quorum = 2
Ha az olvasási régiók egyike le van állítva, az írási régió továbbra is replikálhatja az írásokat összesen két olyan régióba, amelyek megfelelnek a kvórumkövetelménynek. Hasonlóképpen, négy régióval,quorum = 4/2 + 1 = 3
. A kvórum akkor is teljesíthető, ha egy olvasási régió le van állítva.
Feljegyzés
Ha minden írási művelethez globálisan erős konzisztencia szükséges, akkor az Azure Cosmos DB for Cassandra-fiók konzisztenciáját erősre kell állítani. Az írási műveletek konzisztenciaszintje nem írható felül kérésenként alacsonyabb konzisztenciaszintre az Azure Cosmos DB-ben.
Az Apache Cassandra írási kérelmeinek gyengébb konzisztenciája
Konzisztenciaszint , ANY
ONE
, TWO
, THREE
, LOCAL_QUORUM
Serial
vagy Local_Serial
? Fontolja meg egy írási kérést LOCAL_QUORUM
egy 4
RF
hatcsomópontos adatközpontban. Quorum = 4/2 + 1 = 3
.
Az Apache Cassandra-hoz készült Azure Cosmos DB írási kérelmeinek gyengébb konzisztenciája
Ha egy írási kérelmet a konzisztenciaszintek bármelyike alacsonyabb Strong
, a rendszer azonnal sikeres választ ad vissza, amint a helyi régió négy replikából legalább háromban megőrzi az írást.
Az Apache Cassandra olvasási kéréseinek globális erős konzisztenciája
Konzisztenciával EACH_QUORUM
konzisztens olvasás érhető el az Apache Cassandra-ban. Ha a csomópontok kvórumszáma nem teljesül minden régióban, EACH_QUORUM
akkor az olvasás sikertelen lesz.
Az Olvasási kérelmek globális erős konzisztenciája az Apache Cassandra-hoz készült Azure Cosmos DB-ben
Az olvasási kérést a megadott régió két replikája szolgáltatja. Mivel az írás már gondoskodott a régiók kvórumszámának megőrzéséről (és minden régióról, ha minden régió elérhető volt), a megadott régió két replikájának olvasása erős konzisztenciát biztosít. Ezt az erős konzisztenciát meg kell EACH_QUORUM
adni az illesztőprogramban, amikor a Cosmos DB-fiók egy régiója felé adja ki az olvasást, valamint a fiók alapértelmezett konzisztenciaszintjeként az erős konzisztenciaszintet.
Helyi erős konzisztencia az Apache Cassandra-ban
Az olvasási kérelem konzisztenciájú TWO
, THREE
vagy LOCAL_QUORUM
erős konzisztenciát biztosít a helyi régióból. A konzisztenciaszinttel LOCAL_QUORUM
a megadott adatközpont két csomópontjáról kell választ adnia a sikeres olvasáshoz.
Helyi erős konzisztencia az Apache Cassandra-hoz készült Azure Cosmos DB-ben
A Cassandra-hoz készült Azure Cosmos DB-ben konzisztenciaszinttel TWO
rendelkezik, THREE
vagy LOCAL_QUORUM
helyi erős konzisztenciát biztosít egy olvasási kéréshez. Mivel az írási útvonal négy replikából legalább háromra garantálja a replikálást, a megadott régió két replikájából származó olvasás garantálja az adott régióban lévő adatok kvórumolvasását.
Végleges konzisztencia az Apache Cassandra-ban
A konzisztencia szintje LOCAL_ONE
, One
és ANY with LOCAL_ONE
végső konzisztenciát eredményez. Ezt a konzisztenciát olyan esetekben használják, amikor a fókusz a késésre összpontosít.
Végleges konzisztencia az Apache Cassandra-hoz készült Azure Cosmos DB-ben?
A konzisztencia szintje LOCAL_ONE
, ONE
vagy Any
végleges konzisztenciát ad. A végleges konzisztenciával a rendszer csak a megadott régió egyik replikájából szolgáltat olvasást.
Az olvasási műveletek konzisztenciaszintje felülbírálása a Cassandra Azure Cosmos DB-ben
Korábban az olvasási kérelmek konzisztenciaszintje csak a fiók alapértelmezett beállításánál alacsonyabb konzisztenciaszintre volt felülírva. Az Erős alapértelmezett konzisztenciájával például az olvasási kérelmeket alapértelmezés szerint erőssel lehet kiadni, és kérésenként felül lehet bírálni (szükség esetén) az Erősnél gyengébb konzisztenciaszintre. Az olvasási kérelmeket azonban nem lehetett a fiók alapértelmezettnél magasabb konzisztenciaszinttel kibocsátani. Az Végleges konzisztenciával rendelkező fiókok nem fogadhatnak olyan olvasási kéréseket, amelyek konzisztenciaszintje magasabb, mint az Eventual (amely az Apache Cassandra illesztőprogramjaiban lefordítva TWO
az , THREE
LOCAL_QUORUM
vagy QUORUM
).
Az Azure Cosmos DB for Cassandra mostantól lehetővé teszi a fiók alapértelmezett konzisztenciájánál magasabb értékű olvasási kérelmek konzisztenciájának felülbírálását. Ha például a Cosmos DB-fiók alapértelmezett konzisztenciája Végleges (Az Apache Cassandra megfelelője One
vagy ANY
), az olvasási kérelmek felülbírálása kérésenként LOCAL_QUORUM
történik. Ez a felülbírálás biztosítja, hogy a megadott régión belüli replikák kvórumszámával a rendszer az eredményhalmaz visszaadása előtt, a szükséges LOCAL_QUORUM
módon tekintse meg.
Ez a beállítás azt is megakadályozza, hogy olyan alapértelmezett konzisztenciát állítson be, amely magasabb, mint Eventual
az olvasási kérelmek esetében.