Sr-1-wyk-1.0-Slajd15

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Metody zapewniania skalowalności

Metody zapewniania skalowalności


Ponieważ skalowalność jest tak wysoce pożądaną cechą systemów rozproszonych, bardzo ważnym staje się pytanie o ogólne metody zapewniania wysokiej skalowalności. Generalnie istnieją trzy metody zwiększania skalowalności: ukrywanie opóźnień komunikacyjnych, rozpraszanie i zwielokrotnianie.

Ukrywanie opóźnień komunikacyjnych oznacza w praktyce stosowanie na szeroką skalę komunikacji asynchronicznej, w której zlecający operację nie czeka na jej wynik a wykonuje dalsze przetwarzanie nie wymagające wyniku ostatniej operacji. Efekt taki można uzyskać stosując przetwarzanie współbieżne po stronie klienta, w którym oczekiwanie na wynik będzie blokowało oddzielny wątek przetwarzania. Niestety komunikację asynchroniczną można stosować jedynie w systemach nieinteraktywnych. W systemach interaktywnych można próbować redukować ilość przesyłanych informacji poprzez przeniesienie części przetwarzania do klienta, np. w celu lepszej weryfikacji danych wejściowych. Można w tym celu wykorzystać np. dynamiczne przesyłanie kodu weryfikującego z serwera (aplety Javy).

Rozpraszanie (ang. distribution ) polega na podziale zadań komponentu programowego na wiele jednostek i rozproszenie tych jednostek w sieci. Przykładem może być system DNS, w którym nie występuje pojedynczy serwer przechowujący całość informacji o konfiguracji odwzorowań nazw na adresy. Informacja ta jest rozproszona pomiędzy wszystkie serwery nazw , które odpowiadają za obsługę pojedynczych domen nazewniczych. Translację wybranej nazwy dokonuje serwer nazw dla domeny, z której pochodzi testowana nazwa.

Zwielokrotnianie (ang. replication ) daje możliwość nie tylko zwiększenia dostępności zasobów, ale i również równoważenia obciążenia. W efekcie systemy stosujące replikację (potencjalnie) charakteryzują się większą wydajnością. Co więcej, zwielokrotniony serwer może być zastąpiony innym w przypadku awarii. Jeżeli zwielokrotnione serwery są dodatkowo rozproszone, to średnia „odległość” do najbliższego serwera ulega skróceniu, co powoduje dodatkowo maskowanie opóźnień komunikacyjnych.

Pewną formę zwielokrotniania stanowi stosowanie pamięci podręcznych (ang. cache ), które są również kopią oryginalnych danych. O ile jednak w zwielokrotnianiu decyzję o utworzeniu kopii podejmuje właściciel zasobu, o tyle w przypadku przechowywania podręcznego decyzję taką podejmuje sam klient.

Tworzenie kopii zasobów powoduje jednak powstawanie problemu spójności danych, jeżeli jedna z kopii zostanie zmodyfikowana. Częste modyfikacje i ich propagacje do pozostałych serwerów mogą spowodować znaczne ograniczenie skalowalności systemu stosującego replikację. Z drugiej strony użytkownicy mogą odwoływać się do danych, które nie są już aktualne, co nie zawsze będzie akceptowalne (np. w przypadku operacji bankowych). Użytkownicy mogą formułować swoje oczekiwania co do spójności zwielokrotnianych danych poprzez tzw. modele spójności opisujące gwarancje, których udziela system. Dotyczą one propagacji zmian do pozostałych kopii oraz uporządkowania operacji realizowanych współbieżnie na wielu serwerach. Globalne porządkowanie operacji może jednak wymagać stosowania scentralizowanego przetwarzania, co oczywiście jest rozwiązaniem nieskalowalnym. Nie zawsze więc zwielokrotnianie jest właściwą metodą na zwiększanie skalowalności systemu.


<< Poprzedni slajd | Spis treści | Następny slajd >>