Udostępnij za pośrednictwem


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_QUORUMlub 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_ONElub 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ść TWOjest równoważna zapisowi i QUOROM odczytowi z ONEpliku .

Seriallub 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, , sessionconsistent prefixi 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ę.

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 więcej regionów 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: 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, TWOTHREE, , LOCAL_QUORUMSerial lub Local_Serial? Rozważ żądanie zapisu z LOCAL_QUORUM elementem w RF 4 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ź powodzenia, gdy tylko region lokalny utrwali zapis w co najmniej trzech z czterech replik.

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

Globalna silna spójność żądań odczytu w usłudze Apache Cassandra

Dzięki spójności EACH_QUORUMprogramu 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.

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 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.

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 zapewni nam silną spójność odczytu 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 spójności silnego 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 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.

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

Spójność ostateczna w usłudze Apache Cassandra

Poziom LOCAL_ONEspó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.

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 ONE Any zapewni spójność ostateczną. Ze spójnością ostateczną 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 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, 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 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.