Remote procedure call

Een remote procedure call, kortweg RPC, is een technologie die een computerprogramma op één bepaalde computer toestaat om code uit te voeren op een andere machine zonder dat de programmeur de code expliciet hiervoor geschreven heeft.

RPC is een eenvoudig en populair paradigma voor de implementatie van het client-servermodel in een gedistribueerd systeem. Een RPC wordt geïnitialiseerd door de aanvrager (client) die een boodschap, of request message, naar een server stuurt om daar een bepaalde procedure te laten uitvoeren door gebruik te maken van de meegegeven argumenten. Na afhandeling van de procedure stuurt de server een antwoordbericht of reply terug naar de client. Op deze methode bestaan er verschillende variaties waardoor er meerdere (incompatibele) RPC-protocollen bestaan.

Interface Description Language

[bewerken | brontekst bewerken]
Zie Interface description language voor het hoofdartikel over dit onderwerp.

Om servers toegankelijk te maken voor verschillende clientmachines zijn een aantal gestandaardiseerde RPC systemen noodzakelijk. Op die manier kan men abstractie maken van platformspecifieke verschillen, of kan men programma's in meerdere programmeertalen met elkaar laten communiceren.

De meeste van deze systemen gebruiken een interface description language (IDL) om meerdere platformen de mogelijkheid te geven een RPC op te roepen. Deze taal beschrijft de interface eenduidig, onafhankelijk van de machine of de uiteindelijk gebruikte programmeertaal. Voorbeelden van zulke systemen zijn onder meer Sun RPC (ook gekend onder de naam ONC RPC), de Distributed Computing Environment (DCE), SAP RFC (Remote Function Call), Microsofts DCOM (gedeeltelijk gebaseerd op DCE) en CORBA.

Transparantie

[bewerken | brontekst bewerken]
Overzicht van een RPC-systeem

De communicatie tussen de verschillende partijen in een RPC-systeem is bij voorkeur zo transparant mogelijk. Dit betekent dat de ontwikkelaar code kan schrijven voor procedures die op een andere machine zullen worden uitgevoerd, zonder de details van de achterliggende communicatie te kennen.

Om de communicatie tussen de client en de server te realiseren, gebruiken verschillende RPC-systemen en programmeertalen stubs of proxy-objecten. Als men een remote procedure aanroept, wordt deze door de client stub afgehandeld, net zoals een lokale procedure in een aparte code aangeroepen zou worden. In plaats van de procedure zelf uit te voeren, zal de stub echter een bericht opstellen en dit naar de server sturen. Op de server wordt dit bericht vervolgens door een server stub ontvangen, die het bericht uitpakt, de variabelen doorgeeft en de juiste functie oproept in de server. Het resultaat wordt vervolgens terug aan de server stub gegeven, die het op zijn beurt weer naar de client stub verzendt. Deze pakt het bericht terug uit en geeft het resultaat door op dezelfde manier als wanneer de procedure lokaal uitgevoerd zou zijn. Stubs worden meestal gegenereerd vertrekkend vanuit de IDL-beschrijving van de interface.

Het idee achter RPC gaat terug tot RFC707 uit 1976. Hierin wordt "resource sharing" en het basisidee achter RPC voorgesteld. Courier van Xerox was een van de eerste implementaties, alsook NCS van Apollo Computer, dat als basis voor DCE/RPC werd gebruikt. Microsoft heeft een eigen implementatie van RPC, namelijk MSRPC en DCOM, dat dan weer gebaseerd is op CORBA. Een van de meest gebruikte RPC-systemen is de RPC-implementatie van Sun, ook wel bekend als ONC RPC. Dit wordt ook gebruikt als basis voor hun Network File System (NFS).

In de Java-omgeving, die in de jaren 90 ontstond, werd Remote Method Invocation (RMI) geïntroduceerd, wat conceptueel een gelijkaardige technologie is.

Tegenwoordig wordt er meer en meer gebruikgemaakt van XML als IDL en HTTP als netwerk protocol. Het grote voordeel van deze manier van werken, beter bekend als webservices, is de eenvoud en standaardisatie: XML en HTTP zijn algemeen erkend in de meeste moderne besturingssystemen. Voorbeelden van zo'n systeem zijn SOAP, afkomstig van XML-RPC, en JAX-RPC.

[bewerken | brontekst bewerken]
  • (en) RFC 1057: Remote Procedure Call Protocol specificatie: Versie 2
  • (en) RFC 1831: Remote Procedure Call Protocol Specificatie: Versie 2