Celowana synchronizacja dzięki izolacji katalogów
W wielu systemach dane wszystkich użytkowników trafiają do jednej, centralnej bazy. Choć jest to wygodne z punktu widzenia zarządzania, niesie ze sobą istotne ryzyko. W przypadku uszkodzenia bazy lub awarii problem może objąć cały system i przerwać działanie usług dla wszystkich użytkowników. Co więcej, odzyskiwanie i diagnozowanie takich sytuacji bywa złożone i czasochłonne.
Dlatego MailPlus stosuje inne podejście. Zamiast monolitycznego repozytorium użytkowników, dane poczty i ustawienia każdego użytkownika są przechowywane w osobnym katalogu. Katalogi te są zarządzane indywidualnie. Metadane mogą być nadal indeksowane lub śledzone przez centralny komponent w celu zwiększenia wydajności, ale kluczowe dane pocztowe i pliki użytkownika pozostają odseparowane.
Takie podejście daje dwie istotne korzyści:
- Ograniczenie zakresu potencjalnej awarii: jeśli skrzynka jednego użytkownika ulegnie uszkodzeniu lub pojawi się problem z synchronizacją, nie wpływa to na pozostałych użytkowników.
- Precyzyjna synchronizacja: gdy zmieniają się dane konkretnego użytkownika, na przykład pojawia się nowa wiadomość lub aktualizacja ustawień, synchronizujemy wyłącznie ten wycinek danych pomiędzy serwerami. Dzięki temu nie ma potrzeby przenoszenia całego zbioru poczty, co pozwala utrzymać wydajność nawet przy rosnącej liczbie użytkowników i wolumenie wiadomości.
Synchronizacja oparta na zadaniach i uporządkowanych kolejkach
Wydajność i dokładność synchronizacji w dużej mierze zależą od sposobu, w jaki zmiany są rejestrowane i przetwarzane. Zamiast klasycznej replikacji danych w czasie rzeczywistym, MailPlus HA stosuje podejście oparte na zadaniach. Każda zmiana jest wychwytywana, zamieniana na zadanie i umieszczana w uporządkowanej kolejce synchronizacji.
Każda operacja w skrzynce pocztowej, taka jak odebranie nowej wiadomości, przeniesienie e-maila czy usunięcie folderu, jest zapisywana jako osobne zadanie. Zadania te są przetwarzane sekwencyjnie, a oba serwery wymieniają się aktualizacjami i potwierdzają ich poprawne zastosowanie, zanim przejdą do kolejnego kroku.
Takie podejście pomaga również w obsłudze konfliktów synchronizacji. Jeśli na przykład chwilowy problem z siecią sprawi, że użytkownicy będą jednocześnie korzystać z obu serwerów, mogą pojawić się sprzeczne zmiany, na przykład ten sam e-mail zostanie przeniesiony do dwóch różnych lokalizacji. MailPlus rozstrzyga takie sytuacje na podstawie kombinacji znaczników czasu oraz kolejności zadań, wybierając działanie, które ma pierwszeństwo, i zapewniając spójny wynik.
Śledząc wyłącznie rzeczywiste zmiany i zachowując ich właściwą kolejność, MailPlus zapewnia synchronizację, która jest jednocześnie wydajna i niezawodna, bez zbędnego narzutu i bez utraty spójności danych.
Odzyskiwanie po split-brain: samonaprawa i uzgadnianie danych
Split-brain to jeden z najbardziej krytycznych scenariuszy awarii w klastrach wysokiej dostępności. Dochodzi do niego wtedy, gdy połączenie między dwoma serwerami zostaje przerwane, ale oba nadal działają. W takiej sytuacji każdy z nich traci możliwość wykrycia drugiego i może błędnie uznać, że to on powinien pełnić rolę aktywnego węzła. W efekcie powstają dwa „główne” serwery, które niezależnie przyjmują nowe wiadomości i przetwarzają działania użytkowników.
Gdy połączenie zostaje przywrócone, pojawia się problem niespójnych danych między serwerami. Konflikty mogą dotyczyć tych samych wiadomości lub operacji wykonanych równolegle, co w skrajnych przypadkach prowadzi do trudnych do odtworzenia rozbieżności, a nawet utraty danych.
Debata: prewencja kontra naprawa
Tradycyjne podejście do zapobiegania split-brain opiera się na zewnętrznych mechanizmach, takich jak serwer obserwujący (tzw. witness) czy reguły oparte na kworum, które decydują, który serwer ma pozostać w roli aktywnej. Choć takie rozwiązania są skuteczne w wielu scenariuszach, zwiększają złożoność architektury i wprowadzają dodatkowe potencjalne punkty awarii. Przykładowo, jeśli serwer witness przestanie działać, odporność całego systemu może zostać osłabiona.
MailPlus podchodzi do tego problemu w sposób warstwowy. Oprócz mechanizmów zapobiegających konfliktom, wprowadza również wbudowaną logikę ich rozwiązywania w momencie, gdy do niespójności już dojdzie. Ten dodatkowy mechanizm bezpieczeństwa działa jak zabezpieczenie awaryjne, zapewniając spójność danych nawet wtedy, gdy działania prewencyjne nie są w stanie w pełni ochronić systemu.
Spójność danych dzięki uzgadnianiu zmian świadomemu kontekstowi
Nasze podejście opiera się na dwukierunkowym mechanizmie uzgadniania danych, który bezpiecznie rozwiązuje zmiany po wystąpieniu zdarzenia split-brain.
Automatyczne przypisanie ról
Podczas konfiguracji MailPlus HA system zapisuje odpowiednie metadane na obu serwerach, aby określić ich priorytet. Oba węzły aktywnie obsługują dostarczanie poczty, jednak tylko serwer pierwotny może modyfikować ustawienia systemowe. W przypadku utraty połączenia serwer wtórny kontynuuje dostarczanie wiadomości, jednocześnie przechodząc w tryb tylko do odczytu dla konfiguracji. Po przywróceniu łączności system automatycznie przywraca pierwotnie przypisaną rolę serwera głównego.
Porównanie różnic
Zamiast nadpisywania danych jednego serwera danymi drugiego, system przeprowadza analizę różnic. Porównuje zmiany po obu stronach, uwzględniając działania użytkowników takie jak nowe wiadomości, usunięcia czy przenoszenie e-maili. Na tej podstawie identyfikuje unikalne dane istniejące na każdym z serwerów.
Uzgadnianie danych
Następnie system dokonuje uzgodnienia zmian w sposób, który pozwala zachować wszystkie poprawne dane użytkowników. Przykładowo, jeśli serwer A wskazuje, że wiadomość została usunięta, a serwer B rejestruje odpowiedź na tę wiadomość, odpowiedź zostaje zachowana. Podobnie, jeśli oba serwery niezależnie odebrały nowe wiadomości w czasie rozdzielenia, wszystkie zostają uwzględnione. Takie podejście pozwala uniknąć utraty istotnych informacji i utrzymać spójność danych.