Llamada a procedimiento remoto


En la computación distribuida , una llamada a procedimiento remoto ( RPC ) es cuando un programa de computadora hace que un procedimiento ( subrutina ) se ejecute en un espacio de direcciones diferente (comúnmente en otra computadora en una red compartida), que se codifica como si fuera una normal ( local) llamada al procedimiento, sin que el programador codifique explícitamente los detalles para la interacción remota. Es decir, el programador escribe esencialmente el mismo código ya sea que la subrutina sea local al programa en ejecución o remota. Esta es una forma de interacción cliente-servidor (la persona que llama es el cliente, el ejecutor es el servidor), generalmente implementada a través de un sistema de paso de mensajes de solicitud-respuesta. En el paradigma de la programación orientada a objetos, los RPC están representados porinvocación de método remoto (RMI). El modelo RPC implica un nivel de transparencia de ubicación , es decir, que los procedimientos de llamada son en gran medida los mismos, ya sean locales o remotos, pero generalmente no son idénticos, por lo que las llamadas locales se pueden distinguir de las llamadas remotas. Las llamadas remotas suelen ser órdenes de magnitud más lentas y menos confiables que las llamadas locales, por lo que es importante distinguirlas.

Las RPC son una forma de comunicación entre procesos (IPC), en el sentido de que diferentes procesos tienen diferentes espacios de direcciones: si están en la misma máquina host, tienen espacios de direcciones virtuales distintos, aunque el espacio de direcciones físicas sea el mismo; mientras que si están en diferentes hosts, el espacio de direcciones físicas es diferente. Se han utilizado muchas tecnologías diferentes (a menudo incompatibles) para implementar el concepto.

Los protocolos de solicitud-respuesta datan de la computación distribuida temprana a fines de la década de 1960, las propuestas teóricas de llamadas a procedimientos remotos como modelo de operaciones de red datan de la década de 1970 y las implementaciones prácticas datan de principios de la década de 1980. A Bruce Jay Nelson generalmente se le atribuye haber acuñado el término "llamada de procedimiento remoto" en 1981. [1]

Las llamadas a procedimientos remotos que se utilizan en los sistemas operativos modernos tienen sus raíces en el sistema de multiprogramación RC 4000 , [2] que utilizaba un protocolo de comunicación de solicitud-respuesta para la sincronización de procesos. [3] La idea de tratar las operaciones de red como llamadas a procedimientos remotos se remonta al menos a la década de 1970 en los primeros documentos de ARPANET . [4] En 1978, Per Brinch Hansen propuso Procesos distribuidos, un lenguaje para computación distribuida basado en "solicitudes externas" que consiste en llamadas a procedimientos entre procesos. [5]

Una de las primeras implementaciones prácticas fue en 1982 por Brian Randell y sus colegas para su Conexión de Newcastle entre máquinas UNIX. [6] Esto fue seguido pronto por "Lupin" de Andrew Birrell y Bruce Nelson en el ambiente Cedar en Xerox PARC . [7] [8] [9] Lupin generó automáticamente stubs, proporcionando enlaces de tipo seguro y usó un protocolo eficiente para la comunicación. [8] Uno de los primeros usos comerciales de RPC fue realizado por Xerox con el nombre "Courier" en 1981. La primera implementación popular de RPC en Unix fue RPC de Sun (ahora llamado ONC RPC), utilizado como base para Network File System (NFS).

En la década de 1990, con la popularidad de la programación orientada a objetos , se implementó ampliamente un modelo alternativo de invocación remota de métodos (RMI), como en Common Object Request Broker Architecture (CORBA, 1991) y la invocación remota de métodos Java . Las RMI, a su vez, perdieron popularidad con el auge de Internet, especialmente en la década de 2000.