Architektura bazy danych master-master czy master-slave?

117

Słyszałem o dwóch rodzajach architektur baz danych.

  • mistrz-mistrz

  • pan-niewolnik

Czy master-master nie jest bardziej odpowiedni dla dzisiejszej sieci, ponieważ jest jak Git, każda jednostka ma cały zestaw danych, a jeśli jeden z nich się zepsuje, nie ma to większego znaczenia.

Master-slave przypomina mi SVN (którego nie lubię), w którym masz jedną jednostkę centralną, która obsługuje.

Pytania:

  1. Jakie są zalety i wady każdego z nich?

  2. Jeśli chcesz mieć lokalną bazę danych w telefonie komórkowym, taką jak iPhone, która jest bardziej odpowiednia?

  3. Czy wybór jednego z nich jest krytycznym czynnikiem, który należy dokładnie rozważyć?

Never_had_a_name
źródło
1
Twierdzenie CAP -> Consistency Availability Partition Tolerance stwierdza, że ​​nie można mieć wszystkich trzech razem. W zależności od aplikacji możesz wybrać jedną.
Pritam Banerjee

Odpowiedzi:

87

Stawiamy na dostępność, spójność i złożoność. Aby najpierw odpowiedzieć na ostatnie pytanie: czy to ma znaczenie? Tak, bardzo! Wybory dotyczące sposobu zarządzania danymi są absolutnie fundamentalne i nie ma „najlepszych praktyk” uchylających się od decyzji. Musisz zrozumieć swoje szczególne wymagania.

Istnieje fundamentalne napięcie:

Jedna kopia: spójność jest łatwa, ale jeśli zdarzy się, że spadnie, wszyscy są poza wodą, a jeśli ludzie są daleko, mogą zapłacić straszne koszty komunikacji. Umieść na zdjęciu urządzenia przenośne, które mogą wymagać odłączenia, a jedna kopia go nie przytnie.

Master Slave: spójność nie jest zbyt trudna, ponieważ każdy element danych ma dokładnie jednego właściciela. Ale co zrobisz, jeśli nie możesz zobaczyć tego mistrza, potrzebna jest jakaś odłożona praca.

Mistrz-mistrz: cóż, jeśli możesz sprawić, że to zadziała, to wydaje się, że oferuje wszystko, nie ma pojedynczego punktu awarii, każdy może pracować przez cały czas. Problem polega na tym, że bardzo trudno jest zachować absolutną spójność. Więcej informacji znajdziesz w artykule na Wikipedii .

Wikipedia wydaje się mieć fajne podsumowanie zalet i wad

Zalety

  • Jeśli jeden master zawiedzie, inni będą kontynuować aktualizację bazy danych.

  • Masters mogą być zlokalizowane w kilku fizycznych lokalizacjach, tj. Rozproszone w całej sieci.

Niedogodności

  • Większość systemów replikacji typu multi-master jest tylko luźno spójnych, tj. Leniwych i asynchronicznych, co narusza właściwości ACID.

  • Systemy chętnej replikacji są złożone i wprowadzają pewne opóźnienia w komunikacji.

  • Problemy, takie jak rozwiązywanie konfliktów, mogą stać się nie do rozwiązania, gdy liczba zaangażowanych węzłów wzrasta, a wymagane opóźnienie maleje.

djna
źródło
CouchDB używa MVCC. Czy tego rodzaju rozwiązanie rozwiązuje problem ze spójnością napotykany przez wiele modułów głównych, gdy jeden z nich ponownie włączyłem do trybu online, system wersjonowania obsługuje spójność, a ten element główny otrzyma prawidłowe zaktualizowane dane.
never_had_a_name
8
Ale co się stanie, gdy dwóch użytkowników zrobi coś sprzecznego - na przykład dwóch użytkowników spróbuje kupić ostatni przedmiot w magazynie? Wyobraź sobie scenariusz, w którym mamy dwóch masterów, a każdy użytkownik uderza innego mastera, a potem pojawia się jakiś błąd komunikacyjny - w końcu będzie albo kompromis w zakresie integralności, albo ograniczona dostępność - jeden z użytkowników słyszy „przepraszam kolego, Naprawdę nie wiem, co się dzieje, dopóki nie porozmawiam z drugim mistrzem ”lub mamy okropny konflikt po przywróceniu łączności - a to może się naprawdę skomplikować.
djna
2
Czego używają transakcje finansowe lub giełdy? Czy cały czas borykają się z tym problemem?
CMCDragonkai
3
Tam, gdzie potrzebujesz pojedynczej aktualizacji „prawdy” (jak w systemach finansowych), potrzebujesz Master / Slave lub po prostu Master. Tam, gdzie możesz później naprawić prawdę (pomyśl o konfliktach scalania w systemie kontroli wersji, takim jak Git), możesz użyć Master / Master.
djna
djna czyni bardzo istotną obserwację. Baza danych musi teraz mieć jakąś logikę „rozstrzygającą”. Co jest najważniejsze? Najnowsze dane? Ma to sens, jeśli ponownie zapisujesz pole, ale nie ma sensu, jeśli wykonujesz „licznik” i potrzebujesz, aby wszystkie procesy zwiększały (lub zmniejszały) przed zwróceniem wyniku. Zwłaszcza, że ​​nie sprzedajesz produktów, których nie ma na stanie. Jeśli masz partycję sieciową, co się stanie, gdy się z powrotem połączy? Wszystko to jest kwestią teorii CAP. W tym miejscu możesz mieć algorytmy takie jak Paxos, aby wypracować konsensus między różnymi maszynami.
Peter Corless
95

Podczas badania różnych architektur baz danych. Zebrałem sporo informacji, które mogą być przydatne dla kogoś innego prowadzącego badania w przyszłości. przeszedłem przez

  1. Replikacja typu master-slave
  2. Replikacja typu master-master
  3. Klaster MySQL

Zdecydowałem się zadowolić użyciem MySQL Cluster w moim przypadku użycia. Prosimy jednak o zapoznanie się z różnymi zaletami i wadami, które zestawiłem poniżej

1. Replikacja typu master-slave

Plusy

  • Aplikacje analityczne mogą odczytywać dane z urządzeń podrzędnych bez wpływu na urządzenie główne
  • Kopie zapasowe całej bazy danych, które stosunkowo nie mają wpływu na master
  • Slaves może zostać przełączony w tryb offline i zsynchronizowany z powrotem do mastera bez żadnych przestojów

Cons

  • W przypadku niepowodzenia niewolnik musi zostać awansowany na pana, aby zająć jego miejsce. Brak automatycznego przełączania awaryjnego
  • Przestój i możliwa utrata danych w przypadku awarii urządzenia głównego
  • Wszystkie zapisy muszą być również wykonane do mastera w układzie master-slave
  • Każdy dodatkowy slave dodaje trochę obciążenia do mastera, ponieważ dziennik binarny musi zostać odczytany, a dane skopiowane do każdego slave'a
  • Może być konieczne ponowne uruchomienie aplikacji

2. Replikacja typu master-master

Plusy

  • Aplikacje mogą czytać od obu mistrzów
  • Rozkłada obciążenie zapisu na oba węzły główne
  • Proste, automatyczne i szybkie przełączanie awaryjne

Cons

  • Luźno spójne
  • Konfiguracja i wdrażanie nie jest tak proste, jak master-slave

3. Klaster MySQL

Nowy dzieciak w mieście oparty na projekcie klastra MySQL. Klaster MySQL został opracowany z myślą o wysokiej dostępności i skalowalności i jest idealnym rozwiązaniem do wykorzystania w środowiskach, które nie wymagają przestojów, wysokiej dostępności i skalowalności poziomej.

Aby uzyskać więcej informacji, zobacz MySQL Cluster 101

Plusy

  • (Wysoka dostępność) Brak pojedynczego punktu awarii
  • Bardzo duża przepustowość
  • 99,99% czasu sprawności
  • Automatyczne dzielenie na fragmenty
  • Responsywność w czasie rzeczywistym
  • Operacje on-line (zmiany schematu itp.)
  • Rozproszone pisma

Cons

Możesz odwiedzić mój blog, aby zapoznać się z pełnym opisem, w tym diagramami architektury, które zawierają dalsze szczegóły dotyczące trzech wspomnianych architektur.

Skillachie
źródło
2
Czy możesz też napisać coś o Galerze? Klaster Percona XtraDB?
Iwanow
„Może być konieczne ponowne uruchomienie aplikacji” jako część wad. Co to znaczy?
Lily
1
Jeśli musisz zmienić adres IP serwera DB, należy go również skonfigurować w aplikacji, aby móc czytać z nowo wybranego mastera. W rezultacie może być konieczne ponowne uruchomienie aplikacji, aby wybrać nowe ustawienia konfiguracji. Wszystko zależy od aktualnej konfiguracji. Możesz również użyć pływającego adresu IP, aby to ominąć.
Żeby