Podręczny mini-słowniczek pojęć z zakresu RPC i RMI

Uwaga. Wszystkie opublikowane poniżej objaśnienia są natury mało formalnej. Służą one raczej dobremu zrozumieniu pojęć niż formułowaniu formalnych i dokładnych definicji.

Remote Procedure Call (RPC)

Remote Procedure Call jest jednym ze sposobów (paradygmatów) budowy aplikacji w środowisku rozproszonym i heterogenicznym, złożonym z komputerów różnej architektury. Istotą tego modelu jest sprowadzenie zagadnienia komunikacji pomiędzy procesami na odległość do zwykłego mechanizmu wywoływania procedury. Proces udostępniający taką procedurę nazywany jest serwerem natomiast proces ją wywołujący jest klientem. Oprogramowanie pośredniczące (middleware) typu RPC zazwyczaj dostarcza odpowiednich bibliotek i narzędzi, które umożliwiają zdalne wywoływanie procedur czy funkcji. Przykładami standardów opierających się na RPC są Sun RPC, CORBA, Web Services, DCOM, RMI.

Remote Method Invocation (RMI)

Remote Method Invocation to implementacja środowiska do tworzenia aplikacji rozproszonych w języku Java. RMI jest oparte na założeniach RPC przeniesionych na grunt programowania obiektowego. Biblioteka języka Java definiuje i implementuje wszystkie narzędzia potrzebne do zdalnego wywoływania metod poprzez sieć. W celu przekazania obiektów na odległość RMI wykorzystuje wewnętrzny protokół komunikacji sieciowej, JRMP (Java Remote Method Protocol).

Serializacja (serialization) obiektu

Serializacja to proces zapisu obiektu w postaci sekwencyjnego strumienia danych (bajtów). Dzięki takiej transformacji obiekt można przechowywać w pamięci masowej w prostej postaci tablicy danych. Serializacja ułatwia też transport obiektu poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja, czyli odtworzenie oryginalnego obiektu z jest zapisu w sekwencji bajtów.

Marshalling

Marshalling obiektu jest procesem zbliżonym do serializacji. Poprzez marshalling rozumie się przekształcenie obiektu z postaci w jakiej jest przechowywany w pamięci do jakiejkolwiek postaci pozwalającej przechować go poza pamięcią. Dla przykładu zapis obiektu w relacyjnej bazie danych także jest procesem marshallingu. W tym znaczeniu serializacja jest jednym z rodzajów marshallingu.

Stub obiektu zdalnego

Aby ukryć skomplikowany protokół komunikacji umożliwiający zdalne wywołanie metody, systemy typu RPC stosują tzw. stuby. Dla każdego obiektu który może być wywołany zdalnie (czyli serwera) generowane są dwa stuby: jeden właśnie dla serwera a drugi dla klienta. Stub klienta jest przedstawicielem serwera na odległość, tj. klient de facto wywołuje operacje używając stub, natomiast ten przekazuje takie wywołanie do stubu po stronie serwera (w technologii RMI zwanego skeletonem), który z kolei komunikuje się juz z samym serwerem. Odpowiedź pokonuje tę samą drogę w odwrotnym keirunku. Stuby są odpowiedzialne za odpowiedni marshalling obiektów przekazywanych jako argumenty czy przekazywanych jako odpowiedzi. Jak widać, cała komunikacja związana ze zdalnym wywołaniem metody odbywa się tylko pomiędzy stubami.

Skeleton

Skeleton jest obecnie używaną nazwą na stub znajdujący się po stronie serwera. Tak więc potocznie pod pojęciem stub rozumie się zawsze domyślnie stub po stronie klienta natomiast skeleton oznacza stub po stronie serwera. W technologii RMI zarówno stub jak i skeleton są generowane automatycznie.


Tomasz Gubała