Pytanie Ewentualna konsekwencja w prostym języku angielskim


Często słyszę o ostatecznej spójności w różnych wystąpieniach na temat NoSQL, sieci danych itp. Wydaje się, że definicja ewentualnej spójności różni się w wielu źródłach (a może nawet zależy od konkretnego przechowywania danych).

Czy ktokolwiek może podać proste wyjaśnienie, jaka jest ostateczna spójność w ogóle, niezwiązana z konkretnym przechowywaniem danych?


76
2018-04-09 19:21


pochodzenie


Czy np. Wikipedia nie pomaga? en.wikipedia.org/wiki/Eventual_consistency - Oliver Charlesworth
@OliCharlesworth: nie. Może to tylko ja, ale absolutnie niejasne, nawet po dwukrotnym przeczytaniu. - Roman


Odpowiedzi:


Ewentualna spójność:

  1. Oglądam raport pogodowy i dowiaduję się, że jutro będzie padać.
  2. Mówię wam, że jutro będzie padać.
  3. Twój sąsiad mówi swojej żonie, że jutro będzie słonecznie.
  4. Powiedz swojemu sąsiadowi, że jutro będzie padać.

W końcu wszystkie serwery (ty, ja, twój sąsiad) znają prawdę (że jutro będzie padać deszcz), ale w międzyczasie klient (jego żona) odszedł myśląc, że będzie słonecznie, mimo że zapytała po tym, jak jeden lub więcej serwerów (ty i ja) miałeś bardziej aktualną wartość.

W przeciwieństwie do ścisłej zgodności / zgodności ACID:

  1. Saldo Twojego konta wynosi 50 USD.
  2. Wpłacasz 100 $.
  3. Saldo Twojego konta, zapytane w dowolnym bankomacie, wynosi 150 USD.
  4. Twoja córka wypłaca 40 USD za pomocą karty bankomatowej.
  5. Saldo Twojego konta, zapytane w dowolnym bankomacie, wynosi 110 USD.

W żadnym momencie saldo nie może odzwierciedlać niczego poza rzeczywistą sumą wszystkich transakcji dokonanych na koncie do tego momentu.

The powód dlaczego tak wiele systemów NoSQL ma ostateczną spójność to fakt, że praktycznie wszystkie z nich są zaprojektowane do rozprowadzania, a dzięki w pełni rozproszonym systemom istnieje super-liniowy narzut do utrzymywania ścisłej spójności (co oznacza, że ​​możesz skalować do tej pory, zanim rzeczy zaczną zwalniać, a kiedy to nastąpi, musisz rzucić wykładniczo więcej sprzętu na problem, aby utrzymać skalowanie).


130
2018-04-09 19:25



Nie rozumiem. Czy wzrost jest liniowy czy wykładniczy? - Maciek Kreft
Wzrost narzutu komunikacji systemu N ściśle spójnych węzłów jest ogólnie rozumiany jako super-liniowy (to znaczy więcej niż liniowy). Może być wykładniczy, może być sześcienny ... Zależy od protokołu komunikacyjnego itp. - Chris Shain
Dobra odpowiedź. Kilka pytań uzupełniających: czy to nie jest "złe", że prośby do serwera mogą spowodować, że otrzymasz błędne / nieaktualne informacje? Czy ludzie są w porządku z tym, czy jest na to rozwiązanie? W jaki sposób dane są ostatecznie replikowane na różnych serwerach? Jeśli jeden z serwerów ulegnie awarii, a dane zostaną zreplikowane na serwerach, jeśli serwer zostanie ponownie uruchomiony, w jaki sposób otrzyma aktualne dane? - noblerare
@Noblerare to "złe" dla różnych stopni zła. Byłoby bardzo źle, gdyby moje saldo bankomatowe było nieaktualne. Jest to mniej szkodliwe, jeśli moja baza danych logowania nie jest do końca zajęta, lub jeśli mój kanał na Facebooku jest kilka sekund w tyle. Mechanizmy replikacji i trwałości danych są bardzo zróżnicowane i zależą od konkretnej platformy. Dla Cassandry (jako przykładu) pisarz może zdecydować, czy aby dany zapis się powiódł, musi zostać zatwierdzony na jedno, wszystkie lub kworum (większość) węzłów. HBase przyjmuje inne podejście, w którym określony węzeł jest "wzorcem" dla każdego wiersza danych. - Chris Shain


Ewentualna spójność:

  1. Twoje dane są replikowane na wielu serwerach
  2. Twoi klienci mogą uzyskać dostęp do dowolnego serwera w celu pobrania danych
  3. Ktoś zapisuje dane na jednym z serwerów, ale nie został jeszcze skopiowany do reszty
  4. Klient uzyskuje dostęp do serwera z danymi i otrzymuje najbardziej aktualną kopię
  5. Inny klient (lub nawet ten sam klient) uzyskuje dostęp do innego serwera (który nie otrzymał jeszcze nowej kopii) i otrzymuje starą kopię

Zasadniczo, ponieważ replikacja danych na wielu serwerach wymaga czasu, żądania odczytu danych mogą zostać przesłane do serwera z nową kopią, a następnie do serwera ze starą kopią. Termin "ewentualny" oznacza, że ​​ostatecznie dane zostaną zreplikowane na wszystkie serwery, a zatem wszystkie będą miały aktualną kopię.

Konieczna jest ostateczna spójność, jeśli chcesz, aby odczyt opóźnienia był niski, ponieważ serwer odpowiadający musi zwrócić własną kopię danych i nie ma czasu na konsultacje z innymi serwerami i osiągnięcie porozumienia w sprawie zawartości danych. Napisałem post na blogu wyjaśnienie tego bardziej szczegółowo.


67
2017-09-29 16:01



Miły wpis na blogu. Warto przeczytać dla kogoś nowego w idei ewentualnej konsekwencji. Ta odpowiedź byłaby lepsza, gdyby została przepisana, aby wyjaśnić więcej tego, co znajduje się w poście na blogu. - axiopisty
Dobrze wyjaśnione na Twoim blogu. Dziękuję za udostępnienie. - Ataur Rahman Munna


Myślisz, że masz aplikację i jej replikę. Następnie musisz dodać nowy element danych do aplikacji.

enter image description here

Następnie aplikacja synchronizuje dane z innymi pokazami repliki poniżej

enter image description here

Tymczasem nowy klient otrzyma dane z jednej repliki, która jeszcze się nie zaktualizuje. W takim przypadku nie może uzyskać poprawnych danych dotyczących daty. Ponieważ synchronizacja ma trochę czasu. W tym przypadku tak się nie stało ostatecznie konsystencja

Problem w tym, jak możemy ostatecznie konsystencja?

Do tego używamy aplikacji mediatora do aktualizacji / tworzenia / usuwania danych i korzystania z bezpośrednich zapytań do odczytu danych. które pomagają ostatecznie konsystencja 

enter image description here enter image description here


6
2017-12-10 14:40





Gdy aplikacja wprowadza zmianę w elemencie danych na jednym komputerze, ta zmiana musi być propagowana do innych replik. Ponieważ propagacja zmiany nie jest natychmiastowa, istnieje pewien okres czasu, w którym niektóre kopie będą miały ostatnią zmianę, ale inne nie. Innymi słowy, kopie będą wzajemnie niespójne. Jednak zmiana zostanie ostatecznie przeniesiona na wszystkie kopie, a tym samym na termin "ostateczna spójność". Termin "ostateczna konsekwencja" jest po prostu potwierdzeniem, że istnieje nieokreślone opóźnienie w propagowaniu zmiany dokonanej na jednej maszynie we wszystkich pozostałych kopiach. Ewentualna spójność nie ma znaczenia ani nie ma znaczenia w scentralizowanych (pojedynczych egzemplarzach) systemach, ponieważ nie ma potrzeby propagowania.

źródło: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1
2017-11-11 07:12





Ostateczna spójność jest bardziej podobna do widma. Z jednej strony masz silną konsystencję, a na drugiej masz ostateczną konsekwencję. Pomiędzy nimi są poziomy takie jak Snapshot, czytam moje zapisy, ograniczone stęchlizny. Doug Terry ma piękne wyjaśnienie jego artykuł o ostatecznej konsystencji przez baseball .

Według mnie ostateczna konsystencja to zasadniczo tolerowanie losowych danych w losowej kolejności za każdym razem, gdy czytasz ze składnicy danych. Wszystko, co lepsze, to silniejszy model spójności. Na przykład migawka zawiera nieaktualne dane, ale zwróci te same dane po ponownym odczytaniu, aby można było przewidzieć. Czasami aplikacja może tolerować dane, które są nieaktualne przez określony czas, powyżej którego wymaga spójnych danych.

Jeśli spojrzeć na znaczenie spójności, odnosi się bardziej do jednolitości lub braku odchyleń. Zatem w kategoriach niezwiązanych z systemem komputerowym może to oznaczać tolerancję na nieoczekiwane zmiany. Może to być bardzo dobrze wyjaśnione przez ATM. Bankomat może być w trybie offline, a więc różnić się od salda rachunku z systemów podstawowych. Istnieje jednak tolerancja na pokazywanie różnych sald dla okna czasu. Po uruchomieniu bankomatu może on synchronizować się z systemami podstawowymi i odzwierciedlać tę samą równowagę. Można więc powiedzieć, że bankomat jest ostatecznie spójny.


0
2017-10-31 12:02





w bardzo prostym angielskim zdaniu możemy powiedzieć: Chociaż twój system może być w niespójnych stanach, celem jest zawsze osiągnięcie spójności w pewnym punkcie dla każdego fragmentu danych.


0
2017-10-31 07:58