WYKŁAD: Przetwarzanie rozproszone typu klient

Transkrypt

WYKŁAD: Przetwarzanie rozproszone typu klient
WYKŁAD:
Przetwarzanie rozproszone typu klient-serwer.
Przetwarzanie rozproszone:
- różnorodne zasoby w różnych lokalizacjach
- wiele procesów obliczeniowych dedykowanych do tych
zasobów (typowe programy to MPMD)
- heterogeniczność sprzętu
- dominujący paradygmat obliczeń : klient-serwer (ma
obecnie duże znaczenie komercyjne)
Paradygmat klient-serwer opisuje asymetryczną relację pomiedzy
dwoma procesami przebiegającymi zwykle w różnych miejscach:
proces serwer : - zarządza pewnymi zasobami w miejscu A;
- oferuje usługi dostępne dla innych procesów;
- po uruchomieniu działa w długim okresie czasu;
- oczekuje pasywnie na prośbę klienta;
- wykonuje zadania odpowiadając na zgłoszenia
klientów
proces klient : - potrzebuje danej usługi aby wykonać swoją
pracę w miejscu B;
- wysyła prośbę do serwera dotyczącą wykonania
konkretnego zadania z zakresu jego usług;
- otrzymuje z serwera wynik tego zadania
=================================================
Przykład
Serwer zarządza bazą danych
Oferowana usługa: dostęp do bazy danych
Klient uzyskuje dostęp do konkretnego zapisu w bazie danych.
=================================================
W paradygmacie klient-serwer nie występuje równoległość – jest
to raczej metoda strukturalizacji programów i metoda integracji
różnorodnych zasobów.
=================================================
Przykład
W dużych aplikacjach rozdział pomiędzy klientem a serwerem
jest często rozdziałem pomiędzy różnymi programami
opracowanymi przez różnych autorów a nawet różne firmy.
Omawiany paradygmat jednoznacznie definiuje interfejs
pomiędzy tymi programami.
=================================================
Jednak równoległość nie jest wykluczona:
- po stronie klienta może być stosowana wielowątkowość,
t.j. system może przejść do wykonywania innego zadania,
podczas gdy sam klient oczekuje na odpowiedź serwera;
- również serwer może wykonywać inne zadania oczekując na
zgłoszenie klienta.
Systemy klient-serwer są typowo budowane na bazie architektur
LAN/WAN tworzących luźno związane systemy rozproszone.
Stąd w tych systemach przykłada się większą niż w systemach
równoległych wagę do bezpieczeństwa, tolerowania błędów,
heterogeniczności i interoperacyjności .
Systemy klient-serwer w odróżnieniu od systemów równoległych
cechuje dynamiczność.
Programista nie wychodzi od jednego dobrze zdefiniowanego
zadania do rozwiązania oraz specyfikacji programu, który trzeba
podzielić na procesy obliczeniowe.
Oprogramowując serwer zna interfejs, ale nie zna liczby klientów,
ani zbioru wszystkich programów, które w przyszłości będą
korzystać z usług serwera. Klienci także nie znają się wzajemnie.
Systemy klient-serwer są więc bardziej nieprzewidywalne.
Systemy klient-serwer pracują zwykle w modelu MPMD, chociaż
wielu klientów może wykonywać ten sam program.
Programy klienta i serwera wykorzystują oddzielne przestrzenie
adresowe i komunikują się poprzez wymianę komunikatów.
Konkretne mechanizmy różnią się od prostych send/receive .
Typowe zasoby serwerów to systemy plików, bazy danych,
skomplikowane programy, drukarki itp. Serwer rezyduje
zwykle w pobliżu zasobów.
Większość serwerów kooperuje z wieloma klientami.
Pojedynczy klient może współpracować w swoim okresie pracy z
wieloma serwerami.
Serwer – wykonując powierzone zadanie - może korzystać z usług
innych serwerów.
Serwer obsługujący wielu klientów może pracować iteracyjnie lub
współbieżnie:
- praca iteracyjna: w danym czasie jest obsługiwany jeden klient,
serwer nie odpowiada na prośby innych klientów
- praca współbieżna (wielowątkowa) : każdą prośbę klienta
obsługuje oddzielny wątek (dobra współpraca z maszynami
równoległymi)
Aby uniknąć przeciążenia pojedynczego serwera te same usługi
mogą być oferowane przez wiele serwerów. W dostępie do zbioru
serwerów pośredniczy program rozsyłający (dispatcher), który
przydzielając zadaniom serwery bierze pod uwagę specjalizację
serwerów, równomierność ich obciążenia i priorytety zadań.
Zalety paradygmatu klient-serwer :
1. poprawa struktury programów – wsparcie dla zespołowego
tworzenia oprogramowania
2. elastyczność – klient i serwer mogą być aktualizowane bądź
wymieniane niezależnie tak długo jak długo zachowany jest ten
sam interfejs
3. specjalizacja – każde podzadanie może być przydzielone
najlepszej dla niego maszynie
4. skalowalność – możliwość dodawania klientów bez zmiany
ogólnej struktury programu, obowiązki przeciążonego serwera
może przejąć silniejsza maszyna lub zbiór maszyn
5. możliwość poprawy wydajności – wielowątkowość w kodzie
klienta, współdzielenie serwera pomiędzy różne aplikacje,
zastosowanie serwera współbieżnego
Podobieństwa do systemów z wymianą komunikatów:
- systemy klient-serwer pracują z rozłącznymi przestrzeniami
adresowymi;
- programista lub administrator systemu odpowiada za rozdział
danych, szeregowanie zadań, powielanie danych w systemie itp.
Podobieństwo z systemem master-slave (dotyczy tylko niektórych
systemów) :
- pojedynczy klient to master, serwery to slaves
Opozycja w stosunku do wielowątkowości:
system wielowątkowy = jeden proces + wiele wątków sterowania
system klient-serwer = 1 wątek sterowania + 2 przełączane procesy
Warianty systemów klient-serwer :
- dwuwarstwowe (two-tier): warstwa serwerów + warstwa
klientów (programy aplikacyjne w jednej z tych warstw)
Warstwa serwerów zapewnia dostęp do zasobów, warstwa
klientów realizuje interfejs użytkownika.
Jeżeli programy aplikacyjne są w warstwie klientów to mamy do
czynienia z tzw. fat-client. W przeciwnym wypadku jest to tzw.
thin-client.
Cechy thin-client:
- łatwiejsze do utrzymania, aktualizacje są wykonywane
bezpośredno na serwerze pod kontrolą administratora
- wymagana jest mniejsza przepustowość sieci, do inicjacji pracy
serwera wystarcza jeden komunikat
- większe obciążenie serwera, skutkujące dłuższymi czasami
odpowiedzi
- mniejsza elastyczność – zmiany dotykają wszystkich klientów
Cechy fat-client:
- trudniejsze do utrzymania, aktualizacje trzeba przesyłać do
wszystkich klientów
- wymagana jest większa przepustowość sieci, do inicjacji pracy
serwera potrzeba kilka komunikatów
- mniejsze obciążenie serwera, skutkujące krótszymi czasami
odpowiedzi
- większa elastyczność w zmianie funkcjonalności u nowego
Klienta
- trójwarstwowe (three-tier): warstwa serwerów + warstwa
pośrednia + warstwa klientów (programy aplikacyjne działają
w warstwie pośredniej, dwie pierwsze warstwy powstały z
podziału warstwy serwerów)
Obszary zastosowań:
1. bazy danych
2. przetwarzanie transakcyjne (transakcja – sekwencja czynności,
która jest wykonywana w całości albo wcale, np. w systemach
rezerwacji lotów)
3. serwery druku, nazw i plików
4. WWW – największa dziś aplikacja klient-serwer (maszyna w
tym samym czasie może dla jednej aplikacji serwerem a dla
innej klientem (w tym przetwarzanie formularzy WWW)
5. zdalne obliczenia numeryczne (NetSolve) i gridowe
Implementacje systemów klient-serwer:
- systemy przetwarzania komunikatów;
- gniazda (sockets)
- RPC (Remote Procedure Calls)
Gniazda (sockets) to model interfejsu, poprzez który programista
może mieć dostęp do funkcjonalności protokołów TCP, UDP i
innych (typu broadcast). Interfejs wprowadza niewielki spadek
jakości.
Gniazda są implementowane jako biblioteki stanowiące część
systemu operacyjnego (np. Unix) lub języka (Java sockets).
Przykład : Berkeley Sockets
Adresowanie : klient musi znać adres złożony z adresu hosta
(liczba 32-bitowa otrzymywana z funkcji konwersji, której
argumentem jest nazwa hosta np. 123.45.67.89 ) oraz numer portu
(czasem predefiniowanego).
Inicjalizacja serwera : na początku programista rejestruje serwer
w systemie wywołując funkcje socket i bind (z parametrami).
Następnie serwer rozpoczyna pracę wywołując funkcję listen
(z liczbą wiadomości do buforowania w systemie jako
parametrem) dla zorientowanego na połączenia serwerem (TCP),
lub recvfrom jeżeli jest to bezpołączeniowy serwer (UDP).
Zaletą gniazd jest przenośność (portability).
Generalnie gniazda są zbyt wolne dla wykorzystania w
programowaniu równoległym (chociaż istnieją zbudowane na nich
systemy PVM i MPI).
Gniazda TCP są niezawodne, a gniazda UDP szybkie.
Zawodność UDP polega na utracie bądź nałożeniu wiadomości.
Schematy wymiany wiadomości pomiędzy serwerem a klientem
ilustrują rysunki.
Gniazda Java (Java Sockets)
Java włącza standard Berkeley Sockets API do języka
programowania.
Java sockets bazują na obiektach i są bardziej komfortowe dla
programisty (np. akceptowane są nazwy takie jak
”maszyna.miejsce.pl”, występuje mniej funkcji i parametrów,
łatwo programuje się typowe przypadki).
Java sockets wspomagają multicasting. Po dołączeniu procesu do
grupy proces może otrzymywać i wysyłać komunikaty od/do
członków grupy.
System Java traktuje komunikaty jako strumienie bajtów, które
wymagają interpretacji – zadanie to pozostawia się programiście.
Zdalne wywołania procedur (Remote Procedure Calls - RPC)
RPC jest mechanizmem komunikacji między-procesorowej
przypominającym zwykłe wywołania procedur. Główna różnica
polega na tym, że tradycyjnie procedura jest wywoływana
wewnątrz jednego procesu, a w RPC wywołanie i wywoływana
procedura należą do różnych procesów.
W kontekście systemów klient-serwer wywoływana procedura
pełni funkcję serwera.
W komunikacji pośredniczą lokalne procedury (stubs), które
reprezentują części zdalnych programów klienta i serwera.
Wywołanie klienta trafia więc do lokalnej procedury klienta i to
procedura transmituje zgłoszenie do serwera, np. poprzez
gniazda, przy czym parametry wejściowe są często pakowane do
kilku komunikatów w innym formacie (marshaling).
Po stronie serwera mechanizm jest analogiczny.
Stubs są generowane w IDL (Interface Definition Language).
Ocena:
1. W porównaniu z gniazdami zaletą RPC jest wyższy poziom i
zwięzły opis co ułatwia pracę programisty.
2. RPC są wolniejsze niż same gniazda.
3. RPC nie wspomagają równoległości, wymagają większego
nakładu programowania niż np. MPI.
4. RPC oddziela klienta od serwera.
5. RPC mają ograniczoną ”transparentność” ponieważ występuje
duże prawdopodobieństwo błedów w transmisji, co
programista musi przewidzieć.
Implementacje: Open Network Computing RPC
Distributed Computing Environment RPC