Sistemas Distribuidos Sesión 1 Introducción a los Sistemas Distribuidos Diego Sevilla Ruiz DITEC Facultad de Informática Murcia, septiembre 2010 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 1 / 47
Índice Sistemas Distribuidos: Introducción y Conceptos Sistemas Distribuidos: Arquitecturas Sistemas Cloud Sistemas Operativos Distribuidos Introducción a los Patrones y las Herramientas Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 2 / 47
Sistemas Distribuidos (enfoque clásico) 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]. Concurrencia de los componentes Carencia de un reloj global Fallos independientes Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 3 / 47
Sistemas Distribuidos (actualmente) Uso ubícuo de Internet (y de sus protocolos) Sistemas abiertos La consistencia fuerte sólo se necesita en algunos casos En la mayoría de los casos, se puede tolerar una consistencia eventual (W. Vogels. Eventually Consistent. ACM Queue vol. 6, no. 6, December 2008.) 1 Uso ubícuo de cachés, sistemas aboertos, protocolos estándar (HTTP) homogeneización de datos y procesamiento, Map/Reduce, paralelismo funcional, automático, REST, etc. Aquí nos centraremos 1 http://queue.acm.org/detail.cfm?id=1466448 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 4 / 47
Sistemas Distribuidos: Retos Heterogeneidad Redes Hardware Sistemas Operativos Middleware Extensibilidad Seguridad Escalabilidad Tratamiento de Fallos Concurrencia Transparencia Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 5 / 47
Sistemas Distribuidos: Heterogeneidad Hardware, Sistema Operativo, lenguajes, Redes Razones: Ingeniería Diferentes personas eligen diferentes soluciones Coste Se compran recursos que se adapten a las necesidades Aplicaciones antiguas Imaginemos una aplicación de reserva de billetes en COBOL. Se tienen que amortizar las inversiones Hardware antiguo El hardware nuevo que se compra es necesariamente diferente. Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 6 / 47
Sistemas Distribuidos: Heterogeneidad (ii) Herramientas: Protocolos de comunicación APIs estándar (Middleware) Sistemas Abiertos (i.e. CORBA, Internet, etc.) Especificaciones públicas Mecanismos de comunicación estandarizados Utilizando hardware y software COTS Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 7 / 47
Sistemas Distribuidos: Extensibilidad Característica de un sistema que permite añadirle nuevas características y servicios de forma dinámica Herramientas: Sistemas Abiertos Loose Coupling Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 8 / 47
Sistemas Distribuidos: Seguridad Elemento más importante y más complejo (conexiones y equipos físicamente distribuidos) Necesidad de: Autenticar a usuarios y recursos Definir roles y patrones de acceso Encriptar las comunicaciones Seguridad física Herramientas: PKIs, SSL, Servicios de Directorio, Proxys anonimizadores, funciones de hash, etc. No tratado en profundidad en esta asignatura Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 9 / 47
Sistemas Distribuidos: Escalabilidad Un sistema es escalable si el aumento de demanda de servicios se puede suplir con una aportación de recursos 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 Prever el desbordamiento de recursos tanto software como hardware Evitar cuellos de botella de prestaciones Soluciones: Uso de software eficiente en tiempo y espacio Patrones de diseño y de código (idiomas) para manejar eficientemente conexiones, threads, etc. Uso de cachés, consistencia eventual, etc. Uso de algoritmos altamente paralelizables (programación funcional, lógica, algoritmos Map/Reduce), etc. Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 10 / 47
Sistemas Distribuidos: Fallos El rango de fallos en sistemas distribuidos es mayor que en cualquier otro sistema Además, es interesante que los sistemas distribuidos «toleren» fallos. Por qué? Cuestiones: Detección de fallos (unos detectables, otros no) Enmascaramiento de fallos (p. ej. patrón Proxy) Redundancia y votado Disponibilidad Idempotentibilidad No tratado en profundidad en esta asignatura Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 11 / 47
Sistemas Distribuidos: Concurrencia Normalmente los datos se comparten Hay que establecer órdenes de acceso y procesos atómicos: Transacciones Cuello de botella si los datos están almacenados en un sólo ordenador Necesidad de transacciones distribuidas Problemas de consistencia A veces se necesitan coordinar varios procesos de varios ordenadores (barreras). La mala programación de estos procesos puede hacer el sistema muy ineficiente No tratadas en profundidad en esta asignatura Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 12 / 47
Sistemas Distribuidos: Transparencia El tópico más importante y el más difícil de conseguir Con transparencia, el desarrollo de aplicaciones distribuidas es similar al de aplicaciones convencionales Delega en los niveles inferiores la complejidad y ofrece servicios fiables: Transparencia de localización Transparencia de concurrencia Transparencia de replicación Transparencia ante fallos Transparencia... Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 13 / 47
Arquitecturas Sistemas Centralizados No escalables Cómo añadir más recursos? Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 14 / 47
Arquitecturas Primeros sistemas distribuidos Primeros programas distribuidos Conexiones explícitas, protocolos explícitos, herramientas básicas P. ej. Demonios remotos UNIX Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 15 / 47
Arquitecturas Primeros sistemas distribuidos (ii) Servicios básicos por parte del Sistema Operativo Direccionamiento Sockets Normalmente sólo implicaban a dos programas (Cliente/Servidor) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 16 / 47
Arquitecturas Internet/World Wide Web/CGI Servidor HTTP Browser HTTP Internet TCP/IP HTTP Páginas HTML Prog. CGI SGBD Servidor SMTP Nivel 1 Nivel 2 Nivel 3 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 17 / 47
Arquitecturas Internet/World Wide Web/CGI (ii) Sockets API de bajo nivel Gestión de errores? No hay tipos de datos... comprobación? Protocolo CGI ad-hoc Stateless (salvo con otros hacks como los cookies) El servidor no da soporte para persistencia (bases de datos), transacciones, seguridad, gestión de usuarios, etc. Las aplicaciones tienen que implementar TODO, o usar frameworks etc. Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 18 / 47
Arquitecturas 2 y 3 niveles Cliente Presentación Lógica del negocio Acceso a datos Servidor Servidores BD Sistemas Legacy etc. Nivel 1 Nivel 2 Cliente Presentación Lógica del negocio Acceso a datos Servidor Servidores BD Sistemas Legacy etc. Nivel 1 Nivel 2 Nivel 3,... iego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 19 / 47
TPMs, Clusters, etc. En la práctica, se utilizan sistemas de n capas La distribución: múltiples clientes por Web (thin clients) y un sistema de BBDD que está basado en clúster Clústers de bases de datos/procedimientos proporcionados por paquetes comerciales (Oracle, DB/2, etc.) Gestión de MUCHOS clientes: Transaction-Processing Monitors Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 20 / 47
Sistemas de más alto nivel: RPC Primer sistema en diferenciar interfaz/implementación Más alto nivel (comprobación de tipos) Interfaz (lista de operaciones) Stubs/Skeletons El interfaz se describe en C El compilador de RPC genera los stubs y los skeletons El programador realiza llamadas locales Los stubs y skeletons realizan el trabajo remoto TRANSPARENCIA LOCAL/REMOTA Ejemplo: SUN RPC Software intermedio: MIDDLEWARE Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 21 / 47
Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 22 / 47
Objetos Distribuidos: CORBA/RMI Muy parecido a RPC, pero basado en objetos El middleware ahora toma más importancia Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 23 / 47
Message-Oriented Middleware Síncrono/asíncrono Normalmente Suscripción/Respuesta Documentos XML Mensajes Loose Coupling JMS, AMQP, ActiveMQ, ØMQ, MSMQ, D-Bus, etc. ESBs: Mensajería + Servicios de dominio Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 24 / 47
D-Bus Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 25 / 47
D-Bus (ii) 1 Message message = new Message ("/ remote / object / path ", " MethodName ", arg1, arg2 ); 3 Connection connection = getbusconnection (); connection. send ( message ); 5 Message reply = connection. waitforreply ( message ); if ( reply. iserror ()) { 7 //... } else { 9 Object returnvalue = reply. getreturnvalue (); } Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 26 / 47
D-Bus (iii) $ dbus - monitor 2 method call sender =:1.751 -> dest = org. gnome. GConf serial =2 path =/ org / gnome / GConf ; interface = org. gnome. GConf ; member = GetIOR method return sender =:1.4 -> dest =:1.751 reply_ serial =2 4 string " IOR :01..." signal sender = org. freedesktop. DBus -> dest =( null destination ) serial =1218 path =/ org / freedesktop / DBus ; interface = org. freedesktop. DBus ; member = NameOwnerChanged 6 string ":1.751" string ":1.751" Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 27 / 47
Peer to Peer Modelo más descentralizado: todos aportan por igual o en la medida de sus posibilidades El MOM también soporta esta arquitectura Ejemplos: JXTA Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 28 / 47
Web Services/SOA Todo se hace accesible a través de servicios (web) Protocolos «estándar»: HTTP, XML, SOAP, WSDL Qué pasa con los callbacks? Manejo del estado? No hay soporte del servidor Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 29 / 47
REST REpresentational State Transfer V. van Gogh. Noon: Rest From Work. 1889-90. Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 30 / 47
REST (ii) Patrón arquitectural de desarrollo de aplicaciones sobre el Web Desarrollado por Roy T. Fielding en su tesis doctoral Aprovecha el web tal y como está El web ha sido escalable hasta ahora por tener una serie de requisitos: se aplicarán a REST Identificación de recursos Todos los elementos accedidos remotamente tienen una identificación (URI). Se elige una representación para cada recurso (XML, YAML) Manipulación de recursos Hay operaciones para crear, modificar y borrar (CRUD) recursos Mensajes auto-descriptivos Los recursos incluyen metadatos (cache, validez, MIME). Incluidos en los headers de HTTP Los metadatos permiten tratar el mensaje Tejido hypermedia como representación del estado de la aplicación (HATEOAS) Los datos retornados pueden incluir enlaces a otros recursos Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 31 / 47
Componentes: CCM/EJB Componentes: Entidades redistribuibles binarias ejecutadas en un entorno de ejecución (run-time) Modelo contenedor Unidades independientes de construcción de programas Unidades binarias de desarrollo, prueba y ensamblado Soporte run-time que permite instalar componentes El entorno de ejecución (run-time) ofrece todos los servicios a los componentes instalados Seguridad, transacciones, persistencia, etc. Ofrecidos como aspectos (Aspect-Oriented Programming (AOP)) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 32 / 47
Componentes: CCM/EJB (ii) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 33 / 47
Modelos de Componentes Distribuidos Los componentes se encuentran distribuidos Diferentes organizaciones ofrecen componentes Bien para descargar Bien para utilizarlos remotamente bajo pago Necesidad de un entorno seguro, autenticado... p. ej. Grid Transparencia local/remota Paletas de componentes similares a Delphi o VB, pero distribuidas Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 34 / 47
Cloud Computing Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 35 / 47
Cloud Computing (ii) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 36 / 47
Cloud Computing (iii) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 37 / 47
Sistemas Operativos Distribuidos Sistemas Distribuidos versus Sistemas Operativos Distribuidos? Polémica hace unos años Principales diferencias: Heterogeneidad (hw, so., etc.) Sistema débilmente acoplado vs. Sistema fuertemente acoplado Inmaduros en su comienzo Ahora sería el momento de avanzar en la dirección GNU/Hurd CODA Amoeba, MOSIX Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 38 / 47
Introducción a los Patrones y Herramientas Patrones Solución dada reiteradamente a un problema común «Best practices» Suben el nivel de abstracción, tratan problemas en abstracto En programación distribuida poca experiencia Los utilizaremos para aprender sobre cómo construir mejores aplicaciones distribuidas Elementos: Nombre, Contexto, Problema, Cuestiones relevantes, Solución 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 Murcia, septiembre 2010 39 / 47
Introducción a los Patrones y Herramientas (ii) Idioms Patrones, pero de más bajo nivel Asociados a un lenguaje, normalmente C++ No por ello menos importantes Importantísimos por ejemplo en el mapping de C++ a CORBA Ejemplo: «Scoped Locking» C++ Idioms: James O. Coplien http://www1.belllabs.com/user/cope/patterns/c %2b %2bIdioms/EuroPLoP98.html Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 40 / 47
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 Murcia, septiembre 2010 41 / 47
Introducción a los Patrones y Herramientas (iv) Scoped Locking (cont.) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 42 / 47
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 Murcia, septiembre 2010 43 / 47
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 Murcia, septiembre 2010 44 / 47
Metamodelado Eclipse Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 45 / 47
Modelos SyncLock Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 46 / 47
Modelos (ii) SyncLock Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, septiembre 2010 47 / 47