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
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).
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)
REST | SOAP |
---|---|
Orientado a RECURSOS que representan DATOS | Orientado a OPERACIONES que representan una LÓGICA |
Aprovecha todos los verbos HTTP | Sólo usa el verbo POST |
Soporta diferentes formatos de datos | Sólo soporta XML |
Orientado a la comunicación sin-estado (stateless), aunque soporta con-estado | Sin orientación, soporta ambas modalidades |
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.