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