Ten krótki artykuł ma na celu przybliżenie problemów, jakie mogą się pojawić, gdy chcemy zastosować replikację baz MySQL - wbrew pozorom, trochę tych problemów jest. Postaramy się też wyprostować pewne błędne przekonania co do niektórych cech replikacji.
Replikacja to jedno ze słów-kluczy, które pojawiają się na spotkaniach programistów, kierownictwa czy też działu zarządzania firm zajmujących się tworzeniem i utrzymaniem działania serwisu internetowego. Zazwyczaj słowo to ma pozytywne konotacje - kojarzy się z nowoczesnymi rozwiązaniami, wysoką dostępnością, bezpieczeństwem, możliwością rozwoju serwisu. Prowadzi to często do sytuacji - analogicznie zresztą, jak w przypadku innych „głośnych” technologii, jak sharding, NoSQL, cloud computing - w której podjęta zostaje decyzja o zastosowaniu danego rozwiązania bez świadomości, że chwytliwa nazwa to jedno, a faktyczne możliwości i ograniczenia to drugie. Często ograniczenia te pojawiają się dopiero w późniejszym etapie, w momencie gdy projekt jest na tyle zaawansowany, że trudno już wrócić do deski kreślarskiej i fazy projektowania.
Jeśli decydujemy się na wdrażanie projektu opartego na jakiejś technologii, podstawową sprawą jest to, żeby choć jedna osoba wiedziała, na czym ta cała technologia polega. To tyczy się także replikacji. Nie mówimy tu o szczegółach wewnętrznych rozwiązań stosowanych przez MySQL, ale o naprawdę podstawowych podstawach.
Tego typu informacje są niezbędne, aby podejmować pewne decyzje na etapie projektu.
Dalszy etap to dokładne zrozumienie potrzeb własnego serwisu. Co konkretnie chcemy osiągnąć? Większą wydajność, możliwość obsłużenia większej ilości jednoczesnych wizyt na stronie? Bezpieczeństwo serwisu, zapewnienie możliwości funkcjonowania serwisu w razie awarii jednego z serwerów MySQL? Jeśli koncentrujemy się na wydajności, to w czym jest problem? Zapytania typu SELECT czy też zapytania modyfikujące dane? Czy serwis jest w stanie zaakceptować to, że część danych będzie nieaktualna, opóźniona o kilka-kilkadziesiąt sekund?
Odpowiedzi na te pytania są niezbędne, aby ustalić, jak ma działać serwis, jaki sprzęt trzeba kupić, ile tego sprzętu potrzeba. Przykładowo, załóżmy, że chcemy zapewnić dostępność serwisu w sieci na wypadek awarii jednej z maszyn. W tej sytuacji trzeba pamiętać o zakupie takiej ilości serwerów, żeby ich wystarczyło, nawet gdy jeden z nich nie będzie działał. Obciążenie rozłoży się na pozostałe maszyny, ale to już głowa projektanta w tym, aby miały one wystarczające zasoby, aby to obciążenie przejąć. Inny przykład - jeśli serwis często modyfikuje bazę danych, trzeba się upewnić, że serwer slave, który z definicji jest mniej wydajny w tego typu operacjach (na serwerze master dane mogą być modyfikowane równolegle w wielu wątkach, na serwerze slave modyfikacje są wprowadzane tylko przez jeden wątek), będzie w stanie nadążyć za serwerem master. Trzeba także wziąć pod uwagę, że w związku z chwilowymi opóźnieniami w wprowadzaniu modyfikacji serwer slave będzie zawierał nieaktualną wersję danych. Serwis musi zostać napisany tak, aby był w stanie obsłużyć tego typu sytuację. Jeśli taka sytuacja jest niedopuszczalna, to trzeba kupić mocniejszy serwer slave, tak aby był w stanie nadążyć za zmianami danych i problem ten nie występował.
Etap projektowania mamy za sobą. W trakcie tworzenia serwisu opartego o replikowaną bazę danych trzeba jednak pamiętać o kolejnych elementach. Podstawowa sprawa - w jaki sposób ma zostać obsłużona awaria jednego z serwerów? Czy stosujemy jakiegoś rodzaju wirtualny adres IP, który będzie przenoszony pomiędzy serwerami na wypadek awarii jednego z nich, czy też może obsługa realizowana będzie po stronie aplikacji, która sama wykryje brak połączenia do danego serwera i odpowiednio rozłoży ruch pomiędzy pozostałymi serwerami bazodanowymi?
W jaki sposób serwis zachowa się, jeśli awarii ulegnie serwer master? Kolejne, nawet ważniejsze pytanie - czy serwis będzie umiał obsłużyć sytuację, gdy serwer master ulegnie awarii, a potem ponownie zacznie funkcjonować? Jeśli na czas awarii ruch został przepięty na inny serwer, to stary serwer master nie zawiera aktualnych danych - nie wolno ponownie przenosić na niego ruchu, bo zrobi się poważne zamieszanie.
Powyższe to tylko wierzchołek góry lodowej, jeśli chodzi o projektowanie serwisu opartego na replikacji. Bez osoby zaznajomionej z tematem trudno jest przygotować serwis, który faktycznie będzie się dobrze skalował i nie będą się pojawiały problemy z jego wdrożeniem i funkcjonowaniem. Dobrze jest przed rozpoczęciem tworzenia serwisu skontaktować się z administratorami, którzy będą czuwać nad serwerami, szczególnie jeśli wśród nich jest także administrator baz danych. Każda firma hostingowa, każdy administrator ma pewną specyfikę działania, pewne przetestowane i wdrożone rozwiązania. Administratorzy mają doświadczenie w różnego rodzaju wdrożeniach i są na bieżąco z tzw. „dobrymi praktykami”.
Opisane w tym artykule przykłady dają pojęcie, dlaczego takie wsparcie jest ważne - pewne decyzje trzeba podejmować już na bardzo wczesnym etapie. Dobrze jest mieć wtedy możliwość skonsultowania się ze specjalistą.
Autor: Krzysztof Książek, Administrator Sieci w Kei.pl
Aktualności
|
Porady
|
Gościnnie
|
Katalog
Bukmacherzy
|
Sprawdź auto
|
Praca
biurowirtualnewarszawa.pl wirtualne biura w Śródmieściu Warszawy
Artykuł może w treści zawierać linki partnerów biznesowych
i afiliacyjne, dzięki którym serwis dostarcza darmowe treści.
*
|
|
|
|
|
|