Está en la página 1de 39

Sistemas Distribuidos

Tema 1 – Introducción

Diego Sevilla Ruiz

DITEC
Facultad de Informática

Murcia, octubre de 2009

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Índice

I Sistemas Distribuidos: Introducción y Conceptos


I Sistemas Distribuidos: Arquitecturas
I Sistemas Grid
I Sistemas Operativos Distribuidos
I Introducción a los Patrones y las Herramientas

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos

Un sistema distribuido es aquel en el que los componentes


localizados en computadores, conectados en red, comunican y
coordinan sus acciones únicamente mediante el paso de mensajes.
[Colouris, p.1].
I Concurrencia de los componentes
I Carencia de un reloj global
I Fallos independientes

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Retos

I Heterogeneidad
I Redes
I Hardware
I Sistemas Operativos
I Middleware
I Extensibilidad
I Seguridad
I Escalabilidad
I Tratamiento de Fallos
I Concurrencia
I Transparencia

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Heterogeneidad

I Hardware, Sistema Operativo, lenguajes, Redes


I Razones:
I Ingeniería – Diferentes personas eligen diferentes soluciones
I Coste – Se compran recursos que se adapten a las necesidades
I Aplicaciones antiguas – Imaginemos una aplicación de reserva
de billetes en COBOL. Se tienen que amortizar las inversiones
I Hardware antiguo – El hardware nuevo que se compra es
necesariamente diferente.

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Heterogeneidad (ii)

I Herramientas:
I Protocolos de comunicación
I APIs estándar (Middleware)
I Sistemas Abiertos (i.e. CORBA, Internet, Globus etc.)
I Especificaciones públicas
I Mecanismos de comunicación estandarizados
I Utilizando hardware y software COTS

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Extensibilidad

I Característica de un sistema que permite añadirle nuevas


características y servicios de forma dinámica
I Herramientas:
I Sistemas Abiertos

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Seguridad

I Elemento más importante y más complejo (conexiones y


equipos físicamente distribuidos)
I Necesidad de:
I Autenticar a usuarios y recursos
I Definir roles y patrones de acceso
I Encriptar las comunicaciones
I Seguridad física
I Herramientas:
I PKIs, SSL, Servicios de Directorio, etc.
I No tratado en este curso

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Escalabilidad

I Un sistema es escalable si el aumento de demanda de servicios


se puede suplir con una aportación de recursos
I También: Un sistema puede ofrecer servicio a un número
potencialmente muy grande de demandas: degrada el tiempo
medio de respuesta, pero no se colapsa
I Prever el desbordamiento de recursos tanto software como
hardware
I Evitar cuellos de botella de prestaciones
I Soluciones:
I Uso de software eficiente en tiempo y espacio
I Patrones de diseño y de código (idiomas) para manejar
eficientemente conexiones, threads, etc.

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Fallos

I El rango de fallos en sistemas distribuidos es mayor que en


cualquier otro sistema
I Además, es interesante que los sistemas distribuidos «toleren»
fallos. ¿Por qué?
I Cuestiones:
I Detección de fallos (unos detectables, otros no)
I Enmascaramiento de fallos (p. ej. patrón Proxy)
I Redundancia y votado
I Disponibilidad
I No tratado en profundidad en esta asignatura

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Concurrencia

I Normalmente los datos se comparten


I Hay que establecer órdenes de acceso y procesos atómicos:
Transacciones
I Cuello de botella si los datos están almacenados en un sólo
ordenador
I Necesidad de transacciones distribuidas
I Problemas de consistencia
I A veces se necesitan coordinar varios procesos de varios
ordenadores (barreras). La mala programación de estos
procesos puede hacer el sistema muy ineficiente
I No tratadas en profundidad en esta asignatura

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Distribuidos: Transparencia

I El tópico más importante y el más difícil de conseguir


I Con transparencia, el desarrollo de aplicaciones distribuidas es
similar al de aplicaciones convencionales
I Delega en los niveles inferiores la complejidad y ofrece servicios
fiables:
I Transparencia de localización
I Transparencia de concurrencia
I Transparencia de replicación
I Transparencia ante fallos
I Transparencia ...

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – Sistemas Centralizados

I No escalables
I ¿Cómo añadir más recursos?

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – Primeros sistemas distribuidos

I Primeros programas distribuidos


I Conexiones explícitas, protocolos explícitos, herramientas
básicas
I P. ej. Demonios remotos UNIX

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – Primeros sistemas distribuidos (ii)

I Servicios básicos por parte del Sistema Operativo


I Direccionamiento
I Sockets
I Normalmente sólo implicaban a dos programas
(Cliente/Servidor)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – Internet/World Wide Web/CGI

Servidor
HTTP

Páginas
SGBD
HTML
HTTP Internet HTTP
Browser
TCP/IP
Prog. Servidor
CGI SMTP

Nivel 1 Nivel 2 Nivel 3

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – Internet/World Wide Web/CGI (ii)

I Sockets
I API de bajo nivel
I ¿Gestión de errores?
I No hay tipos... ¿comprobación?
I Protocolo CGI ad-hoc
I Stateless (salvo con otros hacks como los cookies)
I No soporte del servidor
I etc.

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Arquitecturas – 2 y 3 niveles

Cliente Servidor
Presentación Servidores BD
Lógica del negocio Sistemas Legacy
Acceso a datos etc.

Nivel 1 Nivel 2

Servidor
Cliente Lógica del negocio Servidores BD
Presentación Acceso a datos Sistemas Legacy
etc.

Nivel 1 Nivel 2 Nivel 3, ...

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
TPMs, Clusters, etc.

I En la práctica, se utilizan sistemas de n capas


I La distribución: múltiples clientes por Web (thin clients) y un
sistema de BBDD que está basado en clúster
I Clústers de bases de datos/procedimientos proporcionados por
paquetes comerciales (Oracle, DB/2, etc.)
I Gestión de MUCHOS clientes: Transaction-Processing
Monitors
Diego Sevilla Ruiz DITEC Facultad de Informática
Sistemas Distribuidos
Sistemas de más alto nivel: RPC

I Primer sistema en diferenciar interfaz/implementación


I Más alto nivel (comprobación de tipos)
I Interfaz ⇒ Stubs/Skeletons
I El interfaz se describe en C
I El compilador de RPC genera los stubs y los skeletons
I El programador realiza llamadas locales
I Los stubs y skeletons realizan el trabajo remoto
I TRANSPARENCIA LOCAL/REMOTA
I Ejemplo: SUN RPC
I Software intermedio: MIDDLEWARE

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Objetos Distribuidos: CORBA/RMI
I Muy parecido a RPC, pero basado en objetos
I El middleware ahora toma más importancia

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Message-Oriented Middleware

I Síncrono/asíncrono
I Normalmente Suscripción/Respuesta
I Documentos XML ⇒ Mensajes
I Loose Coupling

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Peer to Peer

I Modelo más descentralizado: todos aportan por igual o en la


medida de sus posibilidades
I El MOM también soporta esta arquitectura
I Ejemplos: JXTA
Diego Sevilla Ruiz DITEC Facultad de Informática
Sistemas Distribuidos
Web Services/SOA/REST

I Todo se hace accesible a través de servicios (web)


I Protocolos «estándar»: HTTP, XML, SOAP, WSDL
I ¿Qué pasa con los callbacks?
I ¿Manejo del estado?
I No hay soporte del servidor
Diego Sevilla Ruiz DITEC Facultad de Informática
Sistemas Distribuidos
Componentes: CCM/EJB

I Modelo contenedor
I Entidades redistribuibles binarias
I Unidades independientes de construcción de programas
I Unidades binarias de desarrollo, prueba y ensamblado
I Soporte run-time que permite instalar componentes
I Ofrece todos los servicios a los componentes instalados
I Aspect-Oriented Programming (AOP)
I Generación automática de código para cada aspecto

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Componentes: CCM/EJB (ii)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Modelos de Componentes Distribuidos

I Los componentes se encuentran distribuidos


I Diferentes organizaciones ofrecen componentes
I Bien para descargar
I Bien para utilizarlos remotamente bajo pago
I Necesidad de un entorno seguro, autenticado... p. ej. Grid
I Transparencia local/remota
I Paletas de componentes similares a Delphi o VB, pero
distribuidas

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Grid

I Ejemplifican la «Electrical Power Grid» americana


I Conectividad total, posible sustituto futuro a internet ⇒ Red
de servicios y computación
I Cuestiones:
I Seguridad: Sistemas basados en PKI y CAs globales
I Problemas políticos: diferentes organizaciones, incluso países
I Escalabilidad
I Descripción de servicios
I Algoritmos, herramientas, paradigmas...

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Sistemas Operativos Distribuidos

I Sistemas Distribuidos versus Sistemas Operativos Distribuidos?


I Polémica hace unos años
I Principales diferencias:
I Heterogeneidad (hw, so., etc.)
I Sistema débilmente acoplado vs. Sistema fuertemente acoplado
I Inmaduros en su comienzo
I Ahora sería el momento de avanzar en la dirección
I GNU/Hurd
I CODA
I Amoeba, MOSIX

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Introducción a los Patrones y Herramientas

Patrones
I Solución dada reiteradamente a un problema común
I «Best practices»
I Suben el nivel de abstracción, tratan problemas en abstracto
I En programación distribuida ⇒ poca experiencia
I Los utilizaremos para aprender sobre cómo construir mejores
aplicaciones distribuidas
I Elementos:
I Nombre, Contexto, Problema, Cuestiones relevantes, Solución
I Lenguaje de Patrones: Conjunto de patrones relacionados que
sirven para un fin común (POSA2)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Introducción a los Patrones y Herramientas (ii)

Idioms
I Patrones, pero de más bajo nivel
I Asociados a un lenguaje, normalmente C++
I No por ello menos importantes
I Importantísimos por ejemplo en el mapping de C++ a CORBA
I Ejemplo: «Scoped Locking»
I C++ Idioms: James O. Coplien
http://www1.bell-
labs.com/user/cope/Patterns/C %2b %2bIdioms/EuroPLoP98.html

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Introducción a los Patrones y Herramientas (iii)
Scoped Locking (POSA2, p. 325) (Resource Acquisition is Initialization)

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

int función(...)
{
pthread_mutex_lock(&mutex);

if (condición)
{
// lo que sea
pthread_mutex_unlock(&mutex);
return 1;
}
pthread_mutex_unlock(&mutex);
return 0;
}
Diego Sevilla Ruiz DITEC Facultad de Informática
Sistemas Distribuidos
Introducción a los Patrones y Herramientas (iv)

Scoped Locking (cont.)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Introducción a los Patrones y Herramientas (v)

Scoped Locking (cont.)


class SyncLock
{
public:
SyncLock(pthread_mutex_t* m)
{
mutex_ = m;
pthread_mutex_lock( mutex_ );
}

~SyncLock()
{
pthread_mutex_unlock( mutex_ );
}

private:
pthread_mutex_t* mutex_;
}

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
Introducción a los Patrones y Herramientas (vi)
Scoped Locking (cont.) – RAII http://www.hackcraft.net/raii/

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


int función(...)
{
SyncLock sl(&mutex);

if (condición)
{
// lo que sea
return 1;
}

return 0;
}

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
UML
Dia (Gnome)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
UML (ii)
Umbrello (KDE 3.2)

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
UML (iii)

SyncLock

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos
UML (iv)
SyncLock

Diego Sevilla Ruiz DITEC Facultad de Informática


Sistemas Distribuidos

También podría gustarte