Poziomy spójności apache Cassandra i Azure Cosmos DB dla platformy Apache Cassandra

DOTYCZY: Cassandra

W przeciwieństwie do usługi Azure Cosmos DB usługa Apache Cassandra nie zapewnia natywnie 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 z wysoką dostępnością, spójnością i opóźnieniami. W przypadku korzystania z usługi Azure Cosmos DB dla rozwiązania Cassandra:

  • Poziom spójności zapisu usługi Apache Cassandra jest mapowany na domyślny poziom spójności skonfigurowany na koncie usługi Azure Cosmos DB. Spójność operacji zapisu (CL) nie może być zmieniana w zależności od żądania.
  • Usługa Azure Cosmos DB dynamicznie mapuje 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 skonfigurowany 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ą z wieloma regionami do 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 i 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 w różnych regionach z trybem failover zarządzanym przez usługę. W tej konfiguracji nadal można wykorzystać lokalność danych, aby zmniejszyć opóźnienie odczytu, obniżając spójność ostateczną 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 oprogramowania Apache Cassandra, usługa Azure Cosmos DB umożliwia poruszanie się 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 przypadek 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ę znacznie od rozwiązania Apache Cassandra, zalecamy zapoznanie się z spójnością usługi Azure Cosmos DB i zapoznanie się z tą spójnością. 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 udostępniliśmy najbliższe analogi apache Cassandra i uściśliliśmy wszelkie różnice jakościowe w najbardziej prawej kolumnie. Jak wspomniano powyżej, zalecamy przejrzenie ustawień spójności usługi Azure Cosmos DB.

ALL, EACH_QUOROM, , LOCAL_QUORUMQUOROMlub THREE 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 Strong
THREE Region lokalny Strong

W przeciwieństwie do systemu 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_ONElub ANY 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 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 zawsze 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 o spójności zapisu tylko do dwóch węzłów, dlatego w większości przypadków traktujemy tę spójność podobną do kworum. W przypadku spójności TWOodczytu ta spójność jest równoważna zapisowi i QUOROM odczytowi z ONEpliku .

Seriallub Local_Serial 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 Strong
THREE Region lokalny Strong

Serial dotyczy tylko lekkich transakcji. Usługa Azure Cosmos DB domyślnie jest zgodna z trwałym 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 silnych, w wielu regionach, w których skonfigurowano zapisy 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 platformę 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, consistent prefix, sessioni bounded staleness w wielu regionach, w których skonfigurowano zapis w wielu regionach.

Rozwiązanie Apache Cassandra zapewniałoby 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, sessionlub consistent prefix All Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix Quorum Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix LocalQuorum Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix Two Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix Three Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix Serial Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix LocalSerial Niedozwolone (błąd)
Bounded staleness, sessionlub consistent prefix One Zmiany spójności w Eventual
Bounded staleness, sessionlub consistent prefix LocalOne Zmiany spójności w Eventual
Bounded staleness, sessionlub consistent prefix Any Niedozwolone (błąd)
Bounded staleness, sessionlub 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 Azure Portal. Aby uzyskać więcej informacji na temat metryki USŁUGI PBS, zobacz Monitorowanie metryki Probabilistically Bounded Staleness (PBS).

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 skonfigurowany obecnie 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 liczbie kworum węzłów w każdym centrum danych. Ta trwałość wymaga, aby każde centrum danych było dostępne do pomyślnego wykonania operacji zapisu. QUORUM jest nieco mniej restrykcyjny, a QUORUM wiele węzłów we wszystkich centrach danych potrzebnych do utrwalania danych przed potwierdzeniem, że zapis zakończył się pomyślnie.

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 zapis musi zostać utrwalone w liczbie węzłów kworum w regionie 1 i 2 przed odebraniem potwierdzenia przez aplikację.

Diagram globalnej spójności zapisu w systemie Apache Cassandra.

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 bardziej oddalone są regiony dla konta usługi Azure Cosmos DB, tym większe jest opóźnienie spójnych operacji zapisu.

Diagram globalnej spójności zapisu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra.

Jak liczba regionów wpływa na żądanie odczytu lub zapisu:

  • Dwa regiony: przy silnej 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 N = 3, quorum = 2. Jeśli jeden z regionów odczytu nie działa, region zapisu nadal może replikować zapisy do wszystkich 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 systemie Apache Cassandra

Poziom ANYspójności wartości , , ONE, TWOTHREE, LOCAL_QUORUMSerial lub Local_Serial? Rozważ żądanie zapisu z LOCAL_QUORUM elementem w RF4 sześciowęźle centrum danych. Quorum = 4/2 + 1 = 3.

Diagram spójności zapisu nieglobalnego w systemie Apache Cassandra.

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ź z informacją o powodzeniu, gdy tylko region lokalny będzie utrwalać zapis w co najmniej trzech z czterech replik.

Diagram spójności zapisu nieglobalnego w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra.

Globalna silna spójność żądań odczytu w systemie Apache Cassandra

Dzięki spójności EACH_QUORUMfunkcji można uzyskać spójny odczyt w systemie Apache Cassandra. W przypadku konfiguracji EACH_QUORUM obejmującej wiele regionów, jeśli liczba węzłów kworum nie zostanie spełnina w każdym regionie, odczyt zakończy się niepowodzeniem.

Diagram globalnej spójności odczytu w systemie Apache Cassandra.

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 zajmował się już 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.

Diagram globalnej spójności odczytu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra.

Lokalna silna spójność w systemie Apache Cassandra

Żądanie odczytu z poziomem TWOspójności , THREElub LOCAL_QUORUM da nam silny odczyt spójności z regionu lokalnego. W przypadku poziomu LOCAL_QUORUMspójności programu potrzebna jest odpowiedź z dwóch węzłów w określonym centrum danych w celu pomyślnego odczytu.

Diagram lokalnej silnej spójności odczytu w systemie Apache Cassandra.

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 TWOTHREE 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 odczyt kworum odczytu danych w tym regionie.

Diagram lokalnej silnej spójności odczytu w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra.

Spójność ostateczna w systemie Apache Cassandra

Poziom LOCAL_ONEspójności elementu i OneANY with LOCAL_ONE spowoduje spójność ostateczną. Ta spójność jest używana w przypadkach, gdy fokus koncentruje się na opóźnieniu.

Diagram spójności odczytu ostatecznej w systemie Apache Cassandra.

Spójność ostateczna w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra?

Poziom LOCAL_ONEspójności elementu lub ONEAny zapewni spójność ostateczną. W przypadku spójności ostatecznej odczyt jest obsługiwany tylko z jednej z replik w określonym regionie.

Diagram spójności odczytu ostatecznej w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra.

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 do niższej 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ż wartość domyślna konta. Konto ze spójnością ostateczną nie może odbierać żądań odczytu o poziomie spójności wyższym niż ostateczna (co w przypadku sterowników Apache Cassandra przekłada się na TWO, THREELOCAL_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 ustawioną na ostateczną (odpowiednik One apache Cassandra lub ANY), żądania odczytu można zastąpić dla poszczególnych żądań na LOCAL_QUORUMwartość . 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.

Następne kroki

Dowiedz się więcej o globalnych poziomach dystrybucji i spójności dla usługi Azure Cosmos DB: