5

Projektuję system rozproszony z pewnym przepływem danych. Chciałbym zagwarantować, że co najmniej N węzłów ma niemal bieżące dane w danym momencie. Nie potrzebuję pełnej spójności, tylko ostateczna konsystencja (t.i. w dowolnym momencie, aktualna migawka danych powinna ostatecznie pojawić się na co najmniej N węzłów. Trudno jest zdefiniować tutaj termin "bieżący", ale nadal). Węzły mogą się zawieść w dowolnym momencie i nie ma jednego węzła "centralnego".Artykuły o schematach replikacji/algorytmach?

O overflowers! Wskaż mi kilka dobrych artykułów opisujących schematy replikacji. Do tej pory znalazłem jeden: Consistency Management in Optimistic Replication Algorithms oraz bardziej obszerny i niedawny artykuł tego samego autora: Optimistic Replication.

Odpowiedz

1

Wiele trick na to jest znalezienie Państwa wymaganiom i twoje wciąż brzmią dość niejasne. Czy potrzebujesz tylko obsługiwać takie operacje?

  • Aktualizacja klawisz K do wartości V.
  • Spójrz nieco-niedawnej wartość klucza K.

pan wspomniał trzeba ewentualną konsystencję. Tak więc, jeśli wykonasz pojedynczą aktualizację, będzie ona w końcu replikować wszędzie. Jeśli robisz dwie niemal jednoczesne aktualizacje, czy zależy ci na tym, który z nich wygrywa? Jeśli jedna replika zgłasza, że ​​aktualizacja została pomyślnie zakończona, czy zależy Ci na utracie wartości, jeśli ta replika wkrótce zawiesi się tymczasowo? A może replika została trwale zniszczona?

Jaka powinna być precyzja - ostatnia? Jeśli istnieje netsplit lub coś takiego, odnośnik może zwrócić bardzo nieświeży wynik lub po prostu zawieść. Czy ci na tym zależy?

Czy kiedykolwiek potrzebne do wspierania bardziej wyszukane operacje jak ...

  • uzyskać bezwzględną ostatnią wartość klucza K?
  • Zaktualizuj wartość klucza K na wartość V 'pod warunkiem, że ostatnia wartość jest obecnie równa V?

Czy masz sztywne wymagania dotyczące niezawodności, opóźnień i/lub przepustowości? Jak daleko od siebie znajdują się twoje repliki/jak dobra jest sieć? Ma to wpływ, jeśli możesz mieć komunikację krzyżową przy każdej aktualizacji, a nawet przy każdym wyszukiwaniu; lub nawet jeśli możesz/powinieneś przeoczyć operacje na zdalną replikę, jeśli lokalna wydaje się być wyłączona.

W zależności od odpowiedzi tutaj, pracowałem z kilkoma różnymi schematami, które mogą spełnić Twoje wymagania. Istnieje kilka możliwych wariantów.

  • Najprostszą rzeczą jest, aby aplikacja zawsze rozmawiała z lokalną repliką. Repliki wartości znacznika czasu (używając zegarów zsynchronizowanych z NTP) i rozmawiają tylko ze sobą w celu replikacji asynchronicznej. Najwyższa sygnatura czasowa wygrywa w replikacji. Oczywiście, jeśli aplikacje na dwóch różnych replikach wykonują jednocześnie odczyt/modyfikację/zapis w pobliżu, jedna z modyfikacji może zostać łatwo utracona. (W rzeczywistości, bez warunkowego schematu aktualizacji, to samo odnosi się nawet do prawie jednoczesnych zmian na tej samej replice.) Jeśli replika ciągle zawiedzie, ostatnie aktualizacje mogą zostać utracone. Jest to mniej więcej to, co robi wbudowana replikacja Bigtable. W artykule, który łączyłeś, byłaby to gałąź "Optymistyczna - Multimaster", ale brak dbałości o utratę niektórych aktualizacji czyni ją prostszą niż sugerują.
  • Niektóre bazy danych używają algorytmu Paxos (patrz na przykład "Zarządzanie danymi w celu jednokrotnego logowania w Internecie"), aby uzyskać bardziej wyszukane możliwości. Każda replika może wiedzieć, jak daleko za nią może być, więc możesz powiedzieć "daj mi wartość, która nie jest dłuższa niż 1 minuta "lub" daj mi absolutną ostatnią wartość. "Aktualizacja nie jest uważana za zakończoną, dopóki kworum replik jej nie zaakceptuje, więc" daj mi absolutną ostatnią wartość "na pewno zawsze zwróci to dopóki nie pojawi się kolejna aktualizacja, możesz wykonać operację warunkowej aktualizacji, o której wspominałem, aby zapobiec jednoczesnemu wytrącaniu się jednoczesnych pisarzy, co nie pasuje do optymistycznej lub pesymistycznej kategorii zdefiniowanej przez tego autora, ponieważ aktualizacje są replikowane synchronicznie do kworum, ale repliki, które nie głosowały w ostatniej rundzie Paxos, nadal mogą być w stanie odpowiedzieć na niektóre pytania. skomplikowane, choć ...
Powiązane problemy