Entendiendo RPC: Mecanismo, Datos e Implementaciones

Clasificado en Informática

Escrito el en español con un tamaño de 4,84 KB

Mecanismo de RPC

Para entender la RPC, primero hay que comprender cómo funciona una invocación de función en un lenguaje como C. Los parámetros pueden pasarse por valor o referencia, dependiendo del lenguaje y la implementación. En una RPC, la función local que el programador llama es realmente un "stub" que se encarga de comunicarse con el servidor. Este stub serializa los parámetros y los envía al servidor a través de la red. En el servidor, otro stub recibe la solicitud, desempaqueta los datos y llama a la función real. Luego, el resultado se envía de vuelta al cliente.

La secuencia de pasos de una RPC es:

  1. El cliente llama a una función local que en realidad es un stub.
  2. El stub del cliente empaqueta los parámetros y los envía al servidor.
  3. El sistema operativo del cliente transmite el mensaje a la red.
  4. El sistema operativo del servidor recibe el mensaje y lo pasa al stub del servidor.
  5. El stub del servidor extrae la información y llama a la función real.
  6. La función se ejecuta y retorna un resultado.
  7. El stub del servidor empaqueta la respuesta y la envía al cliente.
  8. El cliente desempaqueta la respuesta y obtiene el resultado.

De este modo, el cliente no percibe que la función ha sido ejecutada en otro sistema.

Paso por Referencia y Tipos de Datos en RPC

Dado que la comunicación en RPC ocurre a través de la red, no es viable enviar direcciones de memoria, ya que no tendrían sentido en la máquina remota. Se requieren técnicas de serialización para hacer que los datos sean independientes de la arquitectura.

El paso por referencia puede emularse mediante una copia/restauración de datos: el cliente envía una copia del objeto al servidor, este lo modifica y lo devuelve al cliente. Sin embargo, esta solución es limitada y no se aplica fácilmente a estructuras complejas como listas enlazadas o árboles.

El problema de serialización no es exclusivo de RPC, también surge al almacenar estructuras en un medio persistente como un disco, ya que los punteros pierden validez al recargarse en otro momento.

RPCs Asíncronas

En una RPC convencional, el cliente queda bloqueado hasta recibir la respuesta del servidor. Sin embargo, en algunos casos no es necesario esperar. Existen tres tipos de RPC asíncronas:

  • RPC con reconocimiento inmediato: El servidor envía un mensaje vacío confirmando que ha recibido la solicitud, pero sigue procesándola en segundo plano.
  • RPC con callback: Cuando el servidor finaliza la ejecución, invoca una función en el cliente para entregarle el resultado.
  • RPC sin confirmación: El cliente envía la solicitud y no espera ninguna respuesta, lo que maximiza la eficiencia pero elimina la certeza de que la petición llegó al servidor.

Implementaciones de RPC

ONC RPC de Sun Microsystems

La primera implementación importante fue ONC RPC de Sun Microsystems dentro de Open Network Computing. Para lograrlo, Sun desarrolló varias soluciones:

  • Codificación de datos: Se creó XDR (eXternal Data Representation), un formato binario independiente de la arquitectura para transmitir datos de manera uniforme.
  • Lenguaje de definición de interfaz (IDL): Se utilizó un lenguaje específico para definir la estructura de los procedimientos y sus parámetros, permitiendo la interoperabilidad entre distintos lenguajes.
  • Localización del servicio: Se implementó un servidor de directorio que permite a los clientes localizar dinámicamente los servicios en la red sin necesidad de conocer IPs o puertos.
  • Automatización: Se creó rpcgen, una herramienta para generar automáticamente código stub en C a partir de la especificación de los servicios en XDR.

ONC RPC sigue siendo ampliamente usado en sistemas Unix y es la base del sistema de archivos distribuido NFS.

Otras Implementaciones

DCE RPC fue una versión más avanzada creada por IBM y Digital Equipment Corporation. Microsoft adoptó esta tecnología y la extendió en Microsoft RPC, base de su sistema DCOM. Actualmente, Windows usa .NET Remoting y Windows Communication Foundation (WCF). Con la llegada de la programación orientada a objetos, se desarrollaron soluciones para invocar métodos en objetos remotos, resolviendo problemas como la gestión de instancias en el servidor.

Entradas relacionadas: