Apelul de procedură de la distanță (uneori apel de procedură de la distanță ; RPC din engleză apel de procedură de la distanță ) este o clasă de tehnologii care permit programelor să apeleze funcții sau proceduri într-un spațiu de adrese diferit (pe noduri la distanță sau într-un sistem independent terț pe același nodul). De obicei, o implementare a tehnologiei RPC include două componente: un protocol de rețea pentru comunicarea client-server și un limbaj de serializare a obiectelor (sau structuri pentru RPC-uri non-obiective). Diferitele implementări au arhitecturi diferite și diferă ca capabilități: unele implementează arhitectura SOA , altele implementează CORBA sau DCOM . La nivelul de transport, RPC-urile folosesc în principal protocoalele TCP și UDP , cu toate acestea, unele sunt construite pe HTTP (care încalcă arhitectura ISO/OSI , deoarece HTTP nu este inițial un protocol de transport).
Există multe tehnologii care oferă RPC, printre care:
Ideea apelării procedurilor de la distanță este de a extinde mecanismul de transfer de control și date în cadrul unui program care rulează pe același nod la transferul de control și date prin rețea. Instrumentele de apel de procedură de la distanță sunt concepute pentru a facilita organizarea calculatoarelor distribuite și crearea de sisteme de informații distribuite client-server. Cea mai eficientă utilizare a RPC se realizează în acele aplicații în care există o comunicare interactivă între componentele de la distanță cu un timp de răspuns mic și o cantitate relativ mică de date transferate. Astfel de aplicații sunt numite RPC-oriented.
Caracteristicile principale ale unui apel de procedură la distanță sunt:
Implementarea apelurilor de la distanță este mult mai complicată decât implementarea apelurilor de procedură locală.
Deoarece procedurile de apelare și de apelare rulează pe noduri diferite, au spații de adrese diferite și acest lucru creează probleme la transmiterea parametrilor și a rezultatelor, mai ales dacă mașinile rulează sisteme de operare diferite sau au arhitecturi diferite (de exemplu, little endian sau little endian este folosit ) . Deoarece RPC nu se poate baza pe memoria partajată, aceasta înseamnă că parametrii RPC nu trebuie să conțină pointeri către locații de memorie non-stiva și că valorile parametrilor trebuie copiate de pe un computer pe altul. Pentru a copia parametrii procedurii și rezultatul execuției prin rețea, aceștia sunt serializați .
Spre deosebire de un apel local, un apel de procedură la distanță folosește în mod necesar stratul de transport al arhitecturii rețelei (de exemplu , TCP ), dar acesta rămâne ascuns dezvoltatorului. În plus, la implementarea RPC participă cel puțin două procese - unul pe fiecare nod, iar dacă unul dintre ele se blochează, pot apărea următoarele situații: dacă procedura de apelare se blochează, procedurile apelate de la distanță vor deveni orfane și dacă procedurile de la distanță se blochează. vor deveni „părinți săraci” ai procedurilor de apelare, care vor aștepta un răspuns de la procedurile de la distanță fără niciun rezultat.
Există, de asemenea, o serie de probleme asociate cu eterogenitatea limbajelor de programare și a mediilor de operare: structurile de date și structurile de apel de procedură acceptate în orice limbaj de programare nu sunt acceptate în același mod în toate celelalte limbaje. Astfel, există o problemă de compatibilitate care nu a fost încă rezolvată fie prin introducerea unui standard general acceptat, fie prin implementarea mai multor standarde concurente pe toate arhitecturile și în toate limbile.
Central pentru implementările RPC este subsistemul de transport, care este responsabil pentru gestionarea conexiunilor de ieșire și de intrare. Funcțiile sale includ suport pentru conceptul de „limită de mesaje” pentru protocoalele de transport care nu îl acceptă direct (TCP) și suport pentru livrare garantată pentru protocoalele de transport care nu îl acceptă (UDP).
Componenta de grupare a firelor de execuție (doar apele) - Oferă un context de execuție pentru codul apelat prin rețea.
Componenta de marshaling (analog cu „ serializarea ”) asigură că parametrii de apel sunt împachetati într-un flux de octeți într-un mod standard care este independent de arhitectură (în special, ordinea octeților dintr-un cuvânt). În special, poate afecta matricele, șirurile de caractere și structurile către care indică parametrii pointerului.
O componentă separată poate fi responsabilă pentru criptarea pachetelor și semnarea lor digitală .
Un bloc separat de funcții este autentificarea și autorizarea, care asigură transmiterea în rețea a informațiilor care identifică subiectul care efectuează apelul.
În unele implementări ale RPC (.NET Remoting), limitele subsistemului sunt interfețe polimorfe deschise și este posibil să scrieți propria implementare a aproape tuturor subsistemelor enumerate. În alte implementări (DCE RPC pe Windows) nu este cazul.
TCP /IP pe straturi ale modelului OSI | Protocoale de bază|
---|---|
Fizic | |
canalizat | |
reţea | |
Transport | |
sesiune | |
Reprezentare | |
Aplicat | |
Altele aplicate | |
Lista de porturi TCP și UDP |