Comunicación directa en SSDD

En los Sistemas Distribuidos encontrábamos que había dos grandes paradigmas de comunicación entre entidades/nodos: la comunicación directa y la indirecta.

Dentro de la comunicación directa tenemos destacados:

  • RPC (Remote Procedure Call).
  • RMI (Remote Method Invocation).
  • Web Services (SOAP y REST).

RPC (Remote Procedure Call)

Método de comunicación directa en un SD, escrito en C (orientado a funciones) que consiste en la abstracción de los mecanismos de comunicación entre cliente y servidor a la hora de invocar un procedimiento que se encuentre implementado en el servidor (por ejemplo, solicitar al servidor que se reduzca la cantidad de dinero de una cuenta bancaria, para que los cambios sean globales al sistema bancario).

IDL: Esta abstracción es posible gracias al IDL (Interface Definition Language), un lenguaje común que genera el código intermedio entre cliente y servidor para llevar a cabo la comunicación remota cuando se compile el programa. Este código es transparente a la interfaz de programación y es el que provoca las llamadas al procedimiento remoto.

Stubs: El código generado por el compilador en base al IDL serán los stubs del cliente (aka proxy) y del servidor (aka Skeleton), también llamados «resguardos». El cliente llamará a su proxy (el trozo de código que implementa la comunicación con el servidor) cuando llame al procedimiento remoto desde su máquina local; y de la misma forma el skeleton, en un bucle infinito, esperará peticiones de procedimientos remotos que serán derivados a la función «real» de la máquina local cuando le llegue una petición (y finalmente se devuelve el resultado al cliente).

Se usa un dispatcher para ofrecer más de un procedimiento remoto a la vez (traducido sería un loop que recibe todas las llamadas a procedimiento remoto y las deriva a su correspondiente skeleton)

Serialización: Para enviar los datos de un sistema a otro, los datos primero se serializan, proceso también conocido como marshalling, aka aplanamiento de datos, aka pasar de formato nativo a formato canónico usando el formato XDR (eXternal Data Representation):

  • Unidad de información = 4 bytes
  • Orden Big Endian
  • Coma flotante en formato IEEE 754

Binder: Los servicios de RPC se registran en un servidor de nombres (Service Name o Binder) en el puerto 111 para poder devolverle al cliente la dirección del servicio que solicita (con el método LookUp( NOMBRE_SERVICIO) ).

RMI (Remote Method Invocation)

RMI es RPC diseñado para Java y orientado a objetos, lo que significa que el método remoto ahora está ligado a un objeto remoto (cuya interfaz de comunicación/servicio está definida por la propia definición de la clase a la que pertenece dicho objeto), en lugar de ser un método global a todo el sistema.
Cada servicio es una clase (definida en Java, no es un lenguaje neutral como IDL).
Cada instancia del servicio es un objeto.

RMI Middleware: RMI utiliza el middleware JRMP (Java Remote Transport) para serializar/des-serializar los datos y controlar los canales de comunicación.

Invoke: El stub del cliente ahora utilizará este método (transparente a la interfaz de programación) para invocar al objeto remoto (en lugar de llamar al procedimiento remoto directamente)
RMI = enviar servidor + objeto remoto + operación + parámetros
RPC = enviar servidor + operación + parámetros

Mensajes en RMI

El dispatcher tendrá ahora, además de los servicios que ofrece (las clases) las instancias de dichos servicios/clases, en tablas de registro (primero se localiza al servicio/clase remoto y luego al objeto para finalmente ejecutar el método y devolver un resultado o una excepción).

RMI in a nutshell

Tolerancia a fallos

Retransmisión del mensaje Filtro de duplicados Re-ejecutar orden ó Re-enviar resultado QoS resultante
N N.A. N.A. 0 (recepción de 0 a 1 veces, fire and forget, at most once)
S N Re-exe 1 (recepción de 1 a N veces, at least one)
S S Re-reply 0 (recepción de 0 a 1 veces)

Web Services

Se basan en la utilización de recursos remotos detrás de una URL.
Los dos métodos WS más utilizados son SOAP (muy similar a RPC) y REST que es como SOAP pero más ligero.

El proceso de marshalling es negociado en la comunicación cliente-servidor (normalmente se usan mensajes basados en XML)

SOAP

Simple Object Access Protocol.
Utiliza:

  • WSDL (Web Service Definition Languaje) para describir las operaciones del servicio y los protocolos de codificación y de comunicación.
  • UDDI (Universal Description, Discovery and Integration Site) para las transacciones ACID y Reliable Message.

REST

Similar a SOAP pero más ligero: sólo hace uso de los verbos HTTP para describir los servicios.

REST vs SOAP

REST vs SOAP (Características)

RESTSOAP
Orientado a RECURSOS que representan DATOSOrientado a OPERACIONES que representan una LÓGICA
Aprovecha todos los verbos HTTPSólo usa el verbo POST
Soporta diferentes formatos de datosSólo soporta XML
Orientado a la comunicación sin-estado (stateless), aunque soporta con-estadoSin orientación, soporta ambas modalidades

Deja un comentario