You are on page 1of 33

Sistemas Distribuidos

Tema 4 Patrones para mejorar la eciencia y escalabilidad de arquitecturas distribuidas

Diego Sevilla Ruiz


DITEC Facultad de Informtica

Murcia, 2012

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

1 / 33

ndice

INTRODUCCIN
Aspectos especcos de diseo para aplicaciones distribuidas Eciencia y escalabilidad en sistemas distribuidos

PATRONES PARA EFICIENCIA Y ESCALABILIDAD


Diseo de interfaces remotas (fat operations, coarse object models, wrapper) Escalabilidad en el nmero de objetos y clientes Manejo de threads de ejecucin

Bibliografa: F. Bellas (3.5), Henning & Vinoski (12.6), Schmidt (POSA2)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

2 / 33

Aspectos de diseo para app. distribuidas

El diseo de aplicaciones distribuidas est guiado por los requisitos de los sistemas de computacin:
Eciencia Mantenimiento Escalabilidad

Pero adaptados a las aplicaciones distribuidas:


Diseo de interfaces adecuados a las llamadas remotas Manejo eciente de threads y servicio concurrente Tratamiento de mltiples clientes Protocolos de comunicacin exibles (multicast, etc.) Servicios y componentes reutilizables Administracin sencilla de servicios Procesos de deployment automatizables

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

3 / 33

Diseo de interfaces remotas

Lo adaptaremos para IDL:


Buen estilo de IDL Diseo de IDL eciente Patrones de IDL

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

4 / 33

Buen estilo de IDL

Evitar el espacio de nombres global Un mdulo por chero IDL Nada fuera de un mdulo Mdulos anidados si es necesario/til uso de #ifdef:
// Fichero Control.idl #include <YYY.idl> #ifndef _CONTROL_IDL_ #define _CONTROL_IDL_ module Control { ... }; #endif

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

5 / 33

Diseo de IDL eciente

Granularidad
Algunos ORBs optimizan las llamadas locales Los objetos de granularidad baja pueden ser tiles

Sin embargo, en general


Los objetos pueden estar en remoto Para obtener los datos de un objeto, hacen falta varias llamadas remotas Patrn Fat Operations

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

6 / 33

Diseo de IDL eciente

Un diseo tan sencillo como: interface SensorAire readonly attribute readonly attribute readonly attribute readonly attribute }; { float float float float temperatura; presin; humedad; velocidad_viento; 0.01 s 24 s (mem. compartida) 60 s (TCP) 220 s (TCP+Ethernet) 220.000 s 460 s (x478!!)

Mismo proceso: Distintos procesos, mismo sistema: Distintos procesos, mismo sistema: Distintos procesos, diferente sistema: 1000 invocaciones: 250 llamadas con todos los parmetros:

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

7 / 33

Diseo de IDL eciente

Se puede convertir: interface SensorAire { struct DatosSensor { float temperatura; float presin; float humedad; float velocidad_viento; }; DatosSensor getDatos(); };

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

8 / 33

Diseo de IDL eciente


interface SensorAire { typedef sequence<float> FloatSeq; struct DatosSensor { FloatSeq temperatura; FloatSeq presin; FloatSeq humedad; FloatSeq velocidad_viento; }; DatosSensor getDatos(); }; Arrays vs. secuencias
Las secuencias son de tamao variable Slo se envan los elementos que hay
Diego Sevilla Ruiz (DITEC Facultad de Informtica) Sistemas Distribuidos Murcia, 2012 9 / 33

Diseo de IDL eciente

Los sistemas de mensajera ponen la lgica en los datos


Se utilizan rdenes case para identicar los distintos mensajes Difcil correccin:
Pueden no existir casos para los mensajes nuevos Un mensaje mal decodicado no produce un error de compilacin (puede permanecer oculto mucho tiempo)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

10 / 33

Diseo de IDL eciente

Hay que evitar esto en IDL: interface MessagePort { void send(in any message); void recv(in any message); } Falta de tipado estricto Eciencia: conversin del tipo any

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

11 / 33

Diseo de IDL eciente


Implementacin de recv:
void MessagePort::recv(CORBA::Any& message) { MessageType1_var m1; MessageType2_var m2; message >>= m1; if (m1 != NULL) // MessageType1 { } message >>= m2; if (m2 != NULL) // MessageType2 { } ... }

Tipos no comprobados/incompatibles entre versiones?


Diego Sevilla Ruiz (DITEC Facultad de Informtica) Sistemas Distribuidos Murcia, 2012 12 / 33

Diseo de IDL eciente

Se convierte cada mensaje en una operacin IDL


El nombre de la operacin es el tipo de mensaje Los parmetros son los datos del mensaje

Ventajas en espacio y tiempo


El compilador y el linkador puede eliminar los mensajes sin usar Optimizaciones en tiempo de compilacin

Cdigo para nuevos mensajes o con tipos no adecuados


Encontrado en tiempo de compilacin No descubierto en tiempo de ejecucin

La herencia se puede usar para agrupar operaciones relacionadas (mixins)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

13 / 33

Diseo de IDL eciente Excepciones

Se deben usar slo en circunstancias excepcionales Utilizacin de la capacidad de incluir datos para establecer el contexto de la excepcin Sin embargo, no es bueno tener un nico tipo de excepcin y diferenciar por los datos miembro
Se evita lgica innecesaria para evitar las excepciones no deseadas

Es importante pensar sobre cmo las aplicaciones responden a la excepcin


Los casos de uso guan los patrones de uso El nombre de la excepcin y los datos miembros tienen sentido en el cliente?

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

14 / 33

Diseo de IDL eciente Excepciones (ii)

exception RuntimeError { string whatHappened; }; vs. exception RuntimeError {}; exception CalcError : RuntimeError {}; exception NoMoreMemory : RuntimeError {}; ...

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

15 / 33

Patrones de IDL Factoras

Encapsulan la inicializacin de un sistema Alternativas


Servicio de nombres Sistemas propietarios de enlazado (bind) Mejores para referencias iniciales

Se deben usar para ensamblar el sistema (dnde y cmo crear los objetos)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

16 / 33

Patrones de IDL Factoras

Una factora de factoras tambin es interesante para encapsular la construccin del sistema: interface WeatherStation { AirSensorFactory air_sensors(); WaterSensorFactory water_sensors(); };

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

17 / 33

Escalabilidad, eciencia y mantenimiento

Patrn wrapper layers Gestin de mltiples clientes Gestin de mltiples threads

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

18 / 33

Layers

Interfaz de usuario (no CORBA)


L ID

Capa de traduccin y delegacin (CORBA)

Capa de traduccin y delegacin (CORBA)

Lgica de negocio (no CORBA)

Cliente
Capa de traduccin y delegacin

Servidor

Muy pequea con respecto al resto de la aplicacin Patrn Adapter (Wrapper Facade, POSA2, p. 47)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

19 / 33

Layers ventajas

Menos cdigo dependiente de CORBA


Menos errores en mappings complejos (C++)

Slo un grupo de programadores tiene que conocer CORBA La aplicacin se puede probar de forma independiente Aisla al programa de la tecnologa utilizada

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

20 / 33

Layers inconvenientes

Aade ms sobrecarga (otro nivel ms)


Necesidad de hacer conversin de tipos

Requiere ms cdigo
Necesidad de generar nuevos tipos y APIs equivalentes a los que aparecen en IDL

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

21 / 33

Manejo de threads de ejecucin

Introduccin Modelos de un nico thread


Patrn reactor/proactor

Modelos de threads:
Thread per request Thread per client (per connection) Thread pool

Conguracin del ORB

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

22 / 33

Manejo de threads de ejecucin

Cada POA puede especicar la poltica de threads


SINGLE_THREAD ORB_CTRL_MODEL el ORB decide Un ORB con n POAs SINGLE_THREAD puede tener n threads de ejecucin, pero cada POA recibir las peticiones serializadas

CORBA no estandariza los modelos de concurrencia


Normalmente como extensiones propietarias Estandarizado en RT-CORBA, pero no trasladado a CORBA (?)

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

23 / 33

Manejo de threads nico thread

Cliente 1 Cola de peticiones Cliente 2

Cliente 3

Servidor

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

24 / 33

nico thread Patrn Reactor

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

25 / 33

nico thread Patrn Reactor


El Dispatcher usa el demultiplexor sncrono El Dispatcher implementa la funcin handle_event para noticar a cada handler Tambin posee operaciones para aadir y eliminar handlers La clase Event_Handler es genrica, los distintos handlers heredan de ella Caso genrico: handlers de cheros y llamada select()
Tambin incluye un timeout que hace que el bucle pueda integrar a otros bucles de eventos (GUI, X11, Qt, etc.)

Los ORBs de un nico thread utilizan este patrn para sus conexiones Ver tambin: Patrn Proactor, Acceptor/Connector, Asynchronous Completion Token, etc. (POSA1/2)
Diego Sevilla Ruiz (DITEC Facultad de Informtica) Sistemas Distribuidos Murcia, 2012 26 / 33

Manejo de threads Thread per request

Thread pet. 1 Cliente 1


peti cin

Thread pet. 2
1

Cliente 2

peticin 2
petici n3

Thread pet. 3

Cliente 3

Servidor

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

27 / 33

Manejo de threads Thread per request

El cdigo de cada thread debe ser thread-safe Se crea un thread para cada peticin No es muy escalable, y
Funciona bien con pocas peticiones que se pueden ejecutar en paralelo El tiempo de respuesta es largo Puede dejar exhaustos los recursos del servidor (no de threads, por ejemplo) Memoria, manejo de threads, cambios de contexto, creacin y destruccin de threads, etc.

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

28 / 33

Manejo de threads Thread per Client

Thread cliente 1 Cliente 1


pet ici n peti 1 cin 4

Cola Cola Cola

Thread cliente 2 Thread cliente 3

Cliente 2

peticin 2
n3 petici

Cliente 3

Servidor

Bueno para muchas peticiones y pocos clientes (orientado a sesin) Reusa conexiones entre ordenadores

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

29 / 33

Manejo de threads Thread pool

Pool de threads Cliente 1


pet ici n peti 1 cin 4

Cola de peticiones

Cliente 2

peticin 2
n3 petici

Cliente 3

Servidor

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

30 / 33

Manejo de threads Thread pool

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

31 / 33

Manejo de threads Thread pool

Al principio se crean un conjunto de threads Se elige un thread de los del pool (o cada thread coge una peticin cuando no tiene nada que hacer) Permite tener acotados los recursos
Nmero de threads jo o acotado No incurre en creacin de nuevos threads

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

32 / 33

Thread-Specic Storage

El manejo de memoria compartida entre threads a veces causa muchos retrasos:


candados mtodos sincronizados para el acceso a estructuras de datos

Abstraccin: Objeto especco para un thread


Disponibles en las libreras de Threads (pthreads, JTC...) En JTC, es la clase JTCTSS. El almacenamiento se realiza por thread. Ideal para almacenar sesiones.

Diego Sevilla Ruiz (DITEC Facultad de Informtica)

Sistemas Distribuidos

Murcia, 2012

33 / 33

You might also like