RPC y Sockets: Fundamentos de la Comunicación en Sistemas Distribuidos

Clasificado en Informática

Escrito el en español con un tamaño de 5,08 KB

Llamadas a Procedimientos Remotos (RPC)

Originalmente, los sistemas utilizaban mensajes explícitos (send y receive) para la comunicación entre procesos. El objetivo es mejorar esto con llamadas a procedimientos que residen en otras máquinas.

El método propuesto para lograr esta comunicación es la Llamada a Procedimiento Remoto o RPC (Remote Procedure Call).

Desafíos en las Llamadas a Procedimientos Remotos

  • Los procedimientos residen en máquinas diferentes, lo que implica espacios de dirección distintos.
  • Los parámetros y resultados deben transferirse eficientemente entre máquinas.
  • Las máquinas pueden no ser idénticas (problemas de endianness, representación de datos).
  • Posibles fallas en las máquinas o la red.

Llamada a Procedimiento Convencional

Se realiza en una sola máquina.

Ejemplo:

count = read(fd, buf, nbytes);

Donde:

  • fd: entero que indica un archivo.
  • buf: arreglo de caracteres en el que se leen los datos.
  • nbytes: entero que indica cuántos bytes leer.

Llamada por Copia-Restauración

El procedimiento que realiza la llamada copia la variable en la pila (por valor) y luego la vuelve a copiar después de la llamada (sobrescribiendo su valor original). Esto se utiliza para valores iguales pero con semánticas diferentes, como en el lenguaje ADA.

Resguardos (Stubs) en la Arquitectura Cliente-Servidor

Para lograr transparencia, la función read (que es una interfaz entre el código de usuario y el sistema operativo) se reemplaza en RPC. En la biblioteca del cliente se coloca una versión diferente de read, conocida como el resguardo del cliente o client stub. En el servidor, se encuentra el resguardo del servidor o server stub.

A diferencia de la función read original, el resguardo del cliente empaca los parámetros en un mensaje y solicita que este mensaje sea enviado al servidor, ya que no interactúa con el sistema operativo local para obtener los datos.

Proceso de una Llamada a Procedimiento Remoto (RPC)

  1. El procedimiento cliente llama al resguardo del cliente de manera normal.
  2. El resguardo del cliente construye un mensaje y llama al sistema operativo (SO) local para enviarlo.
  3. El SO del cliente envía el mensaje al SO remoto.
  4. El SO remoto entrega el mensaje al resguardo del servidor.
  5. El resguardo del servidor desempaca los parámetros y llama al procedimiento del servidor.
  6. El servidor realiza el trabajo y devuelve el resultado al resguardo del servidor.
  7. El resguardo del servidor empaca el resultado en un mensaje y llama a su SO local para enviarlo.
  8. El SO del servidor envía el mensaje al SO del cliente.
  9. El SO del cliente entrega el mensaje al resguardo del cliente.
  10. El resguardo del cliente desempaca el resultado y lo devuelve al procedimiento cliente.

Comunicación Orientada a Mensajes

Aunque los procedimientos remotos contribuyen a mejorar la transparencia de acceso en sistemas distribuidos (SD), la comunicación orientada a mensajes no siempre es el enfoque más adecuado.

Por ejemplo, no siempre es posible asumir que el receptor está en ejecución al momento de realizar la petición, lo que requiere servicios alternativos.

Un componente adicional clave en este contexto es la mensajería.

Comunicación Transitoria Orientada a Mensajes

Los sistemas se basan en el modelo orientado a mensajes ofrecido por la capa de transporte. Un ejemplo claro de esto son los Sockets.

Sockets Berkeley

La capa de transporte se estandarizó para que los programadores pudieran utilizar todos los protocolos de mensajería. Esto, junto con las interfaces, facilita la portabilidad de una aplicación a una máquina diferente.

Definición de Socket

Un socket es un punto final de comunicación en el que una aplicación puede escribir información destinada a enviarse fuera de la red subyacente y desde el cual puede leerse información entrante.

Operaciones Comunes de Sockets

SOCKET
Crea un nuevo punto de comunicación.
BIND
Asocia una dirección local a un socket.
LISTEN
Anuncia la disposición para aceptar conexiones entrantes.
ACCEPT
Bloquea al proceso que llama hasta que llega una petición de conexión.
CONNECT
Activa el intento de establecer una conexión con un servidor remoto.
SEND
Envía algunos datos a través de la conexión.
RECEIVE
Recibe algunos datos a través de la conexión.
CLOSE
Libera la conexión y los recursos asociados al socket.

Entradas relacionadas: