Ochrona sieci, bezpieczeństwo systemów komputerowych - securitymag.pl
March 30, 2012, 7:55 pm

Architektura CCA, czyli GRID prosto i przyjemnie

1 Star2 Stars3 Stars4 Stars5 Stars (1 głosów, średnia: 5,00 / 5)
Loading ... Loading ...

Czy wiesz, że możesz pomóc w badaniach nad rakiem, nowymi technologiami, badaniem kosmosu? Systemy oparte na technologii CCA lub GRID są zespołami komputerów, na których zainstalowane oprogramowanie pozwala na ścisłą współpracę między wolnymi zasobami, tworząc w ten sposób superkomputer.

Author: Rafał Podsiadły
Source: Hakin9 03/2008

Sama technologia CCA (ang. Common Component Architecture) oznacza środowisko pozwalające na uruchamianie i łączenie programów w większe i bardziej funkcjonalne systemy rozwiązywania złożonych problemów poprzez dzierżawienie zasobów komputera. W przypadku technologii GRID mamy do czynienia z systemem zarządzającym zasobami będącymi pod kontrolą różnych komputerów połączonych siecią komputerową, który do swojej pracy wykorzystuje otwarte protokoły i interfejsy ogólnego przeznaczenia. Systemy rozproszone tworzą stacje robocze, minikomputery i wielkie systemy komputerowe ogólnego przeznaczenia. Zadaniem systemu rozproszonego jest tworzenie wydajnego i wygodnego środowiska umożliwiającego dzielenie zasobów. Rozproszony system operacyjny umożliwia użytkownikom dostęp do różnorodnych zasobów, nad którymi sprawuje nadzór. Każdy komputer podłączony do systemu udostępnia procesory, które różnią się mocą obliczeniową i funkcjami. Procesory te określa się za pomocą kilku różnych nazw, takich jak stanowiska (ang. sites), węzły (ang. nodes), komputery (ang. hosts) itp. – zależnie od kontekstu, w którym występują. Pojęcie zasób powinno tu być rozumiane szeroko: począwszy od urządzeń (drukarki, skanery), a skończywszy na plikach czy stronach WWW. Dostęp do tych zasobów jest nadzorowany przez właściwy system operacyjny zainstalowany na stacji roboczej. Istnieją dwa zasadnicze, uzupełniające się schematy dostarczania takich usług:

• sieciowe systemy operacyjne: użytkownicy w celu dostępu do zasobów muszą rejestrować się na zdalnych maszynach lub przesyłać dane z odległych maszyn do swoich;
• rozproszone systemy operacyjne: użytkownicy uzyskują dostęp do zasobów zdalnych tak samo, jak do zasobów lokalnych.

Komponenty mogą być dostarczane niezależnie. Definiuje się sposoby współdziałania poszczególnych części (komponentów, zasobów), które mogą znajdować się w systemie lokalnym, równoległym czy być rozproszone między zdalnymi systemami obliczeniowymi. Sama architektura opiera się o możliwość rozwoju oraz wykorzystuje oprogramowanie na licencji Open Source. Komponenty to samodzielne jednostki obliczeniowe (fragmenty oprogramowania), których szczegóły implementacyjne nie są udostępniane użytkownikom. Dzięki tej zasadzie poszczególne komponenty mogą być tworzone za pomocą innych narzędzi. Komponenty mogą komunikować się ze światem zewnętrznym za pomocą interfejsów, w których stosuje się model budowania aplikacji typu plug and play. Do interfejsów mogą być podłączone inne komponenty lub dane wejściowe. Interfejs jest prostym opisem, zawierającym informacje dotyczące wywołania poszczególnych usług. Standardy budowy komponentów, takie jak Object Management Group, Common Object Request Broker Architecture, DCOM, Microsoft Component Object Model czy Enterprise JavaBeans (EJB), definiują prawa i obowiązki komponentów, sposób przygotowania interfejsów, framework (czyli środowisko, w którym uruchamiane są komponenty) oraz prawa i obowiązki środowiska uruchomieniowego. Standardy te różnią się pod względem wydajności działania, wymagań stawianych komponentom oraz platformy programowej, na której mogą być uruchamiane. Właściwości CCA:

Rysunek 1. Schemat systemu GRID

Rysunek 1. Schemat systemu GRID

• dodawanie, modyfikowanie lub rozwijanie pojedynczych modułów nie wpływa destabilizująco na pozostałe elementy programu,
• możliwość aktualizacji pojedynczych komponentów, bez konieczności wymiany całej aplikacji,
• zmiany wprowadzone wewnątrz komponentu nie muszą mieć wpływu na sposób jego interakcji z otoczeniem,
• użytkownik przy instalacji aplikacji może sam wybrać komponenty, które będą mu potrzebne,
• zwiększenie produktywności kodu poprzez technikę wielokrotnego wykorzystania jego fragmentów w innych, niezależnych projektach,
• możliwość składania dowolnych projektów z istniejących już komponentów,
Pojęcia tego jako pierwszy użył Ian Foster, profesor na Uniwersytecie w Chicago, naukowiec pracujący w ANL (Argonne National Laboratory). Idea ta ciągle ewoluuje, znajdowane są nowe obszary jej potencjalnego zastosowania. Za pierwszy przejaw idei gridu uważa się inicjatywę SETI@home (ang. Search for Extra-Terrestrial Intelligence), mającą na celu przyspieszenie poszukiwań śladów życia we wszechświecie. Dowolny posiadacz komputera mógł pobrać fragment danych (sygnałów odbieranych przez radioteleskopy) i przeprowadzać obliczenia w czasie wolnym od własnych obliczeń (wykorzystując wolne cykle CPU). To nowatorskie podejście do problemu pozwoliło na równoczesne wykorzystanie milionów komputerów rozproszonych po całym świecie. Udało się w ten sposób zidentyfikować potencjalnie interesujące fragmenty sygnału, które następnie poddawane były dalszym analizom. Zasoby gridu mogą być administrowane przez różne organizacje. Udostępnianie zasobów przebiega zgodnie z lokalną polityką zarządzania zasobami stosowaną w danej organizacji. Zasoby posiadają przynajmniej niektóre z poniższych cech:

• rozproszone geograficzne,
• heterogeniczne sprzętowo i programowo,
• dynamiczne (dostępność zmienna w czasie),
• potencjalnie zawodne,
• posiadane i zarządzane przez różne organizacje,
• różne wymagania i polityki bezpieczeństwa,
• różne polityki zarządzania zasobami,
• połączone heterogeniczną siecią (różne warstwy, protokoły komunikacyjne, topologie).
Grid kładzie nacisk na autonomię zasobu (pozwala na zachowanie lokalnej kontroli nad zasobami i lokalnych polityk dostępu). Zasoby nie są zarządzane centralnie, w przeciwnym razie mamy do czynienia z lokalnym systemem zarządzania zasobami (np. SGE, LSF, PBS). Zasobami gridu mogą być nie tylko komputery i sieci, ale także specjalistyczne urządzenia czy zbiory danych. Grid skupia się na użytkowniku, patrzy się nie tylko z punktu widzenia posiadacza zasobu, ale głównie z punktu widzenia użytkownika zlecającego zadanie do wykonania – tak, aby zoptymalizować wykonanie aplikacji, a nie użycie systemu. Jak to wygląda? Wyobraźmy sobie wiele organizacji rozproszonych po całym świecie. Każda z nich posiada pewne zasoby komputerowe, programowe, sprzęt specjalistyczny i cenne dane, np. pomiarowe. Żadnej z tych organizacji nie stać na zakup wszystkich najnowszych osiągnięć technologicznych, każda z nich posiada tylko pewien ich podzbiór, który wykorzystuje w różnym czasie i z różnym natężeniem. Celem tworzenia gridu jest umożliwienie organizacjom wzajemnej wymiany np. mocy obliczeniowej, ale też i innych zasobów z zachowaniem lokalnych polityk dostępu i bezpieczeństwa. Tworzone są w ten sposób Wirtualne Organizacje (VO, ang. Virtual Organizations). Warstwę fizyczną środowiska gridowego stanowią połączone siecią zasoby sprzętowe wielu organizacji stanowiących VO, które wyrażają chęć współtworzenia takiej struktury. Ponad warstwą sprzętową musi istnieć warstwa programowa, która pozwoli na udostępnianie i współdzielenie zasobów oraz umożliwi rozliczanie członków VO z użycia zasobów (tzw. accounting). Uzyskanie spójnego i zwartego obrazu systemu rozproszonego wymaga ukrycia przed użytkownikami wielu szczegółów związanych z jego organizacją. Oznacza to, że różnice pomiędzy komputerami (m. in. architektura komputera, lokalny system operacyjny), różne sposoby komunikowania się komputerów (technologie komunikacyjne, protokoły sieciowe) oraz organizacja systemu rozproszonego są (lub powinny być) niewidoczne dla użytkownika końcowego. Ujednolicenie takie daje w efekcie możliwość korzystania z zasobów systemu w jednolity sposób, przy korzystaniu z tego samego interfejsu, niezależnie od czasu i miejsca dokonywanej interakcji. Grid pozwala na rozwiązywanie problemów dużej skali w zakresie znacznie większym, niż pozwalają na to wieloprocesorowe superkomputery lub lokalne klastry komputerowe. Dzięki udostępnianiu własnych zasobów w ramach Wirtualnej Organizacji, można mieć okresowo dostęp do wszystkich jej zasobów, co daje niewątpliwą szansę na wykonanie bardziej skomplikowanych obliczeń w krótszym czasie (zasoby na żądanie). Najbardziej znanymi narzędziami realizującymi koncepcje gridu są Legion i Globus Toolkit. Globus Toolkit jest to oprogramowanie warstwy pośredniej (ang. middleware), opracowywane w ramach projektu Globus Alliance. Celem projektu jest dostarczenie środowiska do uruchamiania i tworzenia aplikacji gridowych. Ponadto w ramach projektu powstają przykładowe implementacje usług potrzebnych w tym środowisku. Globus Toolkit uważany jest za implementację referencyjną. Architektura środowiska gridowego zdefiniowana została w standardzie OGSA (ang. Open Grid Services Architecture). Standard WSRF (ang. Web Services Resource Framework) określa otoczenie i sposób budowania oprogramowania dla tego środowiska z wykorzystaniem usług sieciowych (ang. Web Services).

Rysunek 2. Schemat systemu CCA

Rysunek 2. Schemat systemu CCA

Procesem standaryzacji zajmuje się organizacja standaryzacyjna Global Grid Forum. Globus Toolkit, będący implementacją powyższych standardów, sam uważany jest za de facto za standard. Wrażenie jednolitości systemu można uzyskać poprzez zastosowanie architektury warstwowej w odniesieniu do oprogramowania. System taki bazuje na lokalnych systemach operacyjnych i nadbudowuje warstwę pośrednią (ang. middleware), dostarczającą ujednoliconego interfejsu dostępu do usług dla aplikacji rozproszonych. Systemy rozproszone są tworzone ze względu na swoje istotne potencjalne zalety. Efektywne zagospodarowanie tych zalet może sprawić, że będą one bardziej atrakcyjne dla użytkownika końcowego niż systemy scentralizowane. Systemy rozproszone powstają po to, by ułatwić użytkownikom dostęp do zdalnych zasobów, ukrywając fakt ich rozproszenia i umożliwiając współdzielenie. Współdzielony dostęp do zasobów jest uzasadniony głównie ekonomicznie: wiele zasobów jest drogich – zarówno w zakupie, jak i w późniejszym utrzymaniu. Korzystanie ze wspólnych zasobów daje też możliwość szybkiej wymiany informacji pomiędzy samymi użytkownikami. Łatwy dostęp do zasobów nie powinien jednak oznaczać rezygnacji z zapewniania bezpieczeństwa realizowanych operacji. Dotyczy to zarówno poufności, spójności przesyłanych danych, jak i niezaprzeczalności. Problemy bezpieczeństwa ujawniają się również w kontekście samej komunikacji. Monitorowanie aktywności użytkowników i budowanie profili zachowań również może naruszać naszą prywatność. Rozproszenie zasobów i procesów na fizycznie rozłącznych maszynach może być maskowane tak, aby system był postrzegany jako jedna spójna całość. Mówimy o takim systemie, że jest transparentny. Przezroczystość może być jednak postrzegana na różnych poziomach, a poziomy te mogą być mniej lub bardziej istotne dla użytkownika końcowego. W dalszej części artykułu przedstawiono podstawowe poziomy przezroczystości rozpatrywane w systemach rozproszonych. Kolejna cecha systemów rozproszonych to łatwość ich rozszerzania, co w konsekwencji powinno prowadzić do zapewnienia skalowalności systemu. Łatwość ta jest efektem niezależności komputerów, przy jednoczesnym ukrywaniu szczegółów dotyczących funkcji pełnionych przez poszczególne komputery w systemie. Ze względu na powielanie pewnych funkcji przez wiele komputerów, system rozproszony może sprawiać wrażenie nieustannej dostępności jego zasobów i usług. Dzieje się tak pomimo przejściowych awarii poszczególnych jego komponentów, które są jednak maskowane przejęciem obsługi przez inne komputery. Podobnie dodanie nowych komputerów i/lub użytkowników pozostaje niezauważone przez dotychczasowych użytkowników. Przezroczystość dostępu oznacza ujednolicenie metod dostępu do danych i ukrywanie różnic w reprezentacji danych. Użytkownik korzysta cały czas z tego samego interfejsu dostępu do danych. Różnice w reprezentacji danych mogą wynikać z zastosowania różnych architektur komputerowych. Przykładem jest reprezentacja liczb – procesory Intela stosują tzw. kodowanie little endian a np. procesory Sun SPARC stosują kodowanie big endian. Różnica polega na kolejności ułożenia poszczególnych bajtów liczby w pamięci. Innym przykładem różnic w reprezentacji danych są odmienne konwencje nazewnictwa plików stosowane w poszczególnych systemach operacyjnych. Przezroczystość położenia oznacza, że użytkownicy nie mogą określić fizycznego położenia zasobu (np. na podstawie jego nazwy czy identyfikatora). Warunkiem koniecznym osiągnięcia przezroczystości położenia jest stosowanie nazewnictwa zasobów, które abstrahuje od ich położenia. Z tego między innymi powodu adresy dokumentów w usłudze WWW zaczęto określać nie jako adresy URL (ang. Universal Resource Locator – uniwersalny lokalizator zasobów), a raczej jako adresy URI (ang. Universal Resource Identifier – uniwersalny identyfikator zasobów). Zaakcentowano w ten sposób bardziej ogólny sposób interpretacji elementów składowych adresu. Np. adres: http://www.put.poznan.pl/ rekrutacja/rekrutacja.html może być interpretowany jako wskazanie na dokument znajdujący się na serwerze www.put.poznan.pl (URL) lub po prostu całościowo jako identyfikator dokumentu (URI). Przezroczystość wędrówki oznacza, że zasoby mogą być przenoszone pomiędzy serwerami bez potrzeby zmiany sposobu odwoływania się do nich. Uzyskanie przezroczystości wędrówki zakłada oczywiście przezroczystość położenia, gdyż w przeciwnym wypadku po dokonaniu przeniesienia zasobu jego stary identyfikator stawałby się nieaktualny. Przezroczystość przemieszczania oznacza, że zasoby mogą być przenoszone nawet wtedy, gdy są używane przez użytkowników i nie wymaga to informowania użytkowników o zmianie położenia. Z taką sytuacją mamy do czynienia np. w przypadku sieci komórkowych, gdzie użytkownicy pomimo fizycznego przemieszczania się mogą prowadzić stale rozmowę (jest to tzw. roaming). W systemach rozproszonych zwielokrotnianie (replikacja) jest jednym z podstawowych mechanizmów pozwalających na zwiększenie wydajności i niezawodności. Stosowanie zwielokrotniania może skutkować jednak znacznymi utrudnieniami dla użytkowników końcowych, wynikającymi m. in. z niespójności współbieżnie modyfikowanych kopii. Przezroczystość zwielokrotniania oznacza, że pomimo zwielokrotniania zasobów użytkownicy nie zauważają tego faktu – korzystają z zasobów dokładnie w taki sam sposób, jak w systemie nie stosującym zwielokrotniania. W praktyce oznacza to, że przezroczystość zwielokrotniania można uzyskać w systemach gwarantujących przezroczystość położenia, ponieważ dostęp do każdej z kopii zasobu powinien być realizowany z wykorzystaniem tego samego identyfikatora. System rozproszony umożliwia współdzielenie zasobów. Współdzielenie takie może być realizowane w sposób kooperatywny – jak to ma miejsce np. w przypadku komunikacji – lub w sposób rywalizacyjny, kiedy wielu użytkowników jednocześnie ubiega się o dostęp do tego samego zasobu. Przezroczystość współbieżności gwarantuje, że współbieżne odwoływanie się do tego samego zasobu realizowane przez wielu użytkowników nie będzie prowadziło do powstania w systemie stanu niespójnego. Stan spójny można osiągnąć poprzez blokowanie dostępu do wspólnych danych (gwarantujące wyłączny dostęp) lub poprzez zastosowanie mechanizmu przetwarzania transakcyjnego, które jednak jest trudne do zrealizowania w systemie rozproszonym. System jako całość powinien działać nawet w przypadku awarii pojedynczych jego komponentów. Przezroczystość awarii oznacza, że użytkownik nie zauważa faktu uszkodzenia pojedynczych węzłów. Wadliwy komponent powinien zostać zastąpiony poprawnym, a cała operacja nie powinna wpływać na sposób korzystania z systemu. Maskowanie awarii jest zadaniem trudnym, a przy przyjęciu pewnych założeń – nawet niemożliwym. Główna trudność polega na odróżnieniu awarii zdalnego węzła od awarii łączy komunikacyjnych. Przezroczystość trwałości ukrywa mechanizmy zarządzania zdalnymi zasobami. Przykładem mogą tu być zdalne obiekty, na rzecz których użytkownicy wywołują metody. Obiekt powinien trwale przechować swój stan po zdalnym wywołaniu jego metody. Z drugiej strony odwołanie do tego obiektu powinno być możliwe nawet wtedy, gdy nie jest przechowywany aktualnie w pamięci. Oczekuje się, że systemy rozproszone będą ukrywać przed użytkownikiem szczegóły swojej wewnętrznej organizacji, jednakże osiągnięcie wysokiego poziomu przezroczystości wiąże się z dużymi kosztami, głównie związanymi z ogólną wydajnością systemu. W praktyce dąży się do osiągnięcia racjonalnego kompromisu pomiędzy obserwowaną przez użytkownika złożonością systemu, a efektywnością jego pracy. Systemy rozproszone, aby mogły być rozbudowywane, muszą być otwarte. Oznacza to konieczność standaryzacji stosowanych protokołów i interfejsów komunikacyjnych. Definicje interfejsów obejmują najczęściej opis składni usług (nazwy funkcji, typy parametrów i zwracanych wyników). Semantyka usług opisywana jest najczęściej w sposób nieformalny, przy wykorzystaniu języka naturalnego. Specyfikacja interfejsu, aby mogła być implementowana niezależnie przez wielu dostawców oprogramowania, musi być zupełna (kompletna) i neutralna. Kompletność oznacza, że opis jest wystarczający do stworzenia implementacji. Neutralność oznacza, że specyfikacja nie narzuca żadnych szczegółów dotyczących implementacji. Spełnienie tych warunków jest konieczne dla osiągnięcia zdolności do współdziałania (ang. interoperability), która oznacza możliwość współpracy ze sobą komponentów programowych pochodzących od różnych dostawców, o ile implementują one odpowiednie interfejsy programowe. Przenośność (ang. portability) oznacza możliwość uruchomienia aplikacji stworzonej dla jednego systemu w innym systemie bez konieczności wprowadzania jakichkolwiek modyfikacji. Dobrze zaprojektowany system otwarty powinien być elastyczny, co w praktyce oznacza łatwość budowy i przebudowy systemu składającego się z komponentów pochodzących od różnych dostawców. Osiągnięcie wysokiej elastyczności jest możliwe poprzez podział systemu rozproszonego na wysoce autonomiczne komponenty komunikujące się poprzez precyzyjnie opisane interfejsy. Daje to możliwość wymiany poszczególnych komponentów bez konieczności wyłączania całego systemu. Otwartość i elastyczność systemów rozproszonych może być wspierana poprzez oddzielenie polityki od mechanizmu. Polityka określa w sposób deklaratywny cele, które chce osiągnąć użytkownik, a mechanizm dostarcza narzędzi do osiągania tych celów. Przykładem może być stosowanie pamięci podręcznych w przeglądarkach internetowych. Jest to mechanizm zwiększający dostępność zasobów w usłudze WWW. Ważne jednakże są tu parametry wejściowe sterujące pracą tej pamięci (czas przechowywania dokumentów, strategia aktualizacji, wybór dokumentów). Parametry te określają właśnie politykę, jaką chce narzucić użytkownik i która może być potencjalnie realizowana z wykorzystaniem innego mechanizmu. Rozwój sieci komputerowych i liczba komputerów przyłączanych do Internetu wzrastają tak szybko, że jednym z najważniejszych celów projektowych staje się obecnie zapewnienie skalowalności. Skalowalność może być rozważana w trzech różnych wymiarach. Po pierwsze – skalowalność pod względem rozmiaru, oznaczająca możliwość dodawania do systemu nowych użytkowników i zasobów. Po drugie – skalowalność geograficzna, umożliwiająca rozrzucenie poszczególnych użytkowników po całym świecie. Po trzecie wreszcie – skalowalność pod względem administracyjnym oznacza, że zarządzanie systemem pozostaje równie proste pomimo zwiększania jego rozmiaru i dystrybucji odpowiedzialności na wiele jednostek administracyjnych. Skalowalność pod względem rozmiaru może być ograniczona poprzez stosowanie rozwiązań scentralizowanych. Każdy serwer, który jest jedynym pełniącym określoną funkcję, staje się wąskim gardłem w warunkach wzrastającej liczby żądań. Stosowanie przetwarzania scentralizowanego staje się niekiedy jednak nieuniknione. Przykładem może być przechowywanie poufnych danych, których powielenie powodowałoby zwiększenie ryzyka ich ujawnienia (centralizacja danych). Z centralizacją usług mamy do czynienia wtedy, gdy przetwarzanie zleceń jest realizowane przez pojedynczy serwer. Dobrym przykładem usługi, która jest doskonale zdecentralizowana, jest usługa DNS (ang. Domain Name Service), zajmująca się m. in. odwzorowaniami nazw domenowych na adresy IP. W usłudze tej grupa rozproszonych serwerów realizuje wspólnie wspomnianą funkcję. Rozproszenie przetwarzania jest tu koniecznością, ponieważ liczba żądań przychodzących do systemu jest tak duża, że żaden serwer nie byłby w stanie jej obsłużyć. Wysoką skalowalność systemów można osiągnąć poprzez zastosowanie algorytmów zdecentralizowanych. Charakteryzują się one następującymi własnościami:
• żadna z maszyn nie posiada pełnej informacji o stanie systemu
• decyzje podejmowane są tylko na podstawie informacji lokalnych,
• uszkodzenie pojedynczych maszyn nie powoduje blokady całego systemu,
• nie ma niejawnych założeń dotyczących globalnego zegara.
Ostatnie założenie jest konsekwencją ogólnie przyjętej charakterystyki systemów rozproszonych, w których komunikacja ma charakter asynchroniczny. Oznacza to, że komunikaty docierają do odbiorcy w czasie skończonym, ale bliżej nieokreślonym. Konsekwencją tego założenia jest niemożliwość dokładnego zsynchronizowania lokalnych zegarów komputerów pracujących w sieci (przede wszystkim w sieci rozległej). Skalowalność geograficzna jest ograniczana głównie przez dostępne mechanizmy komunikacyjne, które wprowadzają znaczne opóźnienia i charakteryzują się wysoką zawodnością. Opóźnienia powodują, że akceptowalne w sieciach lokalnych przetwarzanie synchroniczne staje się nieakceptowalne w sieciach rozległych, gdyż wprowadza zbyt duże przestoje. 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 niewymagają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 także 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 skutkuje dodatkowo możliwością maskowania opóźnień komunikacyjnych. Pewną formę zwielokrotniania stanowi stosowanie pamięci podręcznych (ang. cache), których zawartość jest również kopią oryginalnych danych. O ile jednak przy 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. Systemy rozproszone budowane są z pojedynczych komputerów połączonych siecią. Z punktu widzenia programisty nie jest obojętne, jaka jest budowa pojedynczych maszyn w systemie rozproszonym, gdyż rzutuje to na sposób programowania takich systemów. Generalnie można wyróżnić dwie klasy systemów komputerowych: wieloprocesory i multikomputery. Zasadnicza różnica polega na innej organizacji dostępu do pamięci. W wieloprocesorach wszystkie procesory mają dostęp do jednej, wspólnej przestrzeni adresowej. W multikomputerach każda jednostka ma swoją lokalną pamięć. Drugim ważnym parametrem wyznaczającym charakter systemu rozproszonego jest architektura połączeń pomiędzy poszczególnymi węzłami. Połączenia mogą być realizowane poprzez centralną szynę lub w technologii przełączanej. Połączenia szynowe w wieloprocesorach ułatwiają zarządzanie spójnością danych, ale z drugiej strony bardzo ograniczają skalowalność; szyna przy niedużej liczbie procesorów staje się wąskim gardłem. Często stosowanym rozwiązaniem w takim przypadku jest zastosowanie pamięci podręcznych. Algorytmy wymiany zawartości pamięci podręcznej pozwalają na uzyskiwanie wysokich współczynników trafień (ang. hit rate), co pozwala na znaczne ograniczenie częstotliwości odwołań do głównej szyny. Z drugiej jednak strony stosowanie pamięci podręcznej powoduje powstawanie problemu spójności kopii tych samych danych przechowywanych na różnych węzłach.

Podsumowanie

Wieloprocesory budowane są poprzez połączenie wielu autonomicznych komputerów siecią. Jeżeli wykorzystywane są komputery o tej samej architekturze, to mamy do czynienia z siecią systemową. Połączenia mogą być również realizowane w architekturze szynowej lub przełączanej. W przypadku architektury przełączanej stosuje się wyznaczanie tras (trasowanie) komunikatów przez sieć połączeń. Dwie najpopularniejsze topologie połączeń pomiędzy węzłami to siatki (kraty) i hiperkostki. Kraty, ponieważ są dwuwymiarowe, są łatwiejsze do implementacji na płaskiej płytce obwodu drukowanego. Hiperkostka jest sześcianem n-wymiarowym. Praktyczne realizacje koncepcji multikomputera korzystają bądź ze specjalizowanej (często opatentowanej) sieci połączeń bądź ze standardowych rozwiązań stosowanych w sieciach komputerowych (np. technologia Ethernet). Pierwsze podejście, oczywiście dużo droższe, stosowane jest w komputerach o masywnej równoległości. Multikomputery bazujące na standardowych technologiach zwane są z kolei gronami, grupami stacji roboczych lub po prostu klastrami.
_______________
Rafał Podsiadły
Student informatyki który interesuje się logiką rozmytą. Kontakt z autorem: spinacz24@gmailcom

Komentarze zablokowane.

EN
PL
FR
DE


Software Press Sp. z o.o. Sp. Komandytowa 02-682 Warszawa, ul. Bokserska 1, NIP 9512279582, REGON 141804060, KRS: 0000327578