Poziomy spójności apache Cassandra i Azure Cosmos DB dla platformy Apache Cassandra
DOTYCZY: Kasandra
W przeciwieństwie do usługi Azure Cosmos DB platforma Apache Cassandra nie zapewnia dokładnie zdefiniowanych gwarancji spójności. Zamiast tego platforma Apache Cassandra zapewnia poziom spójności zapisu i poziom spójności odczytu, aby umożliwić kompromisy związane z wysoką dostępnością, spójnością i opóźnieniami. W przypadku korzystania z usługi Azure Cosmos DB dla bazy danych Cassandra:
- Poziom spójności zapisu bazy danych Apache Cassandra jest mapowany na domyślny poziom spójności skonfigurowany na koncie usługi Azure Cosmos DB. Nie można zmienić spójności operacji zapisu (CL) dla poszczególnych żądań.
- Usługa Azure Cosmos DB będzie dynamicznie mapować poziom spójności odczytu określony przez sterownik klienta Cassandra. Poziom spójności zostanie zamapowany na jeden z poziomów spójności usługi Azure Cosmos DB skonfigurowanych dynamicznie w żądaniu odczytu.
Zapisy w wielu regionach a zapisy w jednym regionie
Baza danych Apache Cassandra jest domyślnie systemem wielowzorcowym i nie zapewnia gotowej opcji zapisu w jednym regionie z replikacją w wielu regionach na potrzeby operacji odczytu. Jednak usługa Azure Cosmos DB zapewnia możliwość posiadania konfiguracji zapisu w jednym regionie lub w wielu regionach. Jedną z zalet możliwości wyboru konfiguracji zapisu w jednym regionie w wielu regionach jest unikanie scenariuszy konfliktów między regionami oraz możliwość utrzymania silnej spójności w wielu regionach.
Dzięki zapisom w jednym regionie można zachować silną spójność, zachowując jednocześnie poziom wysokiej dostępności między regionami przy użyciu trybu failover zarządzanego przez usługę. W tej konfiguracji nadal można wykorzystać lokalność danych, aby zmniejszyć opóźnienie odczytu przez obniżenie poziomu spójności ostatecznej na żądanie. Oprócz tych możliwości platforma Azure Cosmos DB oferuje również opcję nadmiarowości strefy podczas wybierania regionu. W związku z tym, w przeciwieństwie do natywnego rozwiązania Apache Cassandra, usługa Azure Cosmos DB umożliwia nawigowanie po spektrum kompromisu CAP z większą szczegółowością.
Mapowanie poziomów spójności
Platforma Azure Cosmos DB udostępnia zestaw pięciu dobrze zdefiniowanych ustawień spójności zorientowanych na przypadki użycia biznesowego w odniesieniu do replikacji. Kompromisy z tymi ustawieniami spójności są definiowane przez twierdzenie CAP i PACLC . Ponieważ takie podejście różni się znacząco od bazy danych Apache Cassandra, zalecamy przejrzenie i zrozumienie spójności usługi Azure Cosmos DB. Alternatywnie możesz przejrzeć ten krótki przewodnik wideo, aby zrozumieć ustawienia spójności na platformie Azure Cosmos DB. W poniższej tabeli przedstawiono możliwe mapowania między poziomami spójności apache Cassandra i Azure Cosmos DB podczas korzystania z interfejsu API dla bazy danych Cassandra. W tej tabeli przedstawiono konfiguracje dla pojedynczego regionu, odczytów w wielu regionach z zapisami w jednym regionie i zapisami w wielu regionach.
Mapowania
Uwaga
Nie są to dokładne mapowania. Zamiast tego podaliśmy najbliższe analogie apache Cassandra i uściśliliśmy wszelkie różnice jakościowe w prawej kolumnie. Jak wspomniano powyżej, zalecamy przejrzenie ustawień spójności usługi Azure Cosmos DB.
ALL
, EACH_QUOROM
, QUOROM
, LOCAL_QUORUM
lub THREE
zapis spójności w systemie Apache Cassandra
Spójność odczytu apache | Czytanie z | Najbliższy poziom spójności usługi Azure Cosmos DB do ustawień odczytu/zapisu w usłudze Apache Cassandra |
---|---|---|
ALL |
Region lokalny | Strong |
EACH_QUOROM |
Region lokalny | Strong |
QUOROM |
Region lokalny | Strong |
LOCAL_QUORUM |
Region lokalny | Strong |
LOCAL_ONE |
Region lokalny | Eventual |
ONE |
Region lokalny | Eventual |
TWO |
Region lokalny | Strong |
THREE |
Region lokalny | Strong |
W przeciwieństwie do bazy danych Apache i DSE Cassandra usługa Azure Cosmos DB domyślnie zatwierdza zapis kworum. Co najmniej trzy z czterech węzłów (3/4) zatwierdzają zapis na dysku, a nie tylko dziennik zatwierdzeń w pamięci.
ONE
, LOCAL_ONE
lub ANY
spójność zapisu w systemie Apache Cassandra
Spójność odczytu apache | Czytanie z | Najbliższy poziom spójności usługi Azure Cosmos DB do ustawień odczytu/zapisu w usłudze Apache Cassandra |
---|---|---|
ALL |
Region lokalny | Strong |
EACH_QUOROM |
Region lokalny | Eventual |
QUOROM |
Region lokalny | Eventual |
LOCAL_QUORUM |
Region lokalny | Eventual |
LOCAL_ONE |
Region lokalny | Eventual |
ONE |
Region lokalny | Eventual |
TWO |
Region lokalny | Eventual |
THREE |
Region lokalny | Eventual |
Interfejs API usługi Azure Cosmos DB dla bazy danych Cassandra domyślnie zatwierdza zapis kworum, dlatego można używać wszystkich składań odczytu.
TWO
spójność zapisu w usłudze Apache Cassandra
Spójność odczytu apache | Czytanie z | Najbliższy poziom spójności usługi Azure Cosmos DB do ustawień odczytu/zapisu w usłudze Apache Cassandra |
---|---|---|
ALL |
Region lokalny | Strong |
EACH_QUOROM |
Region lokalny | Strong |
QUOROM |
Region lokalny | Strong |
LOCAL_QUORUM |
Region lokalny | Strong |
LOCAL_ONE |
Region lokalny | Eventual |
ONE |
Region lokalny | Eventual |
TWO |
Region lokalny | Eventual |
THREE |
Region lokalny | Strong |
Usługa Azure Cosmos DB nie ma pojęcia spójności zapisu tylko do dwóch węzłów, dlatego traktujemy tę spójność podobną do kworum w większości przypadków. W przypadku spójności odczytu ta spójność TWO
jest równoważna zapisowi i QUOROM
odczytowi z ONE
pliku .
Serial
lub Local_Serial
zapis spójności w systemie Apache Cassandra
Spójność odczytu apache | Czytanie z | Najbliższy poziom spójności usługi Azure Cosmos DB do ustawień odczytu/zapisu w usłudze Apache Cassandra |
---|---|---|
ALL |
Region lokalny | Strong |
EACH_QUOROM |
Region lokalny | Strong |
QUOROM |
Region lokalny | Strong |
LOCAL_QUORUM |
Region lokalny | Strong |
LOCAL_ONE |
Region lokalny | Eventual |
ONE |
Region lokalny | Eventual |
TWO |
Region lokalny | Strong |
THREE |
Region lokalny | Strong |
Serial dotyczy tylko uproszczonych transakcji. Usługa Azure Cosmos DB domyślnie jest zgodna z trwałym zatwierdzonym algorytmem, dlatego Serial
spójność jest podobna do kworum.
Inne regiony zapisu w jednym regionie
Usługa Azure Cosmos DB ułatwia pięć ustawień spójności, w tym silne, w wielu regionach, w których skonfigurowano operacje zapisu w jednym regionie. To ułatwienie występuje tak długo, jak regiony znajdują się w odległości 2000 mil od siebie.
Usługa Azure Cosmos DB nie ma odpowiedniego mapowania na apache Cassandra, ponieważ wszystkie węzły/regiony są zapisami, a silna gwarancja spójności nie jest możliwa we wszystkich regionach.
Inne regiony zapisu w wielu regionach
Usługa Azure Cosmos DB ułatwia tylko cztery ustawienia spójności; eventual
, , session
consistent prefix
i bounded staleness
w wielu regionach, w których skonfigurowano zapis w wielu regionach.
Usługa Apache Cassandra zapewniałaby spójność ostateczną tylko dla operacji odczytu w innych regionach niezależnie od ustawień.
Obsługiwane przesłonięcia dynamiczne
Ustawienie konta usługi Azure Cosmos DB | Zastępowanie wartości w żądaniu klienta | Przesłoń efekt |
---|---|---|
Strong |
All |
Brak efektu (pozostają jako strong ) |
Strong |
Quorum |
Brak efektu (pozostają jako strong ) |
Strong |
LocalQuorum |
Brak efektu (pozostają jako strong ) |
Strong |
Two |
Brak efektu (pozostają jako strong ) |
Strong |
Three |
Brak efektu (pozostają jako strong ) |
Strong |
Serial |
Brak efektu (pozostają jako strong ) |
Strong |
LocalSerial |
Brak efektu (pozostają jako strong ) |
Strong |
One |
Zmiany spójności w Eventual |
Strong |
LocalOne |
Zmiany spójności w Eventual |
Strong |
Any |
Niedozwolone (błąd) |
Strong |
EachQuorum |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
All |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
Quorum |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
LocalQuorum |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
Two |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
Three |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
Serial |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
LocalSerial |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
One |
Zmiany spójności w Eventual |
Bounded staleness , session lub consistent prefix |
LocalOne |
Zmiany spójności w Eventual |
Bounded staleness , session lub consistent prefix |
Any |
Niedozwolone (błąd) |
Bounded staleness , session lub consistent prefix |
EachQuorum |
Niedozwolone (błąd) |
Metryki
Jeśli konto usługi Azure Cosmos DB jest skonfigurowane z poziomem spójności innym niż silna spójność, zapoznaj się z metryką Probabilistically Bounded Staleness (PBS). Metryka przechwytuje prawdopodobieństwo, że klienci mogą uzyskać silne i spójne odczyty dla obciążeń. Ta metryka jest widoczna w witrynie Azure Portal. Aby uzyskać więcej informacji na temat metryki PBS, zobacz Monitor Probabilistically Bounded Staleness (PBS) metryka.
Probabilistically powiązana nieaktualność pokazuje, jak ostateczna jest spójność ostateczna. Ta metryka zawiera szczegółowe informacje o tym, jak często można uzyskać silniejszą spójność niż poziom spójności, który jest obecnie skonfigurowany na koncie usługi Azure Cosmos DB. Innymi słowy, można zobaczyć prawdopodobieństwo (mierzone w milisekundach) uzyskiwania spójnych odczytów dla kombinacji regionów zapisu i odczytu.
Globalna silna spójność żądań zapisu w systemie Apache Cassandra
Apache Cassandra, ustawienie EACH_QUORUM
lub QUORUM
zapewnia silną spójność. Gdy żądanie zapisu jest wysyłane do regionu, EACH_QUORUM
utrwala dane w kworum liczby węzłów w każdym centrum danych. Ta trwałość wymaga, aby każde centrum danych było dostępne, aby operacja zapisu powiodła się. QUORUM
jest nieco mniej restrykcyjna, a QUORUM
wiele węzłów we wszystkich centrach danych potrzebnych do utrwalania danych przed potwierdzeniem pomyślnego zapisu.
Poniższa ilustracja przedstawia globalne ustawienie silnej spójności w systemie Apache Cassandra między dwoma regionami 1 i 2. Po zapisaniu danych w regionie 1 należy utrwały zapis w liczbie węzłów kworum w obu regionach 1, a region 2 przed odebraniem potwierdzenia przez aplikację.
Globalna silna spójność żądań zapisu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra
W usłudze Azure Cosmos DB spójność jest ustawiana na poziomie konta. Dzięki Strong
spójności w usłudze Azure Cosmos DB dla bazy danych Cassandra dane są replikowane synchronicznie do regionów odczytu dla konta. Im więcej regionów dla konta usługi Azure Cosmos DB, tym większe jest opóźnienie spójnych operacji zapisu.
Jak liczba regionów wpływa na żądanie odczytu lub zapisu:
- Dwa regiony: z silną spójnością kworum
(N/2 + 1) = 2
. Dlatego jeśli region odczytu ulegnie awarii, konto nie może już akceptować zapisów z silną spójnością, ponieważ liczba regionów kworum nie jest dostępna do replikacji zapisu. - Trzy lub więcej regionów: dla elementu
N = 3
,quorum = 2
. Jeśli jeden z regionów odczytu nie działa, region zapisu nadal może replikować zapisy do łącznie dwóch regionów spełniających wymaganie kworum. Podobnie z czterema regionami:quorum = 4/2 + 1 = 3
. Nawet jeśli jeden region odczytu nie działa, kworum można spełnić.
Uwaga
Jeśli globalnie silna spójność jest wymagana dla wszystkich operacji zapisu, spójność dla konta usługi Azure Cosmos DB dla bazy danych Cassandra musi być ustawiona na silną. Poziom spójności operacji zapisu nie może zostać zastąpiony niższym poziomem spójności dla poszczególnych żądań w usłudze Azure Cosmos DB.
Słabsza spójność żądań zapisu w usłudze Apache Cassandra
Poziom spójności , ANY
, ONE
, TWO
THREE
, , LOCAL_QUORUM
Serial
lub Local_Serial
? Rozważ żądanie zapisu z LOCAL_QUORUM
elementem w RF
4
sześciowęźle centrum danych. Quorum = 4/2 + 1 = 3
.
Słabsza spójność żądań zapisu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra
Gdy żądanie zapisu jest wysyłane z dowolnym poziomem spójności niższym niż Strong
, zostanie zwrócona odpowiedź powodzenia, gdy tylko region lokalny utrwali zapis w co najmniej trzech z czterech replik.
Globalna silna spójność żądań odczytu w usłudze Apache Cassandra
Dzięki spójności EACH_QUORUM
programu można osiągnąć spójny odczyt w systemie Apache Cassandra. W konfiguracji obejmującej wiele regionów EACH_QUORUM
, jeśli liczba węzłów kworum nie zostanie spełnina w każdym regionie, odczyt zakończy się niepowodzeniem.
Globalna silna spójność żądań odczytu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra
Żądanie odczytu jest obsługiwane z dwóch replik w określonym regionie. Ponieważ zapis już zajmował się utrwalaniem liczby regionów kworum (i wszystkich regionów, jeśli każdy region był dostępny), po prostu odczyt z dwóch replik w określonym regionie zapewnia silną spójność. Ta silna spójność wymaga EACH_QUORUM
określenia w sterowniku podczas wystawiania odczytu względem regionu dla konta usługi Cosmos DB wraz z silną spójnością jako domyślnym poziomem spójności dla konta.
Lokalna silna spójność w systemie Apache Cassandra
Żądanie odczytu z poziomem TWO
spójności , THREE
lub LOCAL_QUORUM
zapewni nam silną spójność odczytu z regionu lokalnego. W przypadku poziomu LOCAL_QUORUM
spójności programu potrzebna jest odpowiedź z dwóch węzłów w określonym centrum danych w celu pomyślnego odczytu.
Lokalna silna spójność w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra
W usłudze Azure Cosmos DB dla bazy danych Cassandra poziom spójności TWO
THREE
systemu lub LOCAL_QUORUM
zapewni lokalną silną spójność dla żądania odczytu. Ponieważ ścieżka zapisu gwarantuje replikację do co najmniej trzech z czterech replik, odczyt z dwóch replik w określonym regionie gwarantuje kworum odczytu danych w tym regionie.
Spójność ostateczna w usłudze Apache Cassandra
Poziom LOCAL_ONE
spójności elementu i One
ANY with LOCAL_ONE
spowoduje spójność ostateczną. Ta spójność jest używana w przypadkach, w których koncentruje się na opóźnieniach.
Spójność ostateczna w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra?
Poziom LOCAL_ONE
spójności elementu lub ONE
Any
zapewni spójność ostateczną. Ze spójnością ostateczną odczyt jest obsługiwany tylko z jednej z replik w określonym regionie.
Zastępowanie poziomu spójności dla operacji odczytu w usłudze Azure Cosmos DB dla bazy danych Cassandra
Wcześniej poziom spójności dla żądań odczytu mógł zostać zastąpiony tylko niższą spójnością niż domyślny ustawiony na koncie. Na przykład z domyślną spójnością Silne żądania odczytu mogą być domyślnie wystawiane z silną i zastępowane dla poszczególnych żądań (w razie potrzeby) do poziomu spójności słabszego niż silny. Nie można jednak wysyłać żądań odczytu z przesłoniętym poziomem spójności wyższym niż domyślne konto. Konto ze spójnością ostateczną nie może odbierać żądań odczytu o poziomie spójności wyższym niż ostateczne (które w sterownikach Apache Cassandra tłumaczone na TWO
, THREE
LOCAL_QUORUM
lub QUORUM
).
Usługa Azure Cosmos DB dla bazy danych Cassandra ułatwia teraz zastępowanie spójności żądań odczytu do wartości wyższej niż domyślna spójność konta. Na przykład z domyślną spójnością na koncie usługi Cosmos DB ustawionym na ostateczną wartość (odpowiednik One
apache Cassandra lub ANY
), żądania odczytu można zastąpić na podstawie żądania na LOCAL_QUORUM
. To zastąpienie gwarantuje, że liczba replik kworum w określonym regionie jest konsultowana przed zwróceniem zestawu wyników zgodnie z wymaganiami programu LOCAL_QUORUM
.
Ta opcja uniemożliwia również ustawienie domyślnej spójności, która jest wyższa niż Eventual
, gdy jest wymagana tylko dla żądań odczytu.