Baza na wzór macierzy

C-JDBC 1.0 to oprogramowanie open source pozwalające na tworzenie klastrów na poziomie baz danych zgodnych z JDBC 2.0.

C-JDBC 1.0 to oprogramowanie open source pozwalające na tworzenie klastrów na poziomie baz danych zgodnych z JDBC 2.0.

Klastry to zwykle rozwiązania działające na poziomie systemu operacyjnego. Wysoką dostępność i dużą wydajność można jednak osiągnąć na wiele sposobów - np. na poziomie bazy danych. Przykładem takiego rozwiązania jest C-JDBC (Clustered Java DataBase Connectivity) - specjalny sterownik JDBC zapewniający w świecie baz danych funkcjonalność analogiczną do tej, jaką realizują macierze RAID w środowisku pamięci masowych.

Inteligentny pośrednik

Baza na wzór macierzy

C-JDBC ukrywa rzeczywistą strukturę baz

C-JDBC pozwala na połączenie dowolnej liczby różnych motorów baz danych (w wersji 1.0 C-JDBC obsługuje MySQL, PostgreSQL i Oracle) w jedną, wirtualną bazę danych. Do komunikacji między C-JDBC a aplikacjami klienckimi Java wykorzystuje sterownik zgodny z JDBC 2.0. Sterownik ten, posługując się mechanizmami RMI (Remote Method Invocation), komunikuje się z kontrolerem C-JDBC, który dystrybuuje zapytania do docelowych systemów bazodanowych. Oprócz zapewnienia połączenia i rozkładania obciążenia pomiędzy dostępne bazy danych, kontroler przechowuje często pobierane zestawy danych w celu przyspieszenia odczytu.

Będący częścią C-JDBC moduł Authorization Manager pośredniczy jedynie w logowaniu za pomocą standardowych mechanizmów dostarczanych wraz z motorami baz. W efekcie użytkownik musi mieć możliwość zalogowania się do wszystkich baz, z których będzie korzystać. W praktyce wymaga to albo ujednolicenia uprawnień użytkownika dla wszystkich baz, albo też zastosowania zewnętrznego mechanizmu jednokrotnego logowania.

Aby zapewnić odpowiedni poziom izolacji transakcji, autorzy C-JDBC stworzyli mechanizm uporządkowujący żądania dostępu tzw. scheduler. Może on grupować następujące po sobie operacje zapisu, dzięki czemu do bazy jest wysyłana jedna większa "paczka" transakcji, co przekłada się na wzrost wydajności. C-JDBC jest w praktyce implementacją środowiska rozproszonych transakcji. W związku z tym konieczne było stworzenie zewnętrznego w stosunku do baz logu transakcji, aby zachować wszystkie polecenia zapisu, zanim zostaną zapisane przez motory docelowe. Log może być zwykłym plikiem tekstowym lub też mieć formę tabeli w dedykowanej bazie danych.

C-JDBC może być zastosowany jako mechanizm przyspieszający działanie dynamicznych witryn internetowych zasilanych z bazy danych. W takich zastosowaniach przeważają operacje odczytu. W klasycznych systemach transakcyjnych zapisów jest znacznie więcej - niejednokrotnie nawet powyżej 30% łącznej liczby transakcji. W tej sytuacji mechanizm kontroli transakcji rozproszonych C-JDBC może okazać się wąskim gardłem, ponieważ do synchronizacji transakcji między kontrolerem C-JDBC a docelową bazą/bazami jest wykorzystywany "zwykły" algorytm dwufazowego potwierdzania. Autorzy są przekonani, że dwufazowego potwierdzania można uniknąć, jednak w tym przypadku można mówić jedynie o scenariuszu "tylko do odczytu".

Aby zwiększyć wydajność kontrolera, zapisy mogą być wykonywane asynchronicznie - kontroler potwierdza klientowi, że zapis został wykonany, choć w rzeczywistości odbywa się to z pewnym opóźnieniem. Już sam fakt, że zapisy są rozpraszane na wiele baz, powoduje, iż spada ryzyko zakleszczania się bazy na poziomie strony czy rekordu, co jest najczęstszą przyczyną problemów z wydajnością.

Lustra i paski

Środowisko C-JDBC można skonfigurować na kilka sposobów. W przypadku wybrania opcji RAIDb-0, tuż po uruchomieniu, serwer C-JDBC łączy się z poszczególnymi bazami i kopiuje ich schematy. Dzięki temu zawarty w kontrolerze C-JDBC mechanizm wyrównywania obciążeń będzie kierował zapytanie od razu do właściwej tabeli bazy docelowej. Przyjmuje się tu założenie, że każda tabela ma unikalną nazwę w ramach całego klastra C-JDBC. Przypomina to układ paskowy (striping) w dyskach RAID, w którym porcja informacji jest dzielona na mniejsze części i "rozrzucana" pomiędzy dostępne napędy. Striping to zabieg przyspieszający odczyt zarówno w przypadku dysków, jak i baz danych. O szybkości zapisów decyduje w tym przypadku szybkość zapisu do najmniej wydajnej bazy.

Druga opcja konfiguracyjna to RAIDb-1, która funkcjonalnie odpowiada stosowanemu w systemach dyskowych odbiciu lustrzanemu (mirroring). Ponieważ w tym układzie każda baza danych podłączona do klastra C-JDBC zawiera pełną kopię danych, przy odczycie informacji można wybrać tę z nich, która jest najmniej obciążona. W obecnej wersji C-JDBC zaimplementowane są algorytmy round-robin (w tym również ważony) oraz taki, gdzie jest wybierany węzeł, do którego kierowano dotychczas najmniej zapytań. Niestety, przynajmniej na razie, nie ma w C-JDBC algorytmu optymalizacji, który brałby pod uwagę stopień skomplikowania zapytań SQL.

W przypadku opcji RAIDb-1 zapis musi być wykonany na wszystkich bazach. Scheduler C-JDBC uporządkowuje operacje, aby usunąć konflikty.

Trzeci typ konfiguracji C-JDBC - RAIDb-2 - łączy cechy RAIDb-0 i RAIDb-1, co przypomina RAID 1+0. Tabele są rozrzucane pomiędzy kilka instalacji motorów bazodanowych, ale dodatkowo także zwielokrotniane, tak aby każda tabela była umieszczona na co najmniej dwóch serwerach.

W tym trybie kontroler C-JDBC można skonfigurować w taki sposób, aby nie czekał, aż dane zostaną zapisane na wszystkich kopiach, lecz potwierdzał zapis do aplikacji po potwierdzeniu zapisu przez jedną bazę. Sposób "rozrzucania" tabel pomiędzy poszczególne węzły jest definiowany przez odpowiednie tzw. polityki (policy).

Czekając na wersję 2.0

Obecna wersja C-JDBC (wersja 1.0) ma pewne ograniczenia. Jednym z nich jest wymaganie, by bazy danych w momencie uruchomienia instalacji były spójne. Innymi słowy klaster C-JDBC samodzielnie nie wypełni początkowego klastra. Może to powodować problemy zwłaszcza w razie awarii jednego z węzłów. W tym przypadku jest konieczne wyłączenie wszystkich baz, ich synchronizacja i dopiero ponowne uruchomienie. Już choćby z tego powodu zarządzanie tradycyjnymi klastrami pozostanie znacznie łatwiejsze.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200