Sistemas Distribuidos: Conceptos Clave, Tendencias y Desafíos de Comunicación


Características de los Sistemas Distribuidos

Introducción

Un sistema distribuido es un conjunto de computadoras en red que coordinan sus acciones intercambiando mensajes (mediante conmutación de paquetes), con el objetivo de compartir recursos. Estas computadoras pueden estar a cualquier distancia unas de otras.

Características Principales

  • Concurrencia: Permite la ejecución simultánea de múltiples programas en diferentes ordenadores, compartiendo los mismos recursos sin conflictos.
  • Ausencia de Reloj Global: Los programas se coordinan mediante el intercambio de mensajes, sin depender de un reloj global centralizado. La precisión de la sincronización de los relojes es inherentemente limitada.
  • Fallos Independientes: El fallo de un ordenador no compromete el funcionamiento del resto del sistema, que continúa operando.

Ejemplos de Sistemas Distribuidos

  • Motores de Búsqueda Web: Representan uno de los mayores desafíos históricos en el diseño de sistemas distribuidos.
  • Juegos Multijugador Masivos en Línea (MMORPGs): Requieren una infraestructura distribuida robusta para soportar miles de usuarios simultáneos.
  • Sistemas Financieros: Utilizan arquitecturas distribuidas para transacciones, mercados de valores y banca.

Tendencias en Sistemas Distribuidos

Los sistemas distribuidos se encuentran en un periodo de constante evolución, influenciados por las siguientes tendencias clave:

Redes Pervasivas e Internet Moderno

  • El internet moderno es un vasto conjunto de ordenadores interconectados de diversas maneras (cable, Wi-Fi, WiMAX, redes móviles), lo que lo convierte en un recurso accesible en cualquier momento y lugar, impactando cada vez más aspectos de la vida cotidiana.
  • Los protocolos permiten abstraer las tecnologías subyacentes de internet, facilitando que los programas se puedan ejecutar en cualquier sitio y enviar mensajes a cualquier nodo.
  • Es crucial distinguir entre Internet y la Web. Internet es el sistema distribuido que posibilita a los usuarios acceder a servicios como la World Wide Web, correo electrónico, transferencia de archivos, entre otros.
  • Todos estos servicios suelen estar protegidos por un firewall, que controla el tráfico de mensajes autorizados y no autorizados.

Computación Móvil y Ubicua

  • La computación móvil permite el acceso a redes privadas (hogar, trabajo, etc.) desde cualquier ubicación. Esto significa que podemos acceder a recursos compartidos como datos o impresoras desde un dispositivo remoto, gracias a protocolos como Mobile IP.
  • La computación ubicua implica la conexión de dispositivos pequeños y económicos a la red del hogar u oficina. Su comportamiento en la red está intrínsecamente ligado a su función física. Estos dispositivos pueden ser gestionados por los usuarios a través de sus dispositivos móviles.
  • Actualmente, esta tendencia da forma al Internet of Things (IoT) y al Internet of Everything (IoE).
  • Todo esto requiere una interoperación espontánea, es decir, que la interacción entre dispositivos sea rápida y conveniente, dado que las conexiones se establecen y terminan constantemente.
  • El proceso de Service Discovery (descubrimiento de servicio) permite que un dispositivo visitante se conecte a una red local y que esta detecte los servicios que dicho dispositivo ofrece.

Sistemas Multimedia Distribuidos

  • Estos sistemas distribuidos soportan servicios multimedia y deben ser capaces de transmitir y presentar tanto contenido multimedia estático como servicios multimedia continuos.
  • Esto implica la capacidad de almacenar audio y video, y transmitirlo en tiempo real si es necesario, manteniendo la integridad de los datos.
  • El Webcasting es la capacidad de transmitir audio o video por internet para que sea visualizado por múltiples usuarios simultáneamente.

Computación Distribuida como Utilidad

  • El usuario final alquila servicios o recursos ofrecidos por sistemas distribuidos. Estos recursos pueden ser:
    1. Físicos: Como almacenamiento y procesamiento, a través del acceso a centros de datos sofisticados. Esto incluye la virtualización de sistemas operativos.
    2. Software: Como servicios de correo electrónico, calendario, mapas, etc.

Cloud Computing: La Computación como Servicio

El Cloud Computing (Computación en la Nube) es el término que engloba esta visión de la computación como utilidad, donde todo se ofrece como un servicio de pago por uso. Permite acceder a servicios sin la necesidad de disponer de un dispositivo con altos requisitos de hardware.

Generalmente, se implementa en clusters de ordenadores que ofrecen escalabilidad y rendimiento. En ocasiones, también se utilizan blade servers, que son componentes computacionales mínimos con capacidad de almacenamiento y procesamiento.

Intercambio de Recursos en Sistemas Distribuidos

Cuando un sistema distribuido se desarrolla en un lenguaje orientado a objetos, los recursos se encapsulan como objetos. En este escenario, distinguimos:

  1. El servicio: Es la parte del sistema que gestiona una colección de recursos relacionados y presenta su funcionalidad a usuarios y aplicaciones.
  2. El servidor: Es el programa que acepta y responde a las solicitudes para usar un servicio.
  3. El cliente: Es el programa que realiza la petición para utilizar un servicio.

Todo este modelo se conoce como computación cliente-servidor. Cuando un cliente realiza una petición, se dice que invoca una operación en el servidor, un proceso denominado invocación remota.

Retos y Desafíos de los Sistemas Distribuidos

Heterogeneidad

  • La heterogeneidad se refiere a la variedad y diferencia en:
    1. Redes.
    2. Hardware.
    3. Sistemas operativos.
    4. Lenguajes de programación.
    5. Implementación por distintos desarrolladores.
  • Estas diferencias deben ser enmascaradas, permitiendo que cualquier equipo se comunique con otro.
  • Las distintas implementaciones de los protocolos, según el tipo de red, quedan enmascaradas por las abstracciones de los protocolos de comunicación. Los tipos de datos, que pueden representarse de manera diferente en distintas máquinas, deben ser serializados (marshaled) antes de ser intercambiados.
  1. Middleware: Es una capa de software que proporciona una abstracción para la programación y enmascara la heterogeneidad de las redes, hardware, sistemas operativos y lenguajes de programación subyacentes.
  2. Código Móvil (Mobile Code): Programa que puede ser transferido y ejecutado en la máquina de destino.

Apertura

  • La apertura es una característica que determina si un sistema puede ser aplicado y reimplementado de diversas maneras. La apertura de un sistema no es posible si sus interfaces clave no son publicadas.

Seguridad

  • La seguridad es fundamental, ya que los sistemas distribuidos pueden manejar información valiosa de los usuarios. Consta de tres componentes principales:
    1. Confidencialidad: Protección contra el acceso de individuos no autorizados.
    2. Integridad: Protección contra la alteración o corrupción de los datos.
    3. Disponibilidad: Protección contra interferencias que afecten el acceso a los recursos.

Escalabilidad

  • Un sistema distribuido es escalable si mantiene su eficiencia y rendimiento al aumentar el número de nodos o la carga de trabajo.

Manejo de Fallos

  • Los fallos en los sistemas distribuidos son inherentemente parciales; es decir, si un nodo falla, los demás pueden seguir funcionando.

Concurrencia

  • Varios clientes intentarán acceder a un mismo recurso simultáneamente. Si el servidor solo aceptara una solicitud a la vez, el rendimiento del sistema se vería severamente limitado.

Transparencia

  • La transparencia en sistemas distribuidos busca ocultar la naturaleza distribuida del sistema a los usuarios y programadores. Se necesita transparencia de:
    1. Acceso.
    2. Localización.
    3. Concurrencia.
    4. Replicación.
    5. Fallo.
    6. Movilidad.
    7. Prestaciones.
    8. Escalado.

Comunicación entre Procesos en Sistemas Distribuidos

Introducción a la Invocación Remota

Esta sección aborda cómo se comunican los procesos entre sí en un sistema distribuido, un concepto fundamental para la interacción remota.

  • Protocolos Request-Reply: Patrón de funcionamiento basado en el intercambio de mensajes bidireccional. Es fundamental en la computación cliente-servidor. Por ejemplo, HTTP es un protocolo request-reply.
  • RPC (Remote Procedure Call): Permite que un programa cliente invoque procedimientos de un programa servidor como si fueran llamadas locales.
  • RMI (Remote Method Invocation): Extiende el concepto de RPC a la programación orientada a objetos, permitiendo que un objeto en un proceso invoque métodos de un objeto en otro proceso. Se distingue entre RMI general y Java RMI.

Protocolos Request-Reply en Detalle

Comunicación Síncrona

En la comunicación síncrona, el cliente envía una petición y permanece bloqueado hasta que recibe la respuesta del servidor.

Este modelo es fiable, ya que la recepción de la respuesta confirma que la petición fue entregada y procesada correctamente.

Comunicación Asíncrona

La comunicación asíncrona se utiliza en escenarios donde los clientes pueden permitirse recibir las respuestas con cierto retraso.

UDP (User Datagram Protocol)

  • Aunque UDP es un protocolo no orientado a conexión y no fiable por sí mismo, la implementación del patrón request-reply sobre UDP puede incorporar mecanismos para garantizar el envío, donde la respuesta actúa como una confirmación (ACK).
Propiedades de los Protocolos Request-Reply sobre UDP:
  1. Identificación de Mensaje: Todos los mensajes intercambiados deben tener un identificador único, compuesto por un request ID y la identificación del emisor.
  2. Modelo de Fallos: Pueden presentarse fallos por omisión, desorden, fallos de proceso y fallos bizantinos.
  3. Tiempo de Espera (Timeout): En caso de pérdida de la respuesta, se retransmite la solicitud repetidamente hasta obtener una respuesta. Las solicitudes duplicadas recibidas por el servidor deben ser descartadas.
  4. Idempotencia de Operaciones: Si el servidor recibe múltiples solicitudes idénticas, solo procesará una y enviará una única respuesta. Una operación idempotente tiene el mismo efecto al ejecutarse una vez que al ejecutarse cincuenta veces.
  5. Historial de Solicitudes y Respuestas: Se mantiene un registro de las operaciones para verificar si ya han sido ejecutadas.
  6. Protocolos de Intercambio de Solicitud-Respuesta:
    • Request Protocol
    • Request-Reply Protocol
    • Request-Reply-Acknowledgment Protocol

TCP (Transmission Control Protocol)

  • TCP es ideal cuando los argumentos y resultados pueden ser de cualquier tamaño, ya que garantiza la entrega fiable y ordenada de los datos.
  1. TCP asegura que los mensajes sean enviados correctamente y en orden.
  2. Simplifica la implementación del patrón request-response.
  3. Si no se requieren todas las funcionalidades de TCP, puede ser más simple y eficiente utilizar UDP.

HTTP (Hypertext Transfer Protocol)

  • HTTP es un protocolo que especifica los mensajes, métodos, argumentos y resultados involucrados en un intercambio request-reply, así como la forma de serializarlos (marshallizar). Utiliza conexiones TCP persistentes.
  1. Negociación de Contenido: Las peticiones de los clientes pueden incluir información sobre las representaciones de datos que aceptan.
  2. Autenticación: Se puede implementar autenticación mediante credenciales y desafíos (por ejemplo, con contraseña).
  3. Los mensajes son serializados (marshaled) como texto ASCII.
  4. Los recursos se identifican mediante el uso de estructuras MIME (Multipurpose Internet Mail Extensions).

RPC (Remote Procedure Call)

El objetivo principal de RPC (Remote Procedure Call) es hacer que la programación de sistemas distribuidos se asemeje a la programación convencional, permitiendo que las funciones de máquinas remotas sean invocadas como si fueran locales.

Cuestiones de Diseño en RPC

  • Estilo de programación con interfaces.
  • Semánticas de llamada equivalentes a las locales.
  • Transparencia de acceso y localización.

Programación con Interfaces

  • Cada módulo tiene su interfaz definida.
  • Los módulos están implementados de tal manera que solo se expone la información disponible en la interfaz, permitiendo que la implementación interna pueda cambiarse sin afectar al usuario.
  • La interfaz de servicio (Service Interface) engloba la especificación de las funciones ofrecidas por un servidor, definiendo los tipos de sus argumentos. No permite acceso directo a las variables, solo mediante getters y setters. No se puede llamar a un objeto por referencia, ya que los espacios de direcciones están separados.
  • Los Lenguajes de Definición de Interfaz (Interface Definition Languages – IDL) permiten que un procedimiento escrito en un lenguaje pueda invocar a otro escrito en un lenguaje diferente, una capacidad también presente en RMI.

Semántica de Llamadas en RPC

Las llamadas a procedimientos locales se ejecutan exactamente una vez. Sin embargo, las llamadas RPC pueden realizarse de tres maneras principales para manejar la fiabilidad:

  1. Reintentar Solicitud: Retransmite la solicitud hasta que recibe una respuesta o asume que el servidor ha fallado.
  2. Filtrado Duplicado: Controla cuándo se usan retransmisiones y si se filtran o no las solicitudes duplicadas.
  3. Retransmisión de Resultados: Controla si se debe mantener un historial de mensajes para retransmitir resultados en caso de pérdidas.

Transparencia en RPC

El objetivo de RPC es ofrecer transparencia de:

  1. Localización.
  2. Acceso.

A pesar de estos esfuerzos, las llamadas RPC son inherentemente más vulnerables que las llamadas locales debido a fallos en la red, fallos en los ordenadores o procesos, y la latencia de la red. Por ello, las llamadas deben ser capaces de recuperarse de estos fallos.

Implementación de RPC

El proceso de implementación de RPC sigue una secuencia de pasos:

  1. El cliente inicia un programa.
  2. Consulta al stub de la función remota.
  3. El stub del cliente serializa (marshals) los argumentos y los pasa al módulo de comunicación.
  4. El módulo de comunicación del cliente envía una solicitud al módulo de comunicación del servidor.
  5. El módulo de comunicación del servidor pasa la solicitud al dispatcher, que selecciona el stub del servidor correspondiente según los parámetros recibidos.
  6. El stub del servidor deserializa (unmarshals) los argumentos y realiza la llamada a la función local.
  7. Una vez ejecutada la función, el resultado se devuelve al stub del servidor.
  8. El stub del servidor serializa (marshals) el resultado y lo envía al módulo de comunicación del servidor.
  9. El módulo de comunicación del servidor envía la respuesta (reply) al módulo de comunicación del cliente.
  10. El módulo de comunicación del cliente pasa la respuesta al stub del cliente, que la deserializa (unmarshals).
  11. Finalmente, el resultado se devuelve al programa del cliente.

RMI (Remote Method Invocation)

RMI (Remote Method Invocation) está estrechamente relacionado con RPC, pero se extiende a la programación orientada a objetos. Se programa con interfaces, se construye sobre un protocolo request-reply y ofrece transparencia de acceso y localización.

Diferencias entre RPC y RMI

  • En RMI, se utiliza la programación orientada a objetos para el desarrollo de sistemas distribuidos.
  • Todos los objetos RMI tienen una referencia de objeto única, lo que permite que estas referencias se pasen como parámetros en las invocaciones.

Cuestiones de Diseño en RMI

  • Modelo de Objetos Convencional: Un programa orientado a objetos consiste en una colección de objetos que interactúan entre sí, comunicándose mediante la invocación de métodos, el paso de argumentos y la recepción de resultados.
  • Modelo de Objetos Distribuidos: Pueden tener una arquitectura cliente-servidor donde el servidor es el objeto que contiene el método y el cliente es el objeto que realiza la invocación. También pueden estar replicados para mejorar el rendimiento y la tolerancia a fallos.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *