RPC


Programowanie aplikacji klient - serwer

Zdalne wywoływanie procedur
(RPC)

Metody tworzenia aplikacji rozproszonych

  1. Projektowanie zorientowane na komunikację;

  2. Projektowanie zorientowane na aplikacje.

  1. Protokół komunikacyjny;

  2. Format i składnia komunikatów;

  3. Program klienta - reakcja na odbierane komunikaty i sposób tworzenia wysyłanych komunikatów;

  4. Program serwera - reakcja na odbierane komunikaty i sposób tworzenia wysyłanych komunikatów;

Wady:

  1. Skoncentrowanie uwagi na protokole komunikacyjnym, a sposób działania aplikacji schodzi na plan dalszy - potencjalne źródło błędów.

  2. Protokoły mogą okazać się niepotrzebnie zawikłane i nieefektywne. Drobne przeoczenia mogą być przyczyną usterek ujawniających się dopiero przy dużym obciążeniu.

  3. Kod realizujący komunikację stanowi centralną część każdego programu, co zmniejsza przejrzystość samej aplikacji.

  1. Projekt aplikacji działającej na pojedynczej maszynie.

  2. Implementacja i testowanie w środowisku lokalnym jego wersji roboczej.

  3. Podział programu na części, które będą wykonywane na różnych maszynach;

  4. Opracowanie protokołu komunikacyjnego.

Model zdalnego wywoływania procedury - RPC (ang. Remote Procedure Call) nawiązuje do drugiego podejścia i powstał, aby:

Klasyczny model wywołań procedur

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
main

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

proc1 proc2 proc3 proc4

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

proc5 proc6 proc7 proc8

Pojęciowy model wywołania procedur na przykładzie ścieżki:

main proc4 proc8

Kod programu Kod Kod

głównego procedury 4 procedury 8

0x08 graphic
0x08 graphic
0x08 graphic

Początek

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
programu

głównego

0x08 graphic

0x08 graphic

0x08 graphic
Wywołanie 4

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
Wywołanie 8

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
Wyjście

0x08 graphic
z programu

0x08 graphic
0x08 graphic
głównego Powrót Powrót

Model proceduralny w systemach rozproszonych

W klasycznym modelu proceduralnym wszystkie procedury są umieszczone na jednym komputerze, w modelu RPC wywoływane procedury znajdują się na odległych komputerach. Aby program mógł korzystać ze zdalnych wywołań procedur zgodnie z modelem RPC, musi istnieć protokołu sieciowy realizujący komunikację z procedurą oddaloną. Protokół ten musi w szczególności zapewnić właściwe przekazanie parametrów do procedury oddalonej i zwrot wyników w niej wygenerowanych.

komputer 1 komputer 2

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
main

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

proc1 proc2 proc3 proc4

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

proc5 proc6 proc7 proc8

Przebieg nici sterowania wykonania w środowisku rozproszonym

Zamiast zajmować się wymianą komunikatów między klientem a serwerem, można potraktować serwer jako realizację pewnej procedury oddalonej. Interakcja między klientem a serwerem odpowiada wywołaniu procedury i zwróceniu wyników jej wykonania (powrotowi z procedury).

Program główny Procedura 4 Procedura 8

na komputerze 1 na komputerze 2 na komputerze 3

( klient ) ( serwer ) ( serwer )

0x08 graphic
0x08 graphic
0x08 graphic

Początek

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
programu

głównego

0x08 graphic

0x08 graphic

0x08 graphic
Wywołanie 4

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

Wywołanie odleg-

0x08 graphic
łej procedury 8

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

Wyjście Odpowiedź dla Odpowiedź dla

0x08 graphic
z programu procedury procedury

0x08 graphic
0x08 graphic
głównego wywołującej wywołującej

Wyobrażenie sobie aplikacji rozproszonej jako jednego programu, w którym sterowanie jest przekazywane przez sieć do procedury odległej i z powrotem, ułatwia programistom zdefiniowanie interakcji klient - serwer, ponieważ interakcje te są rozważane w kategoriach znanego pojęcia wywołania procedury i powrotu z niej.

Mechanizm zdalnego wywołania procedur

- Sun RPC

  1. format komunikatów wysyłanych przez program wywołujący (klienta)
    w celu wywołania odległej procedury realizowanej przez serwer;

  2. format argumentów wywołania;

  3. format wyników zwracanych przez wywołaną procedurę;

  4. reprezentację argumentów i wyników, a także różnych elementów nagłówka komunikatów RPC - XDR;

  5. protokół TCP lub UDP do przesyłania komunikatów;

Dla SUN RPC zdefiniowano system kompilacji umożliwiający automatyzację konstruowania programów rozproszonych.

Program odległy - (ang. remote program) - odpowiednik serwera. Zawiera jedną lub więcej procedur odległych oraz dane globalne, do których mają dostęp wszystkie procedury programu odległego.

Identyfikacja zdalnych programów i procedur

(prog, wer, proc)

gdzie:

Uwaga:

Mechanizm RPC nie pozwala na jednoczesne wywołanie więcej niż jednej procedury w ramach jednego zdalnie wykonywanego programu. Ma to na celu ochronę wspólnie wykorzystywanych przez różne procedury danych

. Identyfikacja zdalnych programów i procedur

Od

Do

Numery przydzielane przez

0x00000000

0x1fffffff

Sun Microsystems, Inc.

0x20000000

0x3fffffff

Zarządca systemu w danym ośrodku

0x40000000

0x5fffffff

Numery przydzielane tymczasowo

0x60000000

0x7fffffff

Numery zarezerwowane

0x80000000

0x9fffffff

Numery zarezerwowane

0xa0000000

0xbfffffff

Numery zarezerwowane

0xc0000000

0xdfffffff

Numery zarezerwowane

0xe0000000

0xffffffff

Numery zarezerwowane

100002 - rusers (użytkownicy odległego systemu);

100003 - nfs (sieciowy system plików);

100010 - etherstatd (ethernet statistics);

Semantyka wywołań

.

Warunku idempotencji nie spełniają procedury:

Warunek idempotencji spełniają:

Biblioteka Sun RPC zawiera procedury realizujące prosty mechanizm odmierzania ograniczenia czasowego (ang. timeout) i retransmisji w przypadku braku odpowiedzi, ale nie zapewnia niezawodności. Limit czasu oczekiwania na odpowiedź i liczba powtórzeń są z góry ustalone (przez programistę) dla danej aplikacji.

Odwzorowanie numeru komunikatu na numer portu

(numer programu RPC, numer portu).

Schemat zdalnego wywoływania procedur (RPC)

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
procedury procedury

klienta serwera

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

(1) (10) (6) (5)

0x08 graphic
0x08 graphic

łącznik łącznik

klienta serwera

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

(2) (9) (7) (4)

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
(8)

0x08 graphic
procedury procedury

0x08 graphic
sieciowe sieciowe

(3)

jądro lokalne jądro zdalne

Oprogramowanie pomocnicze

  1. Procedury biblioteczne XDR realizujące przekształcanie danych z postaci przyjętej na lokalnym komputerze na postać XDR i odwrotnie;

  2. Procedury biblioteczne XDR służące do formatowania agregatów danych (tablic i struktur) używanych w definicjach komunikatów RPC;

  3. Procedury RPC czasu wykonania do wywołania procedury odległej, rejestracji usługi u zarządcy odwzorowań czy przekazania otrzymanego od klienta wywołania właściwej procedurze w zdalnie wywoływanym programie;

  4. Generator programów (inaczej generator procedur łącznikowych) produkujący wiele plików źródłowych (w języku C) potrzebnych do zbudowania aplikacji rozproszonej wykorzystującej mechanizm RPC.

  1. Funkcja wysyłająca komunikat RPC do serwera.

callrpc(host, prog, progver, procnum, inproc, in,
outproc, out)

gdzie:

host - nazwa komputera odległego

prog - numer programu

progver - wersja programu

procnum - numer procedury

inproc - lokalna procedura dokonująca serializacji
argumentów wywołania RPC wpisywanych do
wysyłanego komunikatu

in - argumenty RPC

outproc - lokalna procedura dekodująca wyniki wywołania
RPC

out - wskaźnik do obszaru pamięci przeznaczonego
na przechowywanie zdekodowanych danych.

clnt_create (host, prog, progver, proto)

Zastosowanie narzędzia rpcgen do generowania aplikacji rozproszonych

Rpcgen w implementacjach Sun RPC generuje większość kodu potrzebnego do zrealizowania - po stronie klienta i po stronie serwera - zdalnych wywołań wskazanych procedur. Kod jest produkowany w postaci źródłowej w języku C.

Pliki na wejściu i wyjściu rpcgen

Q.x - definicja interfejsu w języku rpcgen.

Q.h - definicje stałych i typów danych używanych w kodzie
wygenerowanym dla klienta i dla serwera;

Q_xdr.c - wywołania procedur XDR używanych przez klienta i przez
program serwera w celu dokonania serializacji argumentów;

Q_clnt.c - procedura łącznikowa klienta;

Q_svc.c - procedura łącznikowa serwera

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

W pogrubionych ramkach zaznaczono pliki dostarczone przez programistę.

Budowanie aplikacji rozproszonej w ośmiu krokach

  1. Skonstruuj i przetestuj zwykły, lokalny program użytkowy, rozwiązujący zadany problem.

  2. Podziel program na część lokalną i część zdalnie wywoływaną, określając zbiór procedur, które mają być przeniesione do komputera odległego. Umieść te procedury w osobnym pliku.

  3. Napisz specyfikację zdalnie wywoływanego programu przeznaczoną dla rpcgen. Specyfikacja musi zawierać:

  1. Użyj generatora rpcgen do sprawdzenia specyfikacji, a po uzyskaniu poprawnej - do utworzenie kodu źródłowego dla klienta i serwera.

  2. Napisz procedury sprzęgające dla strony klienta i serwera.

  3. Wykonaj kompilację i konsolidację plików tworzących program kliencki, tj.:

Utworzony plik wykonywalny może już być użyty jako klient.

  1. W ten sam sposób utwórz program serwera.

  2. Uruchom program serwera na komputerze odległym, a następnie wywołaj program klienta na komputerze lokalnym.

Q_svc.c

Q_xdr.c

Q.h

Q_clnt.c

rpcgen

Serwer

Klient

Kompilator
C

Kompilator
C

Q.x

Procedura sprzęgająca serwera

Zdalnie wywoływane procedury

Procedura sprzęgająca klienta

Program użytkowy klienta



Wyszukiwarka

Podobne podstrony:
EX RPC BAZARA, WAT, semestr VI, Obliczenia równoległe i rozproszone
Kompozyty z RPC
RPC
ELTRA RPC-6007, BLAUPUNKT ACD9430
netpr rpc
11 Orthorect RPC
40 RPC Orthorectification
Błąd RPC – Windows XP
Orthorect RPC
Protokoły końcowe UDP TCP RPC
Zdalne wywołanie procedury RPC

więcej podobnych podstron