En este artículo, analizaremos el concepto de Llamada a procedimiento remoto (RPC) y su mecanismo de funcionamiento.
RPC es un mecanismo efectivo para construir sistemas cliente-servidor distribuidos. RPC mejora el poder y la facilidad de programación del concepto de computación cliente/servidor. Es un protocolo que permite que un software busque un servicio de otro programa en otra computadora en una red sin tener que conocer la red. El software que realiza la solicitud se denomina cliente y el programa que proporciona el servicio se denomina servidor.
Los parámetros de llamada se envían al proceso remoto durante una llamada de procedimiento remoto y la persona que llama espera una respuesta del procedimiento remoto. El flujo de actividades durante una llamada RPC entre dos sistemas de red se muestra en el siguiente diagrama.
Transparencia semántica:
- Transparencia sintáctica: Esto implica que debe existir una similitud entre el proceso remoto y un procedimiento local.
- Transparencia semántica: Esto implica que debe haber similitud en la semántica, es decir, el significado de un proceso remoto y un procedimiento local.
Trabajo de RPC:
Hay 5 elementos utilizados en el funcionamiento de RPC:
- Cliente
- Talón de cliente
- Tiempo de ejecución de RPC
- Talón de servidor
- Servidor
- Cliente: El proceso del cliente inicia RPC. El cliente realiza una llamada estándar, que desenstring un procedimiento correlacionado en el stub del cliente.
- Stub de cliente: RPC utiliza Stubs para lograr transparencia semántica. El cliente llama al stub del cliente. El stub del cliente realiza las siguientes tareas:
- La primera tarea realizada por el stub del cliente es cuando recibe una solicitud de un cliente, empaqueta (ordena) los parámetros y las especificaciones requeridas del procedimiento remoto/objetivo en un mensaje.
- La segunda tarea realizada por el stub del cliente es al recibir los valores de los resultados después de la ejecución, descomprime (desordena) esos resultados y los envía al Cliente.
- Tiempo de ejecución de RPC: El tiempo de ejecución de RPC se encarga de la transmisión de mensajes entre el cliente y el servidor a través de la red. La retransmisión, el reconocimiento, el enrutamiento y el cifrado son tareas realizadas por él. En el lado del cliente, recibe los valores de los resultados en un mensaje del lado del servidor y luego los envía al código auxiliar del cliente, mientras que, en el lado del servidor, RPC Runtime recibió el mismo mensaje del código auxiliar del servidor cuando se reenvía a la máquina cliente. También acepta y reenvía mensajes de solicitud de llamada de la máquina del cliente al stub del servidor.
- Stub del servidor: El stub del servidor realiza las siguientes tareas:
- La primera tarea realizada por el stub del servidor es que desempaqueta (descompone) el mensaje de solicitud de llamada que se recibe del RPC Runtime local y realiza una llamada regular para invocar el procedimiento requerido en el servidor.
- La segunda tarea realizada por el stub del servidor es que cuando recibe el resultado de la ejecución del procedimiento del servidor, lo empaqueta en un mensaje y le pide al RPC Runtime local que lo transmita al stub del cliente donde se desempaqueta.
- Servidor: después de recibir una solicitud de llamada de la máquina cliente, el código auxiliar del servidor la pasa al servidor. El servidor realiza la ejecución del procedimiento requerido y, finalmente, devuelve el resultado al stub del servidor para que pueda pasarse a la máquina cliente utilizando el RPC Runtime local.
Proceso RPC:
- El cliente, el apéndice del cliente y una instancia de RPC Runtime se ejecutan en la máquina cliente.
- Un cliente inicia un proceso de resguardo de cliente proporcionando parámetros de forma normal. El stub del cliente adquiere almacenamiento en el espacio de direcciones del cliente.
- En este punto, el usuario puede acceder a RPC mediante una llamada de procedimiento local normal. El tiempo de ejecución de RPC se encarga de la transmisión de mensajes entre el cliente y el servidor a través de la red. La retransmisión, el reconocimiento, el enrutamiento y el cifrado son tareas que realiza.
- En el lado del servidor, los valores se devuelven al código auxiliar del servidor, después de la finalización de la operación del servidor, que luego empaqueta (lo que también se conoce como cálculo de referencias) los valores devueltos en un mensaje. La capa de transporte recibe un mensaje del stub del servidor.
- El mensaje resultante es transmitido por la capa de transporte a la capa de transporte del cliente, que luego envía un mensaje al stub del cliente.
- El stub del cliente desempaqueta (lo que también se conoce como desorganizar) los argumentos devueltos en el paquete resultante, y el proceso de ejecución vuelve a la persona que llama en este punto.
Cuando el cliente procesa las requests llamando a un procedimiento local, el procedimiento pasará los argumentos/parámetros en formato de solicitud para que puedan enviarse en un mensaje al servidor remoto. Luego, el servidor remoto ejecutará la llamada al procedimiento local (según la solicitud que llegó de la máquina del cliente) y, después de la ejecución, finalmente devolverá una respuesta al cliente en forma de mensaje. Hasta este momento, el cliente está bloqueado, pero tan pronto como la respuesta provenga del lado del servidor, podrá encontrar el resultado del mensaje. En algunos casos, las RPC también se pueden ejecutar de forma asíncrona en las que el cliente no se bloqueará esperando la respuesta.
Los parámetros se pueden pasar de dos maneras. El primero es pasar por valor, mientras que el segundo es pasar por referencia. Los parámetros que reciben la dirección deben ser punteros cuando se la proporcionamos a una función. En Pasar por referencia, se llama a una función utilizando punteros para pasar la dirección de las variables. La llamada por valor se refiere al método de envío de los valores reales de las variables.
Los diseñadores del lenguaje suelen ser los que deciden qué método de paso de parámetros utilizar. A veces depende del tipo de datos que se proporciona. Los enteros y otros tipos escalares siempre se pasan por valor en C, mientras que las arrays siempre se pasan por referencia.
Publicación traducida automáticamente
Artículo escrito por annieahujaweb2020 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA