stringtranslate.com

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), el cual se escribe como si fuera un procedimiento normal ( local) llamada a procedimiento, sin que el programador escriba explícitamente los detalles de la interacción remota. Es decir, el programador escribe esencialmente el mismo código ya sea que la subrutina sea local para el 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 programación orientada a objetos , los RPC se representan mediante invocació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 normalmente no son idénticos, por lo que las llamadas locales se pueden distinguir de las llamadas remotas. Las llamadas remotas suelen ser mucho más lentas y menos confiables que las llamadas locales, por lo que es importante distinguirlas. [ cita necesaria ]

Los 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 distintos espacios de direcciones virtuales, 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.

Historia y orígenes

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 a procedimiento remoto" en 1981. [1]

Las llamadas a procedimientos remotos utilizadas 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 consisten en llamadas a procedimientos entre procesos. [5]

Una de las primeras implementaciones prácticas fue realizada en 1982 por Brian Randell y sus colegas para su conexión Newcastle entre máquinas UNIX. [6] A esto pronto le siguió "Lupin" de Andrew Birrell y Bruce Nelson en el entorno Cedar de Xerox PARC . [7] [8] [9] Lupin generó automáticamente códigos auxiliares, proporcionó enlaces de tipo seguro y utilizó un protocolo eficiente para la comunicación. [8] Uno de los primeros usos comerciales de RPC fue por parte de Xerox con el nombre de "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 de métodos remotos (RMI), como en Common Object Request Broker Architecture (CORBA, 1991) y la invocación de métodos remotos de Java. Las RMI, a su vez, perdieron popularidad con el auge de Internet, especialmente en la década de 2000.

Paso de mensajes

RPC es un protocolo de solicitud-respuesta. El cliente inicia un RPC y envía un mensaje de solicitud a un servidor remoto conocido para ejecutar un procedimiento específico con los parámetros proporcionados. El servidor remoto envía una respuesta al cliente y la aplicación continúa su proceso. Mientras el servidor procesa la llamada, el cliente se bloquea (espera hasta que el servidor haya terminado de procesar antes de reanudar la ejecución), a menos que el cliente envíe una solicitud asincrónica al servidor, como XMLHttpRequest. Hay muchas variaciones y sutilezas en varias implementaciones, lo que da como resultado una variedad de protocolos RPC diferentes (incompatibles).

Una diferencia importante entre las llamadas a procedimientos remotos y las llamadas locales es que las llamadas remotas pueden fallar debido a problemas de red impredecibles. Además, las personas que llaman generalmente deben lidiar con tales fallas sin saber si realmente se invocó el procedimiento remoto. Los procedimientos idempotentes (aquellos que no tienen efectos adicionales si se llaman más de una vez) se manejan fácilmente, pero persisten suficientes dificultades como para que el código para llamar a procedimientos remotos a menudo se limite a subsistemas de bajo nivel cuidadosamente escritos.

Secuencia de eventos

  1. El cliente llama al código auxiliar del cliente. La llamada es una llamada a un procedimiento local, con parámetros insertados en la pila de la forma normal.
  2. El código auxiliar del cliente empaqueta los parámetros en un mensaje y realiza una llamada al sistema para enviar el mensaje. Empaquetar los parámetros se llama marshalling.
  3. El sistema operativo local del cliente envía el mensaje desde la máquina cliente a la máquina servidor.
  4. El sistema operativo local en la máquina del servidor pasa los paquetes entrantes al código auxiliar del servidor.
  5. El código auxiliar del servidor descomprime los parámetros del mensaje. Desempaquetar los parámetros se llama desempaquetar.
  6. Finalmente, el código auxiliar del servidor llama al procedimiento del servidor. La respuesta sigue los mismos pasos en sentido inverso.

Mecanismos de contacto estándar

Para permitir que diferentes clientes accedan a los servidores, se han creado varios sistemas RPC estandarizados. La mayoría de ellos utilizan un lenguaje de descripción de interfaz (IDL) para permitir que varias plataformas llamen al RPC. Los archivos IDL se pueden utilizar para generar código que sirva de interfaz entre el cliente y los servidores.

Análogos

Las implementaciones y análogos de RPC notables incluyen:

Específico del idioma

Específico de la aplicación

General

Ver también

Referencias

  1. ^ Bruce Jay Nelson (mayo de 1981). Convocatoria de Procedimiento a Distancia (Tesis Doctoral). Centro de investigación Xerox Palo Alto. PARC CSL-81-9 (También CMU-CS-81-119).
  2. ^ "Per Brinch Hansen • IEEE Computer Society". www.computer.org . Consultado el 15 de diciembre de 2015 .
  3. ^ Brinch Hansen, Per (1969). Software informático RC 4000: Sistema de multiprogramación (PDF) . Copenhague, Dinamarca: Regnecentralen.
  4. ^ James E. White (23 de diciembre de 1975). "Un marco de alto nivel para el intercambio de recursos basado en red". RFC 707 . Centro de investigación de aumentación . doi : 10.17487/RFC0707 . Consultado el 11 de julio de 2011 .
  5. ^ Brinch Hansen, Per (noviembre de 1978). "Procesos distribuidos: un concepto de programación concurrente" (PDF) . Comunicaciones de la ACM . 21 (11): 934–941. CiteSeerX 10.1.1.107.3108 . doi :10.1145/359642.359651. S2CID  11610744. 
  6. ^ Brownbridge, David R.; Marshall, Lindsay F.; Randell, Brian (1982). "La conexión de Newcastle" (PDF) . Software: práctica y experiencia . 12 (12): 1147-1162. doi :10.1002/spe.4380121206. S2CID  1840438. Archivado desde el original (PDF) el 16 de agosto de 2016 . Consultado el 16 de agosto de 2016 .
  7. ^ Birrell, Andrew D.; Nelson, Bruce Jay (1984). «Implementación de llamadas a procedimientos remotos» (PDF) . Transacciones ACM en sistemas informáticos . 2 : 39–59. doi :10.1145/2080.357392. S2CID  11525846.
  8. ^ ab "1994 - Andrew Birrell, Bruce Nelson: llamada a procedimiento remoto". Mención del Premio al Sistema de Software . Asociación para Maquinaria de Computación . Archivado desde el original el 2 de abril de 2012 . Consultado el 11 de julio de 2011 .
  9. ^ "Premio SIGOPS Salón de la Fama". Grupo de Especial Interés en Sistemas Operativos . Asociación para Maquinaria de Computación . Consultado el 11 de julio de 2011 .
  10. La AZ de los lenguajes de programación: Modula-3 - az de los lenguajes de programación Archivado el 5 de enero de 2009 en Wayback Machine . Mundo de la informática. Recuperado el 17 de julio de 2013.
  11. ^ tarpc, Google, 2 de noviembre de 2023 , consultado el 2 de noviembre de 2023
  12. ^ librevent: página principal. Mono.org. Recuperado el 17 de julio de 2013.
  13. ^ "Protocol Buffers: formato de intercambio de datos de Google". Sitio web del proyecto Google . Consultado el 1 de noviembre de 2011 .
  14. ^ "Marco RPC universal de código abierto gRPC". Sitio web del proyecto Google . Consultado el 7 de septiembre de 2016 .
  15. ^ "Kit de herramientas web de Google". Sitio web del proyecto Google . Consultado el 1 de noviembre de 2011 .

enlaces externos