Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Paradigmas de la Computación Distribuida

[date: 22-12-2024] [last modification: 20-01-2025]
[words: 896] [reading time: 5min] [size: 9719 bytes]

Tema introductorio a la Computación Distribuida. Se discutirán los temas principales que se tratarán en posteriores artículos.

Paradigma
Patrón, ejemplo o modelo simplificado para ayudar a resolver o estudiar un problema: aporta una estrategia base desde la que partir.

Nótese que, en la práctica, muy pocos sistemas siguen un único paradigma el pie de la letra: o realizan algunas modificaciones, o combinan varios de ellos dependiendo del caso.

Características

Las características de una aplicación o programa distribuido son:

Abstracciones

Abstracción

Proceso mental que consiste en extraer las características esenciales e ignorar detalles superfluos, con el propósito de simplificar determinadas operaciones y realizar la programación más fácil.

Se trata de uno de los principios de la programación: esconder los detalles de un sistema complejo para hacerlo más accesible.

Lógicamente, esto causa un peor rendimiento y dificulta las optimizaciones.

$$ \text{Abstracción} \uparrow\uparrow \implies \text{Rendimiento} \downarrow\downarrow $$
Middleware
Software intermedio que aumenta el nivel de abstracción, normalmente en forma de librerías o frameworks. En algunos casos puede actuar de intermediario entre varios procesos independientes.

Se debería escoger el nivel más alto de abstracción que permita hacer la solución. Se prima la velocidad de desarrollo, no la eficiencia del programa final.

Esto puede dar lugar los problemas que se discuten en Computer, Enhance!, Thirty million line problem, Preventing the Collapse of Civilization, Better Software Conference y muchos otros seguidores de esta nueva tendencia de volver a software más sencillo. Sin embargo, la abstracción es la dirección que lleva la industria.

Paradigmas

Paso de mensajes
  • Nivel más bajo
  • Operaciones básicas: Envía / Recibe, Conecta / Desconecta (si es orientado a conexión)
  • Abstracción: Entrada/Salida como un archivo (API de sockets)
  • PROBLEMA: No gestiona sincronización
Arquitectura Cliente - Servidor
  • Abstracción eficiente para proveer servicios de red
  • Roles asimétricos
    • El servidor escucha conexiones de forma pasiva.
    • El cliente inicia la conexión.
    • Luego, dependiendo del protocolo, pueden suceder muchas cosas
  • Sincronización simplificada: realizar una petición y esperar repuesta (siguiendo un protocolo).
  • PROBLEMA: modelo centralizado, el servidor es el cuello de botella.
Igual a Igual
Peer to Peer
  • Se intercambian recursos/servicios de forma directa
  • Los usuarios funcionan como clientes y servidores
  • Cada usuario tiene roles iguales y responsabilidades equivalentes
  • Algunos funcionan como routers para llegar a un tercero
  • Más eficiente: escala mejor que cliente-servidor
  • Menos centralizado: mayor privacidad
Sistema de mensajes
  • Sofisticación del paso de mensajes
  • Un servidor actúa de intermediario
    • Enruta los mensajes
    • Los procesos envía de forma asíncrona y desacoplada
  • El receptor almacena los mensajes en colas
  • PROBLEMA: las colas tienen capacidad máxima, cuando están llenas se pueden perder mensajes
Tipos
Punto a punto (asíncrono)
  • Sistema de mensajes intermediario
  • Procesos desacoplados
  • Los receptores tienen colas de mensajes

==> Equivalente a paso de mensajes + hilos

Publica / Subscribe

Más eficiente que hacer pulling constantemente

  • El cliente se subscribe a un evento
  • Cuando se da dicho evento, el servidor notifica a todos los subscriptores
  • Abstracción útil en comunicaciones multicast
Llamar a procedimientos remotos
Remote Procedure Call (RPC)
  • Llamadas a funciones o procedimientos en máquinas remotas como si fuesen locales

  • Hacerlo manualmente es propenso a errores ==> Se delega al compilador
    Se generan automáticamente unos proxies

    • Proxy cliente: serializa parámetros y envía el mensaje.
    • Proxy servidor: deserializa parámetros, llama al método real y devuelve el resultado.

    Todo esto es transparente al programador

  • APIs principales

    • Open Network Computing RPC (Sun Microsystems)
    • Open Group Distributed Computing Environment

    ==> ambas usan la herramienta rpcgen para generar los proxies

Objetos distribuidos
  • Versión Orientada a Objetos: Objetos (métodos + atributos) distribuidos en máquinas diferentes
  • Los objetos remoto proporcionan servicios a través de sus métodos
Tipos
Remote Method Invocation (RMI)
  • Equivalente Orientado a Objetos de RPC
  • Invoca los métodos de un objeto remoto situado en otra máquina

==> Ejemplo: Java RMI

Network Services
Servicios de red
  • Los objetos de servicios se registran en un directorio
  • Hay un directorio por cada máquina
  • Se accede al directorio para:
    • Ver los servicios disponibles
    • Saber dónde están y obtener una referencia
  • Cada entrada del directorio tiene una validez máxima

==> Extensión de RMI. Ejemplo: Jini

Object Request Broker (ORB)
  • El ORB reenvía la petición al objeto deseado
  • Similar a RMI y Network Services, pero:
    • El ORB es un middleware para acceder a objetos remotos
    • Registro único
    • Sus entradas no caducan
    • Interoperabilidad con objetos heterogéneos

==> Base de la arquitectura CORBA

Object Spaces
Espacios de objetos
  • Paradigma OO más abstracto
  • Los objetos están en una memoria compartida en la red
  • Un proveedor coloca sus objetos a modo de entradas
  • El cliente accede a las entradas directamente
  • Esconde la localización real de los objetos

==> Ejemplo: JavaSpaces

Basado en componentes
  • Principales objetos diseñados para interactuar entre sí a través de interfaces estándar.
  • Los servidores de aplicaciones son middlewares para acceder a los objetos y componentes correspondientes.
Agentes móviles
  • Un agente es un programa transportable
  • Tiene la capacidad de saltar entre máquinas: uso de máquinas virtuales (JVM)
  • Lo hace siguiendo un itinerario
  • En cada parada, el agente accede a los recursos necesarios y realiza tareas
  • Complejos lenguajes, ontologías y protocolos para comunicarse
Aplicaciones colaborativas
  • Los procesos participan en una sesión colaborativa
  • Cada uno puede contribuir una parte o la totalidad
  • Implementaciones
    • Multicasting
    • Pizarras virtuales que permiten leer/escribir en una pantalla compartida
Volver a Redes y Computación Distribuida Siguiente: Paso de Mensajes