W przeszłości, gdy chcieliśmy przechowywać więcej danych lub zwiększyć naszą moc obliczeniową, powszechną opcją było skalowanie w pionie (uzyskać maszyny o większej mocy) lub dalsza optymalizacja przeważającej bazy kodu. Jednakże, wraz z postępem w systemach wieloprocesorowych i rozproszonych, częstsze jest rozszerzanie się w poziomie, lub posiadanie większej liczby maszyn, które próbują wykonać równoważne zadanie równolegle. W ramach projektu Apache zobaczymy już kilka narzędzi do manipulacji wiedzą, takich jak Spark, Hadoop, Kafka, Zookeeper i Storm. Jednak, aby skutecznie wybrać narzędzie do wyboru, ważna jest podstawowa koncepcja CAP Theorem. CAP Theorem może być koncepcja, że system rozproszonych baz danych może mieć tylko 2 z 3: Spójność, Dostępność i Tolerancja Przegród.

https://miro.medium.com/max/400/1*WPnv_6sG9k4oG3S1A09MDA.jpeg

Twierdzenie CAP jest niezwykle ważne w świecie Big Data, zwłaszcza gdy musimy dokonać kompromisu pomiędzy tymi trzema, poparł nasz unikalny przypadek zastosowania. Na tym blogu będę mógł spróbować wyjaśnić każdą z tych koncepcji, a tym samym przyczyny kompromisu. Będę mógł uniknąć korzystania z konkretnych przykładów, ponieważ DBMS szybko się rozwija.

Tolerancja partycji

https://miro.medium.com/max/731/1*qVoJNWH1osbrnOizRivF1A.png

Warunek ten oznacza, że system działa nadal, mimo że ilość komunikatów jest opóźniona przez sieć pomiędzy węzłami. System, który jest tolerancyjny na partycje, może wytrzymać każdą ilość awarii sieci, która nie kończy się awarią całej sieci. Zapisy danych są wystarczająco replikowane w kombinacjach węzłów i sieci, aby utrzymać system w stanie gotowości w przypadku przerw w pracy. Podczas pracy z nowoczesnymi systemami rozproszonymi tolerancja partycji nie wchodzi w grę. To konieczność. Dlatego musimy handlować pomiędzy Spójnością i Dostępnością.

Wysoka Spójność

https://miro.medium.com/max/864/1*UnG2G7_h0kqI9IHtnUk3qg.png

Warunek ten stwierdza, że każdy z węzłów widzi równoważne dane w równoważnym czasie. Mówiąc prościej, wykonanie operacji odczytu zwróci wartość największej z ostatnich operacji zapisu, powodując, że wszystkie węzły zwrócą równoważne dane. System ma spójność, jeśli transakcja rozpoczyna się z systemem w stanie zgodnym, a kończy z systemem w stanie zgodnym. Podczas tego modelu, system może (i robi) przejście w stan niespójny podczas transakcji, ale cała transakcja zostaje cofnięta, jeśli wystąpi błąd na którymś z etapów procesu. W ramach obrazu mamy 2 różne rekordy (“Bulbasaur” i “Pikachu”) w różnych znacznikach czasowych. Wyjściem na trzeciej partycji jest “Pikachu”, najnowsze wejście. Węzły będą jednak potrzebowały czasu na aktualizację i nie mogą być dostępne w sieci tak często.

Wysoka dostępność

https://miro.medium.com/max/841/1*ABrjUrZAY6V1hEkFPYvC7A.png

Warunek ten oznacza, że każde żądanie otrzyma odpowiedź w przypadku powodzenia/niepowodzenia. Osiągnięcie dostępności w systemie rozproszonym wymaga, aby system działał przez 100% czasu. Każdy klient otrzymuje odpowiedź, bez względu na stan węzła osobowego w systemie. Ta metryka jest trywialna do zmierzenia: albo wyślesz polecenia odczytu/zapisu, inaczej nie możesz. Dlatego bazy danych są niezależne od czasu, ponieważ węzły muszą być dostępne online w najmniejszym możliwym czasie. Sugeruje to, że w przeciwieństwie do poprzedniego przykładu, nie wiemy czy najpierw dodano “Pikachu” czy “Bulbasaur”. Wyjście może być albo jedno, albo drugie. Dlatego też wysoka dostępność nie jest możliwa w przypadku analizy danych strumieniowych z dużą częstotliwością.

Wniosek

Systemy rozproszone pozwalają nam na osiągnięcie poziomu mocy obliczeniowej i dostępności, które po prostu nie były dostępne w przeszłości. Nasze systemy charakteryzują się wyższą wydajnością, mniejszymi opóźnieniami i prawie 100% czasem pracy w centrach danych na całym świecie. Co więcej, dzisiejsze systemy działają na sprzęcie towarowym, który jest łatwo dostępny i konfigurowalny po przystępnych kosztach. Istnieje jednak cena. Systemy rozproszone są bardziej złożone niż ich jednosieciowe odpowiedniki. Zrozumienie złożoności systemów rozproszonych, dokonanie akceptowalnych kompromisów dla danego zadania (CAP) i wybór odpowiedniego narzędzia do pracy jest ważne przy skalowaniu poziomym.