Introducción a los Sistemas Distribuidos – Parte IV

Para ver los posts anteriores:

Mecanismos de Comunicación

Los mecanismos de comunicación en los sistemas distribuidos son aquellos que definen la manera en que intercambian información los componentes del sistema de manera tal que el funcionamiento global se perciba como un sistema único. Estos mecanismos de comunicación son un componente mas del sistema y se lo denomina middleware.

Tal como sucede con los otros componentes del sistema distribuido, el middleware cubre las necesidades de comunicación tanto a bajo nivel (comunicación a nivel física y de red) como a alto nivel (comunicación entre aplicaciones o procesos distribuidos).

El middleware a nivel del sistema operativo de red define el mecanismo de comunicación entre componentes.

Los mecanismos de comunicación entre procesos distribuidos son aquellos que se definen para dar respuestas a las siguientes preguntas:

  • ¿Como conversan los componentes?
  • ¿Como se sincronizan los requerimientos con las respuestas?
  • ¿Como se obtiene independencia de la representación física de datos?
  • ¿Que sucede cuando algunos de los extremos no esta disponible?

Estos mecanismos de comunicación o middleware se representan por debajo de la capa de aplicaciones y por sobre el sistema operativo tal como se ve aquí.

Los mecanismos para comunicar procesos entre diferentes computadoras pueden clasificarse como sincrónicos o asincronicos. Esta clasificación determina si las preguntas y respuestas entre componentes se sincronizan o no en el tiempo y a su vez esto determina si se requiere o no disponibilidad de los componentes para poder establecer la comunicación.

Entre las variantes sincrónicas encontramos sockets y RPC/RMI, mientras que MOM (Mes­sage Oriented Middleware) es un caso de mecanismo de comunicación asincronico.

Mecanismo de Comunicación por Sockets

El mecanismo de comunicación por sockets establece un canal de comunicación entre dos computadoras con una conexión ya existente a nivel de transporte. Generalmente se resuelve sobre el protocolo TPC pero existen mecanismos similares sobre otros protocolos.

Una vez establecido el canal de comunicación, el socket se define como un par que contiene la dirección IP de cada computador y un numero de puerto. A partir de allí, el programador debe resolver, mediante la escritura de lineas de código, todas las funcionalidades para que la comunicación a nivel de programa de aplicación pueda realizarse.

Para usar sockets es necesario:

  • Establecer la dirección del socket (IP, Nro. de puerto)
  • Conocer la dirección de destino
  • Usar las operaciones del socket

Las operaciones de los socket son:

  1. Se crea un socket con la función socket
  2. Los clientes deben conectarse con connect
  3. Los servidores aceptan conexiones de clientes usando la función accept
  4. Clientes y servidores intercambian datos con read y write
  5. Las conexiones se cierran con close

El mecanismo de comunicación por socket carece de un entorno que facilite las tareas del programador, solo dispone de un conjunto de operaciones básicas, siendo responsabilidad del programador resolver:

  • Diferencias en la representación de datos: cada computadora posee su propio hardware y sistema operativo, con lo cual es posible que se trate de arquitecturas diferentes y que los da­tos no sean codificados de la misma manera. En ese caso, el programador del socket debe tener en cuenta estas diferencias.
  • Manejo de errores: si se producen errores en la ejecución de los programas remotos, el pro­gramador deberá tener en cuenta los mismos y escribir el código necesario para manejar los mismos.
  • Asociación de cada componente distribuida: como se ha observado, se debe conocer de antemano las direcciones de las computadoras que participaran en la comunicación.

Mecanismo de Comunicacion por RPC/RMI

RPC (Remote Procedure Call) es un mecanismo de comunicación entre computadoras definido en la década del 60 y que se transformo mas tarde en uno de los primeros lenguajes para programación distribuida.

Se trata de un mecanismo de comunicación sincrónico que se caracteriza por incluir las siguientes características:

  • Lanzamiento y localización de funciones del servidor. El código compilado en RPC cuenta con un componente servidor y un componente cliente y esto determina que el compo­nente servidor pueda lanzarse y permanezca escuchando en una determinada localizacion.
  • Pasaje y definición de parámetros entre cliente y servidor. Si bien RPC intenta simu- lar el modelo call-return de la programación clásica (no distribuida), este modelo ejecutado en componentes distribuidas se tropieza con el hecho de que no existe el concepto de memoria compartida. RPC garantiza que la pila de ejecución del proceso remoto que se invoca reciba los parámetros y retorna los resultados. Para ello utiliza el modelo de pasaje de parámetros por entrada/salida en lugar del modelo por referencia, que seria inviable dada la falta de me­moria compartida.
  • Manejo de fallas y caídas. Las fallas de ejecución de programas en entornos distribuidos, conllevan a revisar diversas fuentes de error, en contraposición con los errores en entor­nos únicos, donde la cancelación por error de un programa es absoluta responsabilidad del único programa que se esta ejecutando.

En entornos distribuidos, la falla puede producirse por caída del medio de comunicación (red) o por caída de los extremos (computadores), debiendo considerarse una semántica para manejar dichos errores.

  1. Semántica idempotente: las operaciones se pueden realizar varias veces y siempre se obtiene el mismo resultado que si se realiza una vez.
  2. Semántica exactamente una vez: la operación se lleva a cabo una sola vez sin reintentos. En caso de falla, la operación queda sin ejecutarse.
  3. Mecanismo a lo sumo una vez: la operación se lleva a cabo una vez y se aplican tantos intentos como sean necesarios hasta garantizar que se ejecuto, pero solo una vez.

Los tres modelos semánticos se muestran en el siguiente gráfico, detallando su comportamiento en cada caso: retransmisión del requerimiento, filtro de duplicados y retransmisión del mensaje.

El lenguaje RPC posee un compilador que genera por cada código fuente, cuatro archivos: componente servidor, componente cliente, componente para resolver la representacion de datos (mediante mecanismo de serialization o marshaling) y el codigo ejecutable propia- mente dicho.

Una evolución del RPC se hizo presente ante la aparición del paradigma de programación orientado a objetos. Surge así RMI (Remote Method Invocation) que es una herramienta similar al RPC pero para Java y que es análoga al RPC pero aplicado a objetos distribuidos.

Mecanismo de Comunicacion Orientado a Mensajes (MOM)

El mecanismo de comunicación orientado a mensajes se basa en el concepto que los componentes distribuidos se comunican enviando mensajes de cualquier tipo y que quedan encolados hasta que son leídos por el destinatario.

Este mecanismo es asincronico y oculta totalmente los detalles del medio de comunicación (red) y de la arquitectura de los componentes, eliminando algunos de los inconvenientes de los métodos sincrónicos.

Sin embargo, aparece el inconveniente de decir si las colas de mensaje serán persistentes o no y, en caso que lo sean, como asegurar esa persistencia. Es decir, que pasa con los mensajes no persistidos si el componente que los ha recibido y no los ha procesado, deja de funcionar o cae en una condición de error.

Existen numerosos productos de software que otorgan distintas variantes de solución e implementación para los mecanismos orientados a mensajes.

Seguimos la próxima.

2 pensamientos en “Introducción a los Sistemas Distribuidos – Parte IV”

  1. Pingback: Los Sistemas Operativos y su Distribución – Parte V

  2. Pingback: Cliente/Servidor – Parte I

Dejá un comentario