2 Główne definicje oraz założenia projektowe


2.1 Wprowadzenie
2.2 Cechy technologii klastrowej
2.3 Wirtualizacja zasobów systemu
2.4 Odciążenie klienta kosztem serwera
2.5 Podsumowanie


2.1 Wprowadzenie

Celem tego rozdziału jest przedstawienie głównych założeń projektowych systemu V3 i kilku najważniejszych definicji, niezbędnych w dalszej dyskusji. 

W punkcie 2.2 omawiamy wykorzystanie technologii klastrowej, począwszy od podania formalnej definicji systemu klastrowego, a skończywszy na wymienieniu własności, jakie taki system powinien posiadać i kilku głównych ograniczeń. Właśnie te bardzo ogólne własności i ograniczenia stanowią jakby meta-założenia projektowe dla systemu V3. Nie wszędzie udało się zrealizować wszystkie z nich, ale większość przynajmniej częściowo. W kolejnych rozdziałach pracy, przy omawianiu kolejnych zagadnień, będziemy pisać bardziej szczegółowo o konsekwencjach tych meta-założeń. 

Dalej (punkt 2.3) piszemy o wirtualizacji zasobów jako sposobie na zapewnienie podstawowych własności wymienionych w 2.2.1. Od ogólnej koncepcji wirtualizacji przechodzimy do dyskusji wirtualnych wolumenów, które są sposobem jej realizacji. Oprócz definicji i własności wirtualnych wolumenów omawiamy również koncepcję zarządcy wirtualnych wolumenów, czyli pewnego modelu architektury systemu, który może być podstawą implementacji wirtualnych wolumenów i który jest z powodzeniem stosowany w praktyce w wielu systemach nieklastrowych. 

Punkt 2.4 zawiera omówienie dodatkowego założenia, które dodano w rezultacie eksperymentów z wykorzystaniem systemu w serwerach bazodanowych. Okazuje się, że bardzo opłacalne jest odciążanie maszyny klienta kosztem umieszczenia większej funkcjonalności i skupienia przetwarzania na węzłach serwera. Idea ta stoi niejako w sprzeczności z dotychczasowym trendem w projektowaniu systemów, jednak swoje uzasadnienie znajduje właśnie w cechach technologii klastrowej.

2.2 Cechy technologii klastrowej

Wykorzystanie technologii klastrowej wiąże się z pewnymi ograniczeniami, ale też z licznymi korzyściami. Chcąc właściwie wykorzystać wszystkie zalety tej technologii w ramach narzucanych przez nią ograniczeń musimy wyposażyć projektowany system w szereg własności, o których będzie mowa w punkcie 2.2.3. Musimy także wziąć pod uwagę kilka ograniczeń, o których piszemy w punkcie 2.2.2.2.

2.2.1 Definicja systemu klastrowego

2.2.1.1 System klastrowy jako system rozproszony

Ścisła definicja klastra (systemu klastrowego, ang. cluster system) do dziś jest przedmiotem sporów między specjalistami w dziedzinie systemów rozproszonych. Większość definicji ma jednak sporo punktów wspólnych.

Najczęściej klaster definiuje się jako system rozproszony posiadający dwie cechy.

Oprócz wymienionych wyżej postulatów definiujących pojęcie klastra można wymienić także szereg cech, które są bardzo pożądane w każdym systemie klastrowym, a zarazem trudne do osiągnięcia w systemach nieklastrowych (patrz 2.2.3).

2.2.1.2 System klastrowy a wewnątrzklastrowa sieć

Określenie klaster bywa stosowane w dwóch różnych kontekstach. Problem ze ścisłym ustaleniem terminologii wynika z faktu, że technologia wykorzystana w komunikacji między węzłami systemu klastrowego zazwyczaj jest droga i sieć łącząca węzły jest siecią wewnętrzną, tworem analogicznym do sieci zasobów (SAN, patrz 1.1) łączącej dyski i serwery plików w tradycyjnych systemach. Komputery połączone taką siecią stanowią więc zazwyczaj jeden spójny system udostępniający usługi użytkownikom (stacjom roboczym) już za pośrednictwem zwykłej20 sieci  Ethernet. Dosyć naturalna jest w tej sytuacji tendencja, aby pojęcie całej sieci wykorzystanej w międzywęzłowej komunikacji, ze wszystkimi podłączonymi do tejże sieci komputerami, utożsamiać z klastrem jako jednym, spójnym systemem.

Zarazem czasem bywa tak, że sieć łącząca węzły serwera łączy jednocześnie serwer z klientami. Tak jest na przykład w systemie V3, dedykowanym do udostępniania zasobów dyskowych klientom podłączonym do tej samej sieci lokalnej Giganet. Serwery plików, baz danych i serwery aplikacji podłączone do tej wspólnej sieci Giganet można tu traktować po prostu jako klientów serwera wirtualnych urządzeń blokowych, a z logicznego punktu widzenia fakt, że ta sama sieć fizycznych połączeń została wykorzystana jako sieć wewnątrzserwerowa oraz jako medium łączące klientów z serwerem, nie ma większego znaczenia.

W dalszej części pracy będziemy używać terminu klaster zarówno w odniesieniu do systemu składowania danych jako spójnej całości w obrębie większej sieci (obejmującej też np. bazę danych, serwer aplikacji etc.), jak też w odniesieniu do całej tej sieci, łączącej system składowania danych z klientami tego systemu (serwerami baz danych, aplikacji etc.).          W miarę możliwości będziemy jednak unikać dwuznaczności i używać w pierwszym z powyższych przypadków słowa serwer, rezerwując termin klaster na oznaczenie całej sieci.

2.2.2 Główne zalety, wady i ograniczenia technologii klastrowej

Poniżej wymieniamy niektóre z zalet, wad i ograniczeń technologii klastrowej wybrane pod kątem istotności z punktu widzenia budowy systemów składowania danych.

2.2.2.1 Główne zalety i korzyści

Oto główne zalety technologii klastrowej i korzyści z jej stosowania dla systemów składowania danych.

Niektóre z wyżej wymienionych zalet, przede wszystkim wirtualizacja zasobów dyskowych, programowo implementowane organizacje RAID czy też spójne zarządzanie zasobami, możliwe są również w tradycyjnych systemach dzięki tzw. zarządcom wolumenów21 (oprogramowaniu zintegrowanemu z systemem operacyjnym, które, podobnie, jak w systemach klastrowych, pośredniczy między aplikacją a fizycznymi urządzeniami). Stworzone w ten sposób wirtualne zasoby są jednak dostępne jedynie lokalnie na serwerze, na którym działa wspomniane oprogramowanie i mogą być konstruowane jedynie w oparciu o urządzenia bezpośrednio (poprzez interfejs SCSI czy też jako NAS) podłączone do danego serwera. Udostępnienie takich zasobów pozostałym serwerom może opierać się na tradycyjnych rozwiązaniach, takich jak np. dzielone dyski czy katalogi w systemie Windows NT. Wszystkie te rozwiązania łączy jednak niska wydajność, w większości zastosowań nieakceptowalna.

2.2.2.2 Główne wady i ograniczenia

Oto niektóre wady i ograniczenia związane z wykorzystaniem technologii klastrowej.

2.2.3 Własności dobrze zaprojektowanego systemu klastrowego

W każdym dobrym systemie klastrowym, wykorzystującym w pełni możliwości technologii klastrowej, powinny być spełnione następujące postulaty:

Mimo, że istnieje wiele komercyjnych i niekomercyjnych produktów szczycących się „wsparciem dla klastrów” lub wykorzystujących w jakiś sposób technologię klastrową, niewiele z nich realizuje choć w części wszystkie z wymienionych postulatów. Najczęściej realizowany jest, i to jedynie częściowo, postulat ostatni, tzn. globalnej, spójnej administracji systemem. 

Postulat równorzędności i wymienności jest dosyć ogólny. System V3 jest podsystemem w obrębie systemu klastrowego28 i nie widać istotnego powodu, dla którego węzły systemu V3 miałyby być dedykowane do oddzielnych zadań, aby wyróżniać w systemie V3 jakieś podgrupy funkcjonalne. Dlatego w projekcie systemu V3 przyjęto znacznie silniejsze założenie: wszystkie węzły systemu V3 są całkowicie równorzędne i wymienne. Mogą się różnić liczbą lokalnych dysków, ale wszystkie muszą być wyposażone w to samo oprogramowanie, być w stanie zastępować się wzajemnie, zamiennie realizować przydzielone im funkcje.

2.3 Wirtualizacja zasobów systemu

Natychmiastową konsekwencją wcześniej przyjętych założeń o równorzędności węzłów i spójności systemu (punkt 2.2.1) jest wirtualizacja wszelkich udostępnianych zasobów, tj. oddzielenie abstrakcji zasobów udostępnianej klientom od szczegółów budowy systemu, wchodzących w jego skład fizycznych urządzeń, m.in. ich wydajności, pojemności i umiejscowienia.

2.3.1 Ogólnie o wirtualizacji zasobów

Z punktu widzenia udostępniania zasobów podstawowa idea wirtualizacji polega na ukryciu fizycznych zasobów serwera przed klientem i przeniesieniu części logiki z klienta na serwer. Serwer powinien porozumiewać się z klientem na poziomie logicznym, tzn. otrzymywać żądania wyrażone w kategoriach logicznych (wirtualnych) zasobów, odwzorowując je (często według złożonego schematu) na operacje na fizycznych nośnikach.

Dzięki temu będzie w stanie między innymi:

Koncepcja wirtualizacji opiera się na pojęciu wirtualnego wolumenu, który reprezentuje logiczny, wirtualny zasób udostępniany przez serwer.

2.3.2 Definicja wirtualnego wolumenu

Wirtualny wolumen (ang. virtual volume) reprezentuje pojedynczą wirtualną partycję, czyli urządzenie blokowe składające się z pewnej liczby wirtualnych bloków. Wirtualne bloki odwzorowane są w pewien sposób na całość fizycznych zasobów serwera w ten sposób, że operacja odczytu/zapisu dla każdego takiego bloku jest w pewien ściśle określony sposób odwzorowana na sekwencję operacji na fizycznych nośnikach. Odwzorowanie to zadane jest wspólnie dla wszystkich bloków wolumenu i nazywamy je organizacją wolumenu

Najbardziej typowymi organizacjami wolumenów będą:

Zauważmy, że w odwzorowaniach typu RAID, inaczej niż w dwóch wymienionych wcześniej, operacja na pojedynczym bloku wirtualnym może być odwzorowana na kilka operacji na różnych blokach fizycznych.

2.3.3 Własności wirtualnych wolumenów

Bazując na postulatach sformułowanych w punkcie 2.2.1, w poprawnie zaprojektowanym systemie składowania danych powinniśmy zapewnić następujące własności wolumenów:

Wszystkie te własności zostały częściowo zrealizowane w systemie V3 i są omawiane w kolejnych rozdziałach pracy. Kwestię widoczności i udostępniania zasobów przedstawiamy w rozdziale 5, kwestia odwzorowań wolumenów na fizyczne nośniki (w tym różne realizacje i ich efektywność) jest omówiona w rozdziale 7, aspekt rekonfigurowalności w rozdziałach 6 (globalna administracja) i 8 (przejrzystość zmian z punktu widzenia klientów), zaś problem wysokodostępności i odporności na awarie w rozdziale 9.

2.3.4 Zarządcy wirtualnych wolumenów

Mianem zarządcy wolumenów (ang. volume manager) określamy oprogramowanie, które dostarcza następującą funkcjonalność (lub istotny jej podzbiór):

Zarządca wolumenów zazwyczaj obejmuje sterownik (ang. driver) wirtualnego urządzenia integrowany z systemem operacyjnym oraz dodatkowe oprogramowanie do zarządzania zasobami, takie jak centralna konsola, rozproszony system agentów wykonujących zmiany konfiguracji, zbierających statystyki czy uruchamiających procesy. Typowa architektura (umiejscowienie w systemie) przedstawiona jest na rys. 2.1. 

Rys. 2.1 Architektura systemu ze sterownikiem wirtualnych wolumenów.

Wytłuszczonym drukiem zaznaczono elementy, których nie ma w normalnym systemie. Dwie linie przerywane prowadzące do innych węzłów reprezentują połączenia w systemach wielowęzłowych. Połączenia te tworzą jakby dwie warstwy: warstwę, w której komunikują się serwisy administracyjne (nazwijmy ją, dla odniesienia, warstwą administracyjną) oraz warstwę, w której komunikują się sterowniki i przesyłane są właściwe dane (nazwijmy ją warstwą operacyjną). Oczywiście nie w każdym systemie wyposażonym w zarządcę wolumenów architektura będzie identyczna: modułów może być więcej lub mniej, mogą inaczej się z sobą komunikować (w szczególności żadna ze znanych autorowi implementacji nie wspiera systemów wielowęzłowych, w związku z czym nie ma połączeń, które na rysunku zaznaczono linią przerywaną). 

Wszędzie natomiast występują trzy podstawowe elementy:

W systemie V3 również występują wymienione trzy elementy, przy czym sterownik wirtualnych wolumenów powstał na bazie zmodyfikowanej przez autora (o elementy wirtualizacji) biblioteki systemowej odpowiedzialnej za przekazywanie żądań do jądra32, zaś serwis i narzędzia administracyjne są elementami (wielowęzłowej) warstwy administracyjnej, omówionej szczegółowo w rozdziale 6.

2.4 Odciążenie klienta kosztem serwera

Koncepcja przenoszenia obciążenia z klienta na serwer stoi w sprzeczności z obecną praktyką. Najpierw więc przedstawiamy obecne tendencje, by później skupić się na proponowanym alternatywnym rozwiązaniu i jego związkach z technologią klastrową.

2.4.1 Migracja obciążenia w stronę klienta w systemach nieklastrowych

2.4.1.1 Wydłużająca się ścieżka dostępu do informacji

W tradycyjnych (tzn. nie-klastrowych) systemach opartych na modelu klient-serwer obserwujemy od pewnego czasu tendencję do umiejscawiania coraz bardziej skomplikowanej funkcjonalności związanej z dostępem do danych na kolejnych poziomach (warstwach), za które odpowiadają osobne grupy serwerów, np. w tradycyjnej dużej konfiguracji w przedsiębiorstwie znajdziemy następujące trzy warstwy:

Stosowanie takiego podejścia jest na ogół konieczne ze względu na modularność, niepodobieństwem jest łączyć różne poziomy abstrakcji (bloki dyskowe, pliki, obiekty bazodanowe). Wiążą się z tym jednak pewne problemy:

Sposobem na poradzenie sobie z tym byłoby realizowanie przetwarzania tam, gdzie przechowywane są dane. W tradycyjnych systemach problem ten rozwiązany jest na odwrót, oto przykłady.

W obu przypadkach to klient musi implementować dodatkową funkcjonalność, klientowi stawia się dodatkowe wymagania sprzętowe (np. pamięć na schowki), klient realizuje dodatkowe przetwarzanie. Obciążenie (nie tylko obliczenia, ale także złożoność i koszt) migruje więc w stronę klienta.

2.4.1.2 Brak dostatecznej skalowalności systemu

Kolejnym powodem przenoszenia obciążenia na klienta jest problem ze skalowalnością: koszt serwera rośnie szybciej niż liniowo z rozmiarem udostępnianej przestrzeni dyskowej i zdolnością do przetwarzania żądań, czyli pojemnością. W związku z powyższym część logiki serwera bywa włączana do części klienckiej systemu, klient wykonuje niektóre spośród operacji logicznie przynależnych do serwera. Przykładem tego zjawiska może być aplikacja korzystająca z sieciowego systemu plików i wykonująca na nich operacje takie jak np. szyfrowania/deszyfrowanie, kompresja/dekompresja czy wyszukiwanie w podkatalogach, wykorzystując do tego cykle lokalnego procesora.

Zasadniczym problemem tutaj jest nie tylko gorsza wydajność tych operacji (ponieważ dokonują się na danych, które nie są lokalne), lecz także obciążenie maszyny klienta, co w przypadku np. serwerów aplikacji ma bezpośredni, wyraźny wpływ na wydajność.

2.4.2 Migracja obciążenia w stronę serwera w systemach klastrowych

Dzięki wyjątkowym cechom systemów klastrowych możliwe jest proste rozwiązanie niektórych problemów tradycyjnych systemów, w związku z czym koncepcja klastrowego systemu składowania danych w niektórych punktach idzie w przeciwnym kierunku, tzn. obliczenia i funkcjonalność migrują w stronę serwera.

2.4.2.1 Wykorzystanie mocy procesorów na węzłach serwera

System klastrowy jest w naturalny sposób skalowalny, ma sporą pamięć operacyjną i moc obliczeniową, w praktyce jest mocno niewykorzystany i ma mnóstwo wolnych cykli procesora. Fakt powyższy jednoznacznie zweryfikowano w praktyce na przykładzie systemu V3, gdzie procesor znakomitą większość czasu spędzał na aktywnym lub pasywnym oczekiwaniu. Płynie stąd wniosek, iż można i należy jak najbardziej odciążać klienta kosztem serwera33, ponieważ z punktu widzenia systemu jako całości (serwerów zasobów dyskowych, serwerów aplikacji) wydajność jest dzięki temu wyraźnie lepsza.

2.4.2.2 Wykorzystanie inteligencji węzłów serwera

Węzły serwera, w odróżnieniu od dysków, kontrolerów dyskowych itp. mogą mieć wbudowaną nietrywialną inteligencję, dzięki czemu można uniknąć niektórych warstw i skrócić ścieżkę dostępu do informacji. 

Dla przykładu:

2.5 Podsumowanie

W dalszej części pracy będziemy często korzystać z wprowadzonych wyżej definicji systemu klastrowego i wirtualnego wolumenu. Będziemy brać pod uwagę nasze postulaty projektowe (wprowadzone w punktach 2.2.1, 2.2.3 i 2.3.3) oraz (sformułowane w punkcie 2.4) założenia odnośnie wirtualnych wolumenów. Przypomnijmy je tutaj w skrócie. 

Główne założenia projektowe

  1. Wszystkie węzły w systemie są równorzędne i wymienne.
  2. System stanowi (z punktu widzenia klientów systemu) jednolity zasób.
  3. Zapewniamy ciągłość dostarczania usług klientom (tzn. minimalizujemy prawdopodobieństwo wystąpienia przerwy w udostępnianiu usług aplikacjom).
  4. Zapewniamy skalowalność pojemności i wydajności.
  5. Wyposażamy system w zdolność do automatycznej (dynamicznej) rekonfiguracji/optymalizacji.
  6. Administracja systemem jest globalna.
  7. Staramy się jak najbardziej odciążać klienta kosztem serwera.
  8. Wolumeny są widoczne globalnie, w obrębie całego serwera.
  9. Możliwe są złożone odwzorowania wolumenów na fizyczne nośniki.
  10. Możliwa jest rekonfiguracja wolumenów na bieżąco.
  11. Zapewniamy wysokodostępność wolumenów (minimalizujemy łączny czas wyłączeń systemu). 

Wirtualizacja zasobów będzie zrealizowana w oparciu o koncepcję zarządcy wolumenów (opisaną w 2.3.4). 

Należy zaznaczyć, że powyższe założenia nie wyczerpują całej listy, są to tylko założenia pierwotne. Oprócz tego dalej czynimy założenia dodatkowe, np. związane z upraszczaniem implementacji. Przykładem mogą być założenia dotyczące sesji (patrz p. 5.3), dzięki którym prostsza jest obsługa błędów.


19 Może za wyjątkiem sytuacji, w której dyski z dwoma interfejsami SCSI podłączone są do dwóch węzłów.
20 Komponenty sieciowe wykorzystywane w systemach klastrowych (np. karty Giganet) są stosunkowo drogie, stanowią jeden z głównych składników kosztu systemu.
21 Patrz punkt 2.3.4.
22 W praktyce często zdarzało się, że błędy pojawiające się w wersji systemu przeznaczonej do dystrybucji (ang. release) znikały, gdy autor stosował (odrobinę wolniejszą) wersję przeznaczoną do testowania i wyłapywania błędów (ang. debug).
23 W trakcie pracy nad systemem wielokrotnie zdarzało się, że fatalny błąd pojawiał się dopiero po kilkunastu godzinach intensywnych testów.
24 Pracując nad częścią kliencką systemu w wersji wykorzystującej zmodyfikowaną bibliotekę systemową odpowiedzialną za przekazywanie żądań aplikacji do jądra systemu (w systemie Windows NT/2000 jest to kernel32.dll) autor musiał np. śledzić wykonanie głównego procesu serwera bazy danych ORACLE, w kontekście którego wykonywał się kod tej biblioteki, co było dodatkowym utrudnieniem ze względu na wzajemne zależności między wątkami procesu serwera ORACLE i wątkami testowanej biblioteki systemowej.
25 Chodzi o specjalizację w sensie specjalnej architektury, wyposażenia w specjalne podzespoły sprzętowe itp.
26 Oczywiście pod pewnymi warunkami, np. w przypadku systemu składowania danych zapewnienie możliwości wzajemnego przejmowania obowiązków przez różne węzły może polegać na zastosowaniu organizacji RAID lub użyciu dysków o podwójnych interfejsach SCSI.
27 Niekoniecznie wszystkich węzłów, ale przynajmniej w ramach jakichś grup, tak, aby dla każdego węzła istniał co najmniej jeden inny, który może go zastąpić.
28 Zgodnie z uwagą z punktu 2.2.1.2 możemy powiedzieć, że V3 jest serwerem w obrębie klastra.
29 Chodzi o protokół, którego klienci używają w komunikacji z serwerem, patrz p. 4.4.4.
30 Definicja tego pojęcia i odniesienia do literatury są podane dalej, w punkcie 9.2.2.2.
31 W literaturze angielski termin „online” często bywa tłumaczony na „tryb bezpośredni”. Autor zdecydował się tu jednak na konsekwentne używanie zwrotu „na bieżąco”, który dokładniej oddaje sens terminu „online” w tym konkretnym konteście.
32 Część kliencką systemu V3 zaimplementowano dotychczas jedynie w wersji dla systemu Windows NT, tutaj wspomnianą biblioteką systemową jest kernel32.dll.
33 Będzie to jedno z naszych założeń projektowych.