# Remote Procedure Call

Remote procedure call (RPC, de l'anglès Crida a procediment remot) és una tecnologia que permet a un programa d'ordinador fer que una subrutina o procediment s'executi en un altre espai d'adreces (habitualment en un altre ordinador en una xarxa compartida) sense que el programador hagi de programar explícitament els detalls d'aquesta interacció remota. És a dir, el programador escriuria essencialment el mateix codi tant si la subrutina és local al programa executant, o remota. Quan el programari en qüestió és escrit fent servir principis d'orientació a objectes, RPC pot ser anomenat invocació remota o invocació de mètode remota.
Cal notar que hi ha moltes tecnologies diferents que es fan servir habitualment per a aconseguir això que són incompatibles, com ara ONC RPC i DCE/RPC.

## Història i orígens

La idea del RPC sorgeix el 1976, quan va ser descrita al RFC 707. Un dels primers usos de negocis de RPC va ser Xerox, sota el nom de "Courier" a 1981. La primera implementació popular de RPC a Unix va ser la de Sun Microsystems (ara anomenada ONC RPC), feta servir com a base per al NFS. ONC RPC encara es fa servir molt avui en diverses plataformes.
Una altra de les primeres implementacions d'Unix va ser el Network Computing System (NCS) de Apollo Computer. NCS va ser utilitzat posteriorment en la fundació de DCE/RPC al DCE de OSF. Una dècada més tard, Microsoft va adoptar DCE/RPC com a base per al seu mecanisme Microsoft RPC (MSRPC), i va implementar DCOM a sobre d'ell. Pel mateix temps (mitjans dels 90), ILU de Xerox PARC i el CORBA d'Object Management Group, van oferir un altre paradigma de RPC basat en objectes distribuïts amb mecanisme d'herència.

## Enviament de missatges

RPC és un obvi i popular paradigma per a implementar el model client-servidor de computació distribuïda. Un RPC és instanciat pel client enviant un missatge de petició a un servidor remot conegut per a executar el procediment especificat fent servir paràmetres subministrats. Una resposta és retornada al client on l'aplicació continua amb el seu procés. Existeixen moltes variacions i subtileses en diverses implementacions, resultant en una varietat de protocols RPC diferents (incompatibles). Mentre el servidor està processant la crida, el client queda bloquejat.
Una diferència important entre les crides a procediments remots i les crides locals és que les crides remotes poden fracassar a causa de problemes de xarxa imprevisibles. També, els cridadors generalment han de tractar aquests problemes sense saber si el procediment remot va ser realment invocat. Els procediments idempotents (aquells que no tenen efectes addicionals si són cridats més d'una vegada) són fàcilment tractats.

### Mecanismes de contacte estàndard

Per a permetre als servidors ser accedits per diferents clients, un nombre de sistemes RPC estandarditzats ha estat creat. La majoria d'aquests fan servir un Interface Description Language (IDL) per a permetre a diverses plataformes cridar al RPC.
Els arxius IDL poden ser utilitzats per a generar codi que faci d'interfície entre el client i el servidor. L'eina més habitualment utilitzada per a això és RPCGEN.

## Altres anàlegs a RPC

Anàlegs a RPC trobats a altres llocs:
* Java's Java Remote Method Invocation (Java RMI) API ofereix funcionalitat similar a mètodes estàndard UNIX RPC.
* XML-RPC és un protocol que fa servir XML per a codificar les seves crides i HTTP com a mecanisme de transport.
* Microsoft .NET Remoting ofereix facilitats per a sistemes distribuïts implementats a la plataforma Windows.
* RPyC implementa mecanismes RPC a Python, amb suport per a crides asíncrones.
* Facebook's Thrift protocol i framework.

## Referències

* RFC 1057 - Specifies version 1 of ONC RPC
* RFC 1831 - Specifies version 2 of ONC RPC
* Remote Procedure Calls (RPC) A tutorial on ONC RPC by Dr Dave Marshall of Cardiff University
* ↑ «Vidmate». Arxivat de l'original el 2018-03-01. [Consulta: 28 març 2021].

## Vegeu també

* Local Procedure Call
* SOAP
* HTTP
* ODBC
* Remote function call