Source: https://www.slideshare.net/jguerra42/sistemas-distribuidos-diseo-e-implementacion
Timestamp: 2017-08-18 07:47:56+00:00

Document:
Arquitectura de sistemas distribuidos by Juan Pablo Bustos... 54174 views
Modelos de los sistemas distribuidos by Margarita Labastida 5456 views
Sistemas operativos distribuidos by sergiooney 22842 views
Sistemas Distribuidos by Leopoldo Capa 5944 views
Definiciones Sistemas Distribuidos by Jorge Guerra 16418 views
Tipos de sistemas distribuidos. by Universidad de Gu... 7848 views
, Docente Universitario y desarrollador de tecnologias basadas en IoT
Libro en version preliminar del libro de Sistemas Distribuidos del docente universitario Jorge Guerra de la Universidad Nacional Mayor de San Marcos
Alejandro C.R , STUDENT
muy bueno. grasias
Nelson Solorzano at COILE S.A.
excelente me ayudo mucho en el trabajo
AjSux Juárez , Drummer at Movic Records
Valeria Rincon at UPC
Reyna Velita , Administradora Site FE at Universidad Inca Garcilaso de la Vega
toto at toto
El Negro Ozoria at Red Bull
1. (Version Preliminar) Lima, Peru 2010
2. Sistemas Distribuidos: Conceptos e implementación actuales 1 Índice Presentación………………………………………………………………………………………………………….……..5 Introducción……………………………………………………………………………………………………….………..6 Orientación Metodológica………………………………………………………………………………….…………7 Primera Unidad…………………………………………………………………………………………………….……8 Definición y Conceptos de Sistemas Distribuidos…….……………………………………….8 Sumario………………………………………………………………………………………………………………...…….8 Lección 1……………………………………………………………………………………………………………….……..9 Hacia los Sistemas Distribuidos……………………………………………………………………………….….9 1.1 Conceptos que originan los SS.DD……………………….………………………………………………9 1.2 Necesidad empresarial de los SS.DD…………………….…………………………………………..10 1.3 El papel de Internet como impulsor en los SS.DD………………………………………….…10 1.4 Conceptos técnicos……………………………………………………………………………….…………….11 1.4.1 Modelo cliente/servidor………………………………………………………………….……………..11 1.4.2 Comparación entre diferentes implementaciones cliente/servidor…………..…12 1.4.3 Nuevo modelo de software…………………………………………………………………………..12 Lección 2 Definiciones de SS.DD……………………………………………………………………………………………….14 2.1 Cambio de paradigma………………………………………………………………………………………...15 2.2 Características de los SS.DD……………………………………………………………………………….16 2.3 Características de la transparencia de los SS.DD………………………………………………18 2.3.1 Compartición de recursos………………………………………………………………………………18 2.3.2 Sistema abierto……………………………………………………………………………………………..19 2.3.3 Escalabilidad………………………………………………………………………………………….………19 2.3.4 Tolerancia a fallos………………………………………………………………………………………….20 2.3.5 Seguridad………………………………………………………………………………………………………20 2.4 Ventajas e inconvenientes de los SS.DD……………………………………………………………21 2.5 Aplicaciones de los SS.DD…………………………………………………………………………………..22 2.6 Casos de uso de los SS.DD…………………………………………………….………….……………….22 2.6.1 Empresa Boeing…………………………………………………………………………………………..22 2.6.2 Mercedes Benz……………………………………………………………………………………………..23 Lección 3 Funcionamiento de un Sistema Distribuido……………..……………………………………….………24 3.1 Arquitecturas software usadas en SS.DD………………………………………………………..…24 3.1.1 Arquitectura basada en capas……………………………………………..……………………….24 3.1.2 Arquitectura basada en objetos……………………………………………..…………………….25 3.1.3 Arquitectura basada en eventos……………………………………………………………………25 3.1.4 Arquitectura basada en datos compartidos………………………………………………….26 3.2 Arquitecturas hardware de un SS.DD………………………………………………………………..27 3.3 Acceso a servicios en un SS.DD………………………………………………………………………….28 3.3.1 Modelo multiproceso……………………………………………………………..………………………28 3.3.1.1 Modelo de memoria compartida…………………………………………..………………..28 3.3.1.2 Modelo con memoria distribuida…………………………………………………………….29 3.3.2 Paso de mensajes…………………….…………………………………………………………………..29 3.4 Comunicación cliente/servidor, uso de interface y stub……………………………………29 3.5 Paradigma de computación en red……………………………………………………………………..30 3.5.1 Paradigma cliente/servidor…………………………………………………………………………..31 3.5.2 Paradigma código por demanda……………………………………………………………………31 3.5.3 Paradigma de agente móvil…………………………………………………..……………………..31 3.6 Sistemas Distribuidos de gran escala…………………………………………………………………31 3.6.1 Cluster Computing…………………………………………………………………………………………31 3.6.2 Grid Computing……………………………………………………………………………………………..33 3.7 La web como implementación de SS.DD……………………………………………………………34 3.7.1 Estándares de la web…………………………………………………………………………………….35 3.7.2 Debilidades de la web……………………………………………………………………………………35 Jorge Guerra Guerra
3. Sistemas Distribuidos: Conceptos e implementación actuales 2 3.7.3 Generación de HTML dinámica……………………………………………………………………..36 3.7.3.1 Tipos de Plug-ins….…………………………………………………………………………………36 3.7.3.1.1 HTML incrustado en código………….…………………………………………………..36 3.7.3.1.2 Código incrustado en HTML……….…………………………………………………….36 3.7.4 Estructura de una aplicación web…………………………………………………………………37 3.7.5 Arquitectura de una aplicación web………………………………………………………………38 3.8 Aplicaciones móviles…………………………………………………………………………………………...39 3.8.1 La necesidad de las aplicaciones móviles y su adaptación a la web…………..39 3.8.2 Arquitectura I-MODE………………………………………………………………………………..…..40 3.8.3 La tecnología Java y las aplicaciones móviles…………………………………….……….41 Resumen……………………………………………………………………………………………………….……………44 Lectura……………………………………………………………………………………………………………………….46 Autoevaluación…………………………………………………………………………………………………………..47 Enlaces…………………………………………………………………………………………………………..…………..48 Bibliografía…………………………………………………………………………………………….…………………..48 Segunda Unidad………………………………………………………………………………………………………49 Comunicación entre procesos………………………………………………………………………………49 Sumario……………………………………………………………………………………………………………………..49 Lección 4 Características de la comunicación entre procesos………………………………………………….50 4.1 Generalidades sobre comunicación entre procesos…………………………………………..50 4.2 Implementación de la comunicación entre procesos…………………………………………51 4.3 Modelos de comunicación entre procesos………………………………………………………….52 4.3.1 Memoria compartida………………………………………………………………………………………52 4.3.2 Paso de mensajes………………………………………………………………………………………….52 4.3.2.1 Paso de mensajes puro……………………………………………………………………………52 4.3.2.2 Llamada a procedimientos remotos……………………………….……………………..53 4.3.2.3 Invocación a objeto distribuido…………………..………………………………………….53 4.4 Arquitectura de comunicaciones……………………………………………………………………….54 4.4.1 Modelo cliente/servidor………………………………………………………………………………..54 4.4.1.1 Modelo con proxy o caché…………………………………………………………………….54 4.4.1.2 Modelo multicapas…………………………………………………………………………………55 4.4.2 Modelo Peer to peer….………………………………………………………………………………….55 4.5 Fundamentos sobre comunicación entre procesos…………………………………………..56 4.5.1 Elementos de la comunicación entre procesos……………………………………………56 4.5.2 Niveles de comunicación……….…………………………………………………………………….56 4.5.3 Tipos de comunicación……………….……………………………………………………………….57 4.5.4 Localización y nomenclatura de los procesos….…………………………………………58 4.5.5 Modelo TCP/IP…………………………………………………………………………………………….59 4.5.6 Algoritmos para el paso de mensajes… …………………………………………………..60 4.6 Capa de transporte…………………………………………………………………………………………….61 4.6.1 Servicios orientados a conexión…………………………………………………………………..62 4.6.2 Servicios orientados a no conexión………………………………………………………………63 4.6.3 Datagrama….…………………..…………………………………………………………………………..64 4.6.4 TCP Transaccional….…………………………………………………………………………………….64 Lección 5 Sockets……………………………………………………………………………………………………………………..66 5.1 Socket tipo datagrama………………………………………………………………………………………..68 5.1.1 Implementación de sockets UDP en Java…………………………………………………….68 5.1.2 Código de ejemplo de socket UDP en Java………………..………………………………..70 5.2 Socket stream………………………………………………………………………………………………………75 5.2.1 Implementación de socket TCP usando Java……………………………………………….76 5.3 Socket Raw………………………………………………………………………………………………………….84 5.3.1 Características e implementación de sockets raw……………………………………..84 5.3.1.1 Implementación de socket raw bajo un lenguaje de programación….…85 5.4 Socket Seqpacket……………………………………………………………………………………………..101 Jorge Guerra Guerra
4. Sistemas Distribuidos: Conceptos e implementación actuales 3 Resumen………………………………………………………………………………………………………….………102 Lectura………………………………………………………………………………………..………….……………….103 Autoevaluación…………………………………………………………………………..……………………………105 Enlaces………………………………………………………………………………………..……………………………106 Bibliografía…………………………………………………………………………….…………………………………106 Tercera Unidad………………………………………………………………………………………………………107 Servidor de nombres…………………………………………………………………………………………..107 Sumario…………………………………………………………………………………………………………………..107 Lección 6 Definición de nombre y su uso en los Sistemas Distribuidos…………………………………108 6.1 Determinación del nombre……………………………………………………………………………….109 6.1.1 Tipos de nombres……………………………………………………………………………………….110 6.1.1.1 Criterios claves sobre nombres…………………………………………………………….110 6.1.1.2 Determinación del identificador nombre………………………………………………111 6.1.2 Funciones que cumple un servicio de nombramiento………………………………112 6.2 Implementación de la resolución de nombres………………………………………………..113 6.2.1 Servicio de nombres…………………………………………………………………………………..113 6.2.2 Servicio de directorio………………………………………………………………………………….114 6.3 Espacio de nombres………………………………………………………………………………………….114 6.3.1 Características y detalles del espacio de nombres………….……………………….115 6.3.2 Implementación de un espacio de nombres…………………………………………….116 6.3.3 Resolución de nombres en el espacio de nombres…………………………………….117 6.3.3.1 Resolución de nombres de tipo planos………………………………………………….117 6.3.4 Navegación en espacio de nombres…….…………………………………………………….118 6.3.4.1 Navegación iterativa…………………………………………………………………………….118 6.3.4.2 Navegación multicast……………………………………………………………………………119 6.3.4.3 Navegación no recursiva………………………………………………………………………119 6.3.4.4 Navegación recursiva……….………………………………………………………………….120 6.3.4.5 Implementación por capas de espacio de nombres….………………………..121 6.4 Servicio de directorio y descubrimiento………………………………………………………….122 6.4.1 Servicio de descubrimiento…………………………………………………………………………122 6.4.1.1 Universal Description Discovery and Integration (UDDI)………………….123 6.4.1.2 JINI………………………………………………………………………………………………………124 6.5 Implementaciones existentes de servicio de nombramiento…………………………..125 6.5.1 X.500…….…………………………………………………………………………………………………….125 6.5.1.1 Protocolos de X.500…………………………………………………………………………….128 6.5.1.2 Sistema de Nombres de Dominio (DNS)……….……………………………………131 6.5.1.2.1 Estructura de un nombre DNS…………….…………………………………………131 6.5.1.2.2 Resolución de nombres en DNS…………………………………………………….133 6.5.1.2.3 Ejemplo de resolución de nombres en DNS………………………………….135 6.5.1.2.4 Consideraciones a tener en cuenta durante la resolución de nombres en DNS………………………..………………………………………………137 6.5.1.3 Protocolo de Acceso Ligero a Directorio (LDAP)………………….………………137 6.5.1.4 Directorio Activo (Active Directory)…….………………………………………………142 6.5.1.4.1 Resolución de nombres en Active Directory………………………………….144 Resumen…………………………………………………………………………………………………………………..146 Lectura………………………………………………………………………………………………………………………147 Autoevaluación……………………………………………………………………………………………………….148 Enlaces……….…………………………………………………………………………………………………………….149 Bibliografía……………………………………………………………………………………………………………..149 Cuarta Unidad….……………………………………………………………………………………………………150 Middleware….…………………………………………………………………………………………………………150 Sumario….…………………………………………………………………………………………………………………150 Lección 7 Middleware……………………………………………………………………………………………………………….151 Jorge Guerra Guerra
5. Sistemas Distribuidos: Conceptos e implementación actuales 4 7.1 Definición y características……………………………………………………………………………….151 7.1.1 Características del Middleware…………………………………………………………………..152 7.1.2 Organización de una aplicación distribuida en función al Middleware………152 7.1.3 Stub y skeleton……………………………………………………………………………………………157 7.1.4 Lenguaje de definición de interfaz……………………………………………………………..158 7.2 Primitivas de función utilizadas en el Middleware…….…………………………………….160 7.3 Tipos de Middleware…………………………………………………………………………………………162 7.3.1 Tuplas distribuidas (DT)……………………………………………………………………………..162 7.3.2 Llamada Procedure Remoto (RPC)……………………………………………………………..164 7.3.3 Middleware orientado a mensaje (MOM)…….…………………………………………….167 7.3.4 Middleware de objetos distribuidos (DOM)….…………………………………………….169 7.3.5 Monitores de procesamiento transaccional (TP Monitors)………………………..171 7.3.6 Tecnología de acceso a base de datos (DBAT)……………….………………………..174 7.3.7 Framework orientado a componentes (COF)…………….………………………………175 7.3.8 Servicio de Directorio (DS)…………….…………………….……………………………………178 7.3.9 Servicio de Aplicación (AS)………….……………………….…………………………………..178 7.3.10 Comparativa entre tipos de Middleware….………….………………………………….178 7.4 Implementaciones……………………………………………………………………………………………..180 7.4.1 Distributed Component Model (DCOM)…………….……………………………………….180 7.4.2 Remote Method Invocation (RMI)…..………………………………………………………...183 7.4.3 Component Object Request Broker Architecture (CORBA)……………………….185 Resumen………………………………………………………………………………………………………………….188 Lectura……………………………………………………………………………………………………………………..189 Autoevaluación….…………………………………………………………………………………………………….190 Enlaces…………………………………………………………………………………………………………………….191 Bibliografía………………………………………………………………………………………………………………191 Quinta Unidad……………………………………………………………………………………………………….192 Portabilidad de los datos……………………………………………………………………………………192 Sumario…………………………………………………………………………………………………………………….192 Lección 8 Representación de datos………………………………………………………………………………………….193 8.1 Necesidades de la representación externa de datos……………………………………..193 8.1.1 Correspondencia entre datos y mensajes…………………………………………………193 8.1.2 HTML como vehículo de información…………………………………………………………194 8.1.3 B2C-Business to client………….…………………………………………………………………..197 8.1.4 B2-Business to Business…………………………………………………………………………..197 8.2 External Data Representation (XDR)……………..………………………………………………..197 8.3 ASN.1…………………………………………………………………………………………………………………198 8.4 XML……………..…………………………………………………………………………………………………….198 8.4.1 Implementación de XML…………………………………………………………………………….199 8.4.2 Tipos de documentos XML..……………………………………………………………………….201 8.4.2.1 Documentos XML bien formados………………………………………………………….202 8.4.2.2 Documentos XML válidos……………………………………………………………………..203 8.4.2.2.1 Document Type Definition (DTD)………………………………………………….203 Resumen…………………………………………………………………………………………………………………206 Lectura………………………………………………………………………………………………………………………207 Autoevaluación…………………………………………………………………………………………………………208 Enlaces……………………………………………………………………………………………………………………..210 Bibliografía….…………………………………………………………………………………………………………..210 Glosario……………………………………………………….…………………………………………………………..211 Bibliografía……………………………………………………………………………………………………………..214 Jorge Guerra Guerra
6. Sistemas Distribuidos: Conceptos e implementación actuales 5 Presentación En los últimos años, la tecnología informática ha ido evolucionando gradualmente desde las aplicaciones cliente/servidor de los noventa hasta las soluciones informáticas de tipo WAN heterogéneo del siglo actual. Por ello los conceptos que se manejan como integración, nombramiento, middleware, son importantes en los programas que se desarrollan en estos días y deben tomarse en cuenta los conceptos de comunicaciones para comprender la forma como se implementa una aplicación informática de tipo distribuida. Es necesario, por lo tanto contar con el material apropiado para entender y aplicar los conceptos derivados de la implementación de los Sistemas Distribuidos y las implementaciones que actualmente se tienen de este tipo de solución informática. El autor expresa su complacencia de que un libro de esta naturaleza pueda haberse realizado ya que esta es la primera publicación de su género en el país y es una contribución importante a la comunidad académica de Computación e Informática- Sin embargo, se desea indicar que al ser este un libro de tipo preliminar, todavía está en etapa de implementación, en el cual se están agregando nuevos capítulos y mejorando los existentes para completar el material que se desea ofrecer a la comunidad académica, por lo que pronto estará disponible en su versión final tanto en edición digital como impresa. Jorge Guerra Guerra
7. Sistemas Distribuidos: Conceptos e implementación actuales 6 Introducción El presente libro abarca los temas que corresponden al curso Sistemas Distribuidos, en donde se estudian los conceptos, características e implementación de los Sistemas Distribuidos y su uso en casos prácticos. Asimismo, se revisarán temas que abarcan conceptos de cursos anteriores vistos en arquitectura de computadoras, análisis de diseño de sistemas, aplicados en un entorno de tipo WAN. En la parte práctica, la que se desarrollara en un libro aparte, se realizará una implementación basada en web de una aplicación informática utilizando para ello el lenguaje de programación Java y herramientas de tecnología basadas en software libre en la que se aplicará los conceptos que se irán impartiendo durante este curso. Jorge Guerra Guerra
8. Sistemas Distribuidos: Conceptos e implementación actuales 7 Orientación Metodológica La organización del libro se inicia con una introducción en el que se indica el ciclo al que pertenece el curso y el contenido general de la materia a estudiar. A continuación se desarrollan las unidades temáticas que de acuerdo al sílabo se constituyen en cinco, cada una de estas unidades a su vez se dividen en lecciones, en la que en cada lección se desarrollan bases teóricas necesarias para entender el tema, así como ejercicios resueltos, de esta manera, la primera unidad introduce a la descripción de las características de los Sistemas Distribuidos; en la segunda unidad se desarrolla conceptos como Comunicación entre procesos; en la tercera unidad los Servicios de nombramiento; en la cuarta unidad se estudia al Middleware; en la quinta unidad, se desarrolla lo referente a la portabilidad de los datos y XML. Al término de cada unidad se presenta un resumen, una lectura, una autoevaluación así como los enlaces web y la bibliografía correspondiente que servirá para que el alumno ampliara sus conocimientos. El curso de Sistemas Distribuidos tiene como objetivo dar a conocer los fundamentos, características e implementación del modelo llamado también arquitectura de n capas heterogéneas, y que determinan gran parte de la tecnología informática actual. Para esto, como estrategias de aprendizaje se presenta preguntas tipo que sirven de referencia para la autoevaluación de los conceptos. Se ha revisado material bibliográfico de libros de los autores más reconocidos del campo y se ha utilizado documentación de cursos de Sistemas Distribuidos de Universidades de México, España, EEUU, Inglaterra, Italia, Brasil y Taiwán. Jorge Guerra Guerra
9. Sistemas Distribuidos: Conceptos e implementación actuales 8 Primera Unidad Definición y concepto de Sistemas Distribuidos Sumario Define los conceptos fundamentales acerca de los Sistemas Distribuidos, pasa revista a las principales características como: comunicación entre cliente/servidor, ejecución de servicios, arquitectura hardware y software para la implementación, uso del MIDDLEWARE, interfaces y Stubs, asi como el papel de la web en las implementaciones distribuidas y la forma como las aplicaciones móviles se integran con las aplicaciones basadas en computador asistentes. Jorge Guerra Guerra
10. Sistemas Distribuidos: Conceptos e implementación actuales 9 Capitulo 1 Hacia los Sistemas Distribuidos El uso de los Sistemas Distribuidos proviene inicialmente de la implementación de los sistemas de comunicaciones a larga distancia (teléfono, operaciones bancarias, televisión, etc.). Posteriormente, evolucionó a las primeras implementaciones software basadas en redes WAN como UNIX, implementación de redes bajo IBM y el sistema conocido como ARPANET. Actualmente, los Sistemas Distribuidos nos rodean, no es posible encontrar un sistema dentro de las actividades humanas que no tengan algún tipo de relación con los Sistemas Distribuidos como: a) Sistema de ventas de boletos aéreos b) Sistema de consultas médicas en hospitales y clínicas c) Facturación en línea en farmacias Un ejemplo de este tipo de implementación es indudablemente Google ya que implementa las siguientes características: • Es una aplicación montada sobre un sistema distribuido • Yo como usuario desconozco • Máquina o máquinas en las que se realiza la búsqueda • Lugares donde estén ubicadas esas máquinas • Tipos de comunicación que se utilizan • Equipos que intervienen • Forma de realizar la búsqueda • Qué se ejecuta en mi máquina y qué no se ejecuta • Casi siempre funciona correctamente 1.1 Conceptos que originan los Sistemas Distribuidos Sistemas Distribuidos es una forma de implementación de aplicaciones de software que tiene su origen en varias áreas informáticas preexistentes como: • Sistemas Operativos. • Procesamiento en Paralelo. • Sistemas en Tiempo Real. • Sistemas Multimedia Distribuidos. • Tipos de comunicaciones. • Bases de datos distribuidas. • Cliente – Servidor, Tres niveles, Internet. • Objetos, Componentes Distribuidos. • Computación Móvil. • Aplicaciones Tradicionales. Todas ellas han contribuido con conceptos, implementaciones, herramientas al surgimiento de la tecnología necesaria para permitir que los Sistemas Distribuidos pasen de la teoría a la práctica. Jorge Guerra Guerra
11. Sistemas Distribuidos: Conceptos e implementación actuales 10 1.2. Necesidad empresarial de los Sistemas Distribuidos Aún cuando los Sistemas Distribuidos, se considera como una propuesta tecnológica importante, éstos no hubieran surgido sin el necesario apoyo de empresas interesadas en su aplicación práctica y por ello el advenimiento del internet como tecnología que permite enlazar computadoras desde todas partes del mundo, haciendo posible que las operaciones de las empresas puedan llegar a sitios remotos. Ello provocaría un crecimiento importante de los negocios en la red a través de la creación de páginas web, implementación de programas a partir del modelo WAN y crecimiento en inversión de nuevas tecnologías. Pero, a la par de este desarrollo surgieron nuevos retos que los informáticos a partir de los noventas tuvieron que afrontar los cuales fueron: a) Adopción de nuevas tecnologías y nuevos requisitos de desarrollo b) Rápidos cambios tecnológicos c) Desafíos técnicos para los informáticos como capacidad de respuesta, productividad, confiabilidad y disponibilidad, seguridad, escalabilidad, integración con otros sistemas y desarrollo de interface de usuarios más amigables. Todo esto nos conduce a un requerimiento fundamental y que se traduce en “necesitamos una plataforma con una rica infraestructura que ofrezca diferentes posibilidades arquitectónicas favoreciendo un entorno de desarrollo rápido”. 1.3. El papel de Internet como impulsor de los Sistemas Distribuidos La aparición del Internet y su consolidación posterior mostró claramente la factibilidad de la implementación de los Sistemas Distribuidos, en el siguiente gráfico mostramos una estructura básica de un conexionado utilizado en Internet: Fig. 1 Representación de Internet Sin embargo, el poder del Internet se ve reflejado en los números mostrados en el año 2009 y que cuantifica el tráfico de datos que atreves de esta carretera de la información han circulado: • 1.730 millones de usuarios de Internet en todo el mundo. Jorge Guerra Guerra
12. Sistemas Distribuidos: Conceptos e implementación actuales 11 • 1.400 millones de usuarios de correo electrónico que enviamos una media de 247.000 millones de correo cada día aunque lamentablemente unos 200.000 millones son correo basura (SPAM). • En diciembre de 2009 había 234 millones de sitios web. • De ellos, 126 millones son blogs, según BlogPulse. • Hay 350 millones de usuarios registrados en Facebook, lo que lo haría el tercer país más poblado del mundo. • Se suben 2.500 millones de fotos al mes a Facebook, lo que hace palidecer los 4.000 millones de fotos que había en total Flickr en octubre de 2009. • YouTube sirve 1.000 millones de vídeos cada día. • Lamentablemente, se crean unos 148.000 nuevos ordenadores zombi cada día. Estos números nos muestran la importancia del Internet como el medio de comunicación dominante en el planeta y el uso intensivo de productos derivados de los Sistemas Distribuidos que han literalmente cambiado los hábitos de consumo y la forma de intercambiar información en la sociedad actual. 1.4. Conceptos técnicos A continuación se enuncian algunos conceptos técnicos necesarios para entender el funcionamiento de un Sistema Distribuido. 1.4.1. Modelo Cliente/Servidor Parte de la evolución de los sistemas de información que pasaron de LAN a WAN fue el cambio del modelo tradicional cliente servidor de dos capas o tres capas hacia un modelo de n capas, fraccionando por ello tanto el interfaz de usuario, la lógica de negocios y el acceso a los datos. También el cambio se da al pasar de un ambiente computarizado de tipo homogéneo (CPU, sistema operativo del mismo modelo o compatibles) a un modelo de implementación heterogéneo con máquinas de diferentes tecnológicas y ubicados en diferentes puntos de la red. Esta evolución permitió la utilización de diferentes productos informáticos los cuales utilizando estándares pueden comunicarse entre sí dando lugar a la aparición de los Sistemas Distribuidos. El modelo resultante, de n capas heterogéneo se muestra en el siguiente gráfico: Fig. 2 Organización de aplicación informática basada en capas Jorge Guerra Guerra
13. Sistemas Distribuidos: Conceptos e implementación actuales 12 1.4.2. Comparación entre diferentes implementaciones cliente/servidor Con el fin de realizar una comparación efectiva entre las diferentes implementaciones informáticas efectuadas usando cliente servidor se implementó un modelo espacial utilizando tres magnitudes de medición como son: a) Tipo de modelo: corresponde a la forma como los datos se encuentran organizados dentro de la aplicación. Valores relacional, objeto y semiestructurado. b) Número de capas: representa el número de capas en que se ha organizado la aplicación. Valores dos capas, tres capas, n capas. c) Tipo de procesamiento: representa el tipo de procesamiento de datos y generación de respuesta ante la solicitud de un servicio. Valores transaccional (salida en función a los datos existentes), informacional o analítico (respuesta obtenida a través de los datos existentes y de generación de nuevos datos). El resultado se presenta en el siguiente gráfico: Fig. 3 Modelo espacial de implementación cliente/servidor 1.4.3. Nuevo modelo de software La evolución de los sistemas, que pasaron de LAN a WAN permitió la aparición de un elemento fundamental de las aplicaciones informáticas, como es el medio de comunicación, éste tiene la posibilidad de conectar puntos alejados geográficamente de la red y posibilitar el envío de mensajes por lo que, el software actual se considera una combinación entre la implementación informática y el sistema de comunicaciones. Por lo tanto, hemos pasado de un modelo centralizado o monolítico basado en Mainframe, minicomputadoras a aplicaciones de tipo distribuidos basados en componentes heterogéneos conectados a través de una red, tal como lo muestra el siguiente gráfico: Jorge Guerra Guerra
14. Sistemas Distribuidos: Conceptos e implementación actuales 13 Fig. 4 Evolución del modelo centralizado al distribuido Gracias, a estos conceptos técnicos y a la evolución de las aplicaciones informáticas en el tiempo se logra llegar a su implementación más importante la aparición de los Sistemas Distribuidos. Jorge Guerra Guerra
15. Sistemas Distribuidos: Conceptos e implementación actuales 14 Capitulo 2 Definiciones de Sistemas Distribuidos Muchas son las definiciones que existen sobre los Sistemas Distribuidos algunas con una orientación netamente hardware y otras bajo el punto de vista de software, sin embargo, consideramos que una definición bastante cercana a los criterios que creemos que deben ser considerados en una aplicación de ese tipo sería la que se enuncia a continuación: Un Sistema Distribuido es aquel que ofrece servicios implementados sobre una red de computadoras como si se tratara de un único sistema. Esto se logra a través de transparencias de distribución y son: • Transparencia de localización. • Transparencia de escalabilidad. • Transparencia de replicación. • Transparencia de concurrencia. • Transparencia de paralelismo. • Transparencia de acceso. • Transparencia de fallo. • Transparencia de movilidad. • Transparencia de rendimiento. ¿Pero qué significan transparencias? Este concepto alude a que la implementación de una característica no será visible por parte del usuario final, tanto si este fuera una persona como una aplicación. Gracias a este enunciado se pueden implementar gran parte de las características que constan en un Sistema Distribuido. A continuación, una breve definición de cada una de las transparencias: • Transparencia de localización: Permite que los recursos puedan ser accesados sin el conocimiento de su localización física o de la red (por ejemplo, la dirección IP). • Transparencia de escalabilidad: Permite que el sistema y las aplicaciones crezcan, sin cambio en la estructura del sistema o los algoritmos de la aplicación. • Transparencia de replicación: Habilita varias instancias de recursos que se utilizarán para aumentar la fiabilidad y rendimiento sin el conocimiento de las réplicas de los usuarios o programadores de aplicaciones. • Transparencia de concurrencia: Permite que varios procesos puedan operar al mismo tiempo utilizando recursos compartidos sin interferencia entre ellos. • Transparencia de paralelismo: Permite que 2 o más servidores trabajen en forma cooperativa para un servicio sin que el usuario lo pueda observar. • Transparencia de acceso: Permite que los recursos locales y remotos puedan ser accesados mediante operaciones idénticas. • Transparencia de fallo: Permite el ocultamiento de fallas, haciendo posible a los usuarios y los programas de aplicación, completar sus tareas a pesar del fracaso de los componentes de hardware o software. • Transparencia de movilidad: Permite el movimiento de recursos y clientes dentro de un sistema sin afectar el funcionamiento de los usuarios o programas. • Transparencia de rendimiento: Permite que el sistema sea reconfigurado para mejorar el rendimiento conforme las cargas varíen. Jorge Guerra Guerra
16. Sistemas Distribuidos: Conceptos e implementación actuales 15 Es bueno agregar otras definiciones importantes enunciadas por conocedores de este tema así pues Tanenbaum nos dice que “Un sistema distribuido es una colección de computadoras independientes que aparecen ante los usuarios del sistema como una única computadora”. Con esta definición se quiere poner énfasis en el aspecto de la interconexión de los sistemas computadores que trabajan de manera conjunta en una red y que utilizan mecanismos protocolos y estándares que garantizan su interoperabilidad simulando ser un solo sistema computador. Otra definición muy importante y la más ampliamente aceptada es la de Coulouris que indica que “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”, aquí el autor de este concepto pone de manifiesto claramente una de las principales características de los Sistemas Distribuidos que es la comunicación a través del paso de mensajes y que gracias a ella se definen las grandes implementaciones que más adelante veremos como los sockets, el middleware y la web. 2.1 Cambio de paradigma La aparición e implementación de los Sistemas Distribuidos constituye una forma de construcción de soluciones informáticas que cambiaron drásticamente la forma de ver y entender los sistemas de información, no solo por su carácter amplio en cuanto al número de computadoras involucradas ni la distancia geográfica que podrían establecerse entre ellas, sino fundamentalmente porque permitió la evolución de una serie de conceptos y paradigmas existentes en los sistemas de información de tipo centralizado y de tipo LAN como por ejemplo la adopción de tecnologías heterogéneas que manteniendo un funcionamiento autónomo tienen capacidad de comunicarse eficientemente, o la posibilidad de la ejecución concurrente de procesos independientemente del sistema operativo sobre el cual funcionen. Un punto importante en dicha evolución fue la capacidad de enfrentar fallos de operación desde cualquier punto de la red a diferencia del enfoque anterior que era de tipo centralizado atreves de un único punto de tratamiento de fallos, también es importante señalar la evolución progresiva del acceso de información, anteriormente limitado a consultas únicamente al servidor local al que se encuentra conectado la máquina cliente esto ha cambiado hacia una solicitud de información a servidores remotos y que inclusive la máquina cliente no conoce siquiera su existencia. La tabla a continuación permite observar la evolución de los sistemas de información del modo centralizado al modo distribuido: Control central Autonomía Nombramiento federado (no resuelto Nombramiento global distribuidamente, por partes) Consistencia global Consistencia débil Ejecución secuencial Ejecución concurrente Vulnerabilidad Tolerancia a fallos Información local Información remota Localización fija Migración Homogeneidad Heterogeneidad Tabla 1 Evolución entre sistemas de sistemas de información Jorge Guerra Guerra
17. Sistemas Distribuidos: Conceptos e implementación actuales 16 Sin embargo, la aparición de los Sistemas Distribuidos ha traído como consecuencia la necesidad de enfrentar desafíos tecnológicos que son importantes para garantizar la calidad de servicio que estos sistemas deben ofrecer estos retos son: a) Heterogeneidad: La capacidad de utilizar equipos informáticos y software de diferente tecnología. b) Extensibilidad: La capacidad de que el Sistema Distribuido pueda aumentar el número de clientes a los que pueda atender. c) Seguridad: Definición de medidas de seguridad que garanticen la confiabilidad de los mensajes que circulan a través del Sistema Distribuido. d) Escalabilidad: La capacidad del Sistema Distribuido en poder aceptar mas servicios de los que inicialmente posee y estos puedan ser accesados igualmente por todos los clientes. e) Tratamiento de fallos: La capacidad que desde cualquier punto pueda corregirse cualquier fallo producido dentro del Sistema Distribuido. f) Concurrencia: La capacidad de que varios clientes puedan accesar de manera simultánea a un mismo servicio. g) Transparencia: La característica de que toda implementación del Sistema Distribuido tanto hardware como software no debe ser visible a los usuarios que la utilizan. 2.2 Características de los Sistemas Distribuidos De una manera rápida podemos decir que tres son las características implícitas que posee todo Sistema Distribuido y que son: a) Consta de múltiples computadoras b) Todas estas computadoras se encuentran interconectadas c) Dichas computadoras poseen un estado compartido Para poder describir e implementar los puntos a y b se requiere transparencia en la construcción del Sistema Distribuido, mientras que para el punto c se necesita criterios de consistencia. Muchos son los estudios que se han hecho para poder definir de una manera clara los elementos necesarios para la implementación de un Sistema Distribuido tanto como modelo teórico y como implementación efectiva uno de los trabajos más conocidos sobre la conceptualización de Sistema Distribuido es el presentado por Enslow que en 1978 mostró un modelo espacial para poder graficar lo que su criterio debería ser considerado un Sistema Distribuido. Dicha gráfica constaba de tres magnitudes fundamentales: el hardware a utilizar, la organización de los datos y el tipo de control para tratamiento de fallos. El modelo presentado se aprecia en la página siguiente: Jorge Guerra Guerra
18. Sistemas Distribuidos: Conceptos e implementación actuales 17 Fig. 5 Grados de Distribución (Enslow, 78) Colocando diferentes tipos de aplicaciones informáticas dentro de este modelo (base de datos, sistemas LAN, sistemas transaccionales, aplicaciones mainframe, etc.), Enslow llego a la conclusión que “un sistema se podría considerar como un Sistema Distribuido si las tres categorías (hardware, control, datos) alcanzan un cierto nivel de descentralización”. Posteriormente, generaliza su modelo para presentar lo que él considera la región admisible para aquellos sistemas que son considerados distribuidos. Se muestra en el gráfico a continuación: Fig. 6 Generalización del modelo de Enslow También es importante consignar que si bien los Sistemas Distribuidos abarcan una implementación que incluyen computadoras personales, redes LAN, sistemas multiprocesadores, mainframe y minicomputadoras, se tiende a comparar este tipo de sistema con las implementaciones realizadas en tiempos anteriores. Por ello, en la tabla siguiente se hace una comparación entre los Sistemas Distribuidos, los sistemas basados en red y los sistemas multiprocesadores, utilizando como criterio Jorge Guerra Guerra
19. Sistemas Distribuidos: Conceptos e implementación actuales 18 de medición algunos factores importantes a considerar como medio de comunicación, capacidad de manejo de cola ejecución, posibilidad de compartir archivos y otros, donde visiblemente se encuentran las ventajas inherentes del Sistema Distribuido. A continuación se muestra la tabla aludida: Ítem Sistema en Red Sistema Multiprocesadores Distribuido Como si fuera un No Si Si uniprocesador virtual Se ejecuta el mismo No Si Si sistema operativo Copias del sistema N copias N copias 1 copia operativo Medios de Archivos Mensajes Archivos compartidos comunicación compartidos ¿Acuerdo de los Si Si No protocolos de red? Una simple cola de No Si Si ejecución Compartición de Normalmente no Si Si archivos bien definida Tabla 2 Comparación entre sistemas 2.3 Características de la transparencia de los Sistemas Distribuidos Se ha dicho en párrafos anteriores de la importancia que es para la implementación de los Sistemas Distribuidos la transparencia de su funcionamiento esto es, el usuario y los sistemas involucrados no tienen mayor conocimiento de la forma como ésta aplicación está construida ni sus protocolos, ni sus medidas de seguridad, ni lejanía o cercanía entre ellos. Para lograr esta transparencia se deben tener una serie de características consideradas deseables en cualquier implementación de ese tipo y que son las siguientes: a) Compartición de recursos b) Tolerancia a fallos c) Sistema abierto d) Escalabilidad e) Seguridad Veremos los detalles de cada una de estas características y su contribución a la implementación del Sistema Distribuido. 2.3.1. Compartición de recursos Se define como la posibilidad de utilizar recursos y datos públicos por parte de los distintos usuarios autorizados del sistema. Como beneficio de la compartición tenemos en el caso de hardware una economía lograda gracias a la no compra de equipo redundante, en el caso de software un desarrollo eficiente en equipo y la posibilidad de que todos puedan acceder a los mismos datos. ¿Entonces como se comparten los recursos? En los sistemas centralizados la compartición es directa ya que todos pueden acceder al punto central donde se encuentran dichos recursos. En los Sistemas Distribuidos el acceso de los recursos no es directo debido a que éstos se encuentran en diferentes servidores muchos de ellos remotos y de Jorge Guerra Guerra
20. Sistemas Distribuidos: Conceptos e implementación actuales 19 diferentes tecnologías por lo que se requiere algún mecanismo de comunicación que garantice dicho acceso. Para lograrlo se requiere una interfaz homogénea independiente de la tecnología a usarse y un gestor de recursos que sea el que reciba las peticiones de acceso y las administre. Esto podrá lograrse gracias a una implementación de tipo cliente servidor en la cual el proceso servidor tiene el papel de gestor de recursos mientras que el proceso cliente es quien solicita y posteriormente usa el hardware y software compartido. En el gráfico siguiente se muestra la relación entre el proceso cliente y proceso servidor dentro del modelo que se está observando: Fig. 7 Comunicación entre procesos Un hecho importante para señalar es que el gestor de recurso no debe verse en ningún momento como el proveedor centralizado de recurso ya que, los recursos realmente están en los diferentes servidores diseminados en todo el sistema. 2.3.2 Sistema abierto Un sistema se considera abierto si puede ser ampliado fácilmente. Esta definición alcanza tanto aspecto hardware (periféricos, memorias, interface de comunicación) como el aspecto software (agregar extensiones al sistema operativo, agregar nuevos recursos compartidos, etc.). El concepto de sistema abierto es importante porque implica la implementación de una serie de elementos fundamentales de todo Sistema Distribuido como son: a) Interfaces públicas, tanto de software como de hardware b) Los componentes de Sistema Distribuido deberán ser heterogéneos Para lograr de que los Sistemas Distribuidos sean abiertos se necesita una comunicación uniforme y pública entre procesos y la forma de lograr esto es a través de estándares los cuales permitirán el uso de nuevos recursos compartidos. 2.3.3 Escalabilidad Es la capacidad de que el sistema pueda ser ampliado sin que por ello los usuarios tengan que modificar su protocolo de comunicación, ni la eficiencia del sistema quede afectada. El concepto de escalabilidad es importante tal es así que se establece dos tipos definidos: Jorge Guerra Guerra
21. Sistemas Distribuidos: Conceptos e implementación actuales 20 a) Escalabilidad horizontal: El poder añadir más equipos de cómputo al Sistema Distribuido y estos puedan acceder a los servicios existentes. b) Escalabilidad vertical: La posibilidad de poder aumentar el número de servicios disponibles permitiendo al mismo tiempo de que todos los clientes puedan acceder a dichos servicios. ¿Cómo lograr mantener la escalabilidad de un Sistema Distribuido? Hay dos técnicas que pueden lograrlo: a) Descentralizando los algoritmos, con ello podremos usar de manera más eficiente los datos existentes en los repositorios de información b) Haciendo replicación de datos, es decir generando base de datos espejo, distribuidas en los múltiples servidores del sistema y también aumentando la eficiencia de la memoria caché de los distintos servidores disponibles. 2.3.4 Tolerancia a fallos Un Sistema Distribuido deberá tener un mecanismo para detectar fallos y corregirlos a tiempo, ya que, no existe ningún sistema informático que no pueda presentar fallos, los cuales, presentarán fallas a nivel de hardware (el equipo de cómputo deja de funcionar o funciona de manera errática) y también fallas a nivel de software (generación de resultados incorrectos). Dos magnitudes son fundamentales para poder medir la capacidad de sistema en tolerar fallos y son las siguientes: a) Estabilidad: Un sistema es estable cuando ante la presencia de una perturbación en la entrada generará una salida que dependa de dicha perturbación, pero que al cesar la entrada anómala el sistema vuelve a generar la salida normal. b) Disponibilidad: Es la proporción del tiempo total en que el sistema está disponible para su uso. En condiciones ideales la disponibilidad es de 100%. ¿Cuáles serían las consecuencias de la aparición de fallos en un sistema informático? Si es de tipo centralizado el sistema se cae completamente y no estará disponible para ningún cliente, en un Sistema Distribuido el nodo afectado por el fallo provocará una negación de servicios a aquellos usuarios que están físicamente conectados a dicho nodo, pero el resto del sistema seguirá funcionando normalmente. ¿Cuáles serían las medidas a tomar dentro de una política de tolerancia a fallos? Se sugieren algunas acciones a) realizar redundancia de hardware de tal manera que puedan aprovecharse los equipos de reserva para actividades que no sean críticas, mientras no haya aparición de fallo, por ejemplo: replicar una base de datos en varios servidores; ante la aparición de un fallo dicho equipo de reserva reemplazara automáticamente al servidor fuera de servicio. B) establecer una recuperación de fallos de software en la cual, se establezca una consistencia de actualización. Esto quiere decir que en presencia de un fallo el sistema tiene que ser capaz de dejar los datos permanentes en el último estado consistente anterior al error, dicho mecanismo se conoce con el nombre de Rollback. 2.3.5 Seguridad Es innegable que los niveles de seguridad en un Sistema Distribuido deberán ser mayores a un sistema LAN o sistema de tipo Desktop debido al número de clientes y servidores involucrados y a las distancias geográficas en las que ellas se Jorge Guerra Guerra
22. Sistemas Distribuidos: Conceptos e implementación actuales 21 encuentran por lo que se requiere medidas de seguridad para proteger los recursos y los datos de un acceso indebido. En un sistema centralizado es mucho más fácil establecer medida de seguridad dado el carácter concentrado de la información, pero a la par un fallo de seguridad puede traer consecuencias catastróficas y de pronto hacer caer todo el sistema en sí. En el caso de un Sistema Distribuido los mecanismos de seguridad son más complejos de establecer pero al mismo tiempo un fallo en la seguridad perjudicaría a una parte del sistema y no al todo. Por lo tanto, se deberán establecer mecanismos de seguridad frente a las amenazas potenciales que provienen tanto del exterior como del interior del sistema tales como: filtraciones, intromisiones, robo de recursos y vandalismo. Una buena auditoria informática y establecimiento de estándares de auditoría como COBIT minimizara la posibilidad de filtraciones de seguridad, así como políticas de uso de antivirus, claves y perfiles son importantes en este punto. 2.4 Ventajas e inconvenientes de los Sistemas Distribuidos Como todo tipo de solución informática los Sistemas Distribuidos tienen ventajas y desventajas frente a otros tipos de aplicaciones que se desarrollaron anteriormente, en la tabla siguiente establecemos criterios de comparación frente a sistemas centralizados y a sistema independientes así como mostramos inconvenientes presentados en los Sistemas Distribuidos. Economía: Mejor relación calidad/precio Ventaja de los Sistemas Velocidad: Más potencia que mainframes Distribuidos frente a los Distribución inherente: Aplicaciones especiales centralizados Fiabilidad: Tolerancia a fallos Escalabidad: Fácil crecimiento incremental Comparten datos: Acceso a base de datos comunes Ventaja de los Sistemas Comparten dispositivos: Impresoras, scanners, Distribuidos frente a los etc. independientes Comunicación: Facilita comunicación (e-mail) Flexibilidad: Reparto de carga eficiente Software: Hay poco Inconvenientes de los Red: Se puede saturar Sistemas Distribuidos Seguridad: Más difícil Tabla 3 Ventajas y desventajas Todas estas características deberán permitir implementar una solución informática que conjugue una arquitectura de n capas heterogénea montada sobre un medio de comunicación, corriendo bajo estándares definidos por dicho sistema y accesando a cualquier punto geográfico no importando si este es cliente o servidor. De lograrse esto la implementación final será lo que se muestra en el siguiente gráfico. Jorge Guerra Guerra
23. Sistemas Distribuidos: Conceptos e implementación actuales 22 Fig. 8 Implementación final de un Sistema Distribuido 2.5 Aplicaciones de los Sistemas Distribuidos Son múltiples las aplicaciones que se encuentran para los Sistemas Distribuidos a continuación una breve relación de ellos: Reservas de líneas aéreas Aplicaciones bancarias Aplicaciones comerciales Cajeros de grandes almacenes Cajeros y Almacén de Cadena de Supermercados Correo electrónico Servicio de Noticias (NEWS) Servicio de Transferencia de Ficheros (FTP) Aplicaciones para Redes WAN Búsqueda de Ficheros (Archie) Servicio de consulta textual (Gopher) World Wide Web (www) Videoconferencia Televigilancia Aplicaciones Multimedia Juegos multiusuario Enseñanza asistida por ordenador Tabla 4 Aplicaciones de Sistemas Distribuidos 2.6 Casos de uso de Sistemas Distribuidos 2.6.1 Empresa Boeing Jorge Guerra Guerra
24. Sistemas Distribuidos: Conceptos e implementación actuales 23 Boeing es un ejemplo de empresa que utiliza aplicaciones basadas en Sistemas Distribuidos para el control de sus operaciones, a continuación una reseña de los datos y operaciones que justifican su uso: • Cada avión consta de tres millones de componentes. • Cada avión tiene una configuración diferente • Es necesario guardar la información sobre todos los componentes, debido a que un mismo componente se puede utilizar en más de un tipo de avión • La empresa produce un aproximado de 500 aviones al año • La base de datos crece cada año con información correspondiente a mil quinientos millones de componentes • La vida útil de cada avión es aproximadamente de 30 años • Hay un aproximado de 45 mil ingenieros que acceden en línea al sistema para búsqueda de datos • Existen 20 servidores solamente para datos de ingeniería (diseño de nuevos modelos, adaptación de los existentes, etc.) • Hay un aproximado de 200 servidores que utilizan aplicaciones UNIX • Las estaciones cliente utilizan sistemas operativos UNIX, LINUX o WINDOWS 2.6.2 Mercedes Benz Los modelos más modernos en automóviles de esta compañía utilizan tecnología basada en computadoras que se encuentran interconectadas atreves de redes semejando un Sistema Distribuido. Por ejemplo un automóvil de la clase S está equipado con más de 50 procesadores empotrados todos los cuales se interconectan atreves de una red de área local de naturaleza heterogénea. Jorge Guerra Guerra
25. Sistemas Distribuidos: Conceptos e implementación actuales 24 Capitulo 3 Funcionamiento de un Sistema Distribuido Una vez descrito lo que es un Sistema Distribuido para que sirve y sus características más saltantes nos toca observar los detalles de su funcionamiento a fin de entender cómo es que este tipo de sistema informático cumple su labor y como se observara atreves de las páginas siguientes no solamente debe tomarse del punto de vista software sino también del punto de vista hardware. 3.1 Arquitecturas Software usadas en Sistemas Distribuidos Tan importante como establecer las características de un Sistema Distribuido es definir la forma como los servicios podrán ser organizados con el fin de poder acceder a ellos, de tal manera que su organización dependerá de los estilos de construcción que se quieran establecer en la aplicación distribuida. Para esto, se definen cuatro modelos que van a servir de guía para establecer una arquitectura definida de acceso a servicios. 3.1.1 Arquitectura basada en capas En esta arquitectura la organización de los servicios se establece de manera jerárquica utilizando para ello un modelo de capas, atreves del cual un proceso de una capa superior pueda acceder al servicio de la capa inmediatamente inferior siendo transparente para él todas las capas tanto superiores como inferiores a ésta. Este modelo fue muy popular desde el inicio de la comunicación heterogénea y fue la base para la implementación del modelo OSI y posteriormente del modelo TCP/IP dado su fácil organización y mantenimiento, a continuación un gráfico de esta arquitectura: Layer N Layer N-1 Request Response Flow Flow Layer 2 Layer 1 Fig. 9 Organización en capas Jorge Guerra Guerra
26. Sistemas Distribuidos: Conceptos e implementación actuales 25 3.1.2 Arquitectura basada en objetos En este modelo los servicios se encuentran definidos como métodos pertenecientes a clases los cuales se hacen accesibles atreves de los objetos que se crean. La ventaja de este modelo radica en que cada objeto puede comunicarse con cualquier otro para accesar al servicio que necesite, lo que deriva en un fácil acceso para ejecución de los procesos involucrados. Como desventaja podemos anotar que este modelo genera un alto acoplamiento y un gran tráfico de datos atreves de la red. Un ejemplo de esta arquitectura se muestra a continuación: Object Object Object Llamada método Object Object Fig. 10 Organización basada en objetos 3.1.3 Arquitectura basada en eventos Este modelo de arquitectura organiza de una manera eficiente el tráfico de mensajes producido por la arquitectura anterior, debido a que define dos mejoras fácilmente identificables: a) Reúne a todos los objetos que tienen en común ejecución de requerimientos atreves de componentes. b) Se organiza una “carretera de información” atreves del cual van a viajar todos los mensajes colocados o recuperados por los componentes del sistema, denominado bus de eventos. En esta arquitectura todo aquel componente que ofrece servicios coloca la respuesta a las solicitudes planteadas por los clientes en este bus en el cual viajaran simultáneamente muchos mensajes, el componente cliente solo necesita accesar al bus para recuperar el mensaje que le corresponde. La arquitectura SOA es un ejemplo de esta implementación la cual de manera esquemática presentamos a continuación: Jorge Guerra Guerra
27. Sistemas Distribuidos: Conceptos e implementación actuales 26 Component Component Event delivery Event bus Publish Component Fig. 11 Organización basada en eventos 3.1.4 Arquitectura basada en datos compartidos En este modelo se define una zona o espacio de datos en la que tanto el componente cliente como el componente servidor podrán colocar los mensajes que desean intercambiar. Inicialmente este modelo quedo asociado al concepto de base de datos distribuidas, donde diferentes base de datos situadas en diferentes partes del Sistema Distribuido pueden almacenar o proveer información a los diferentes procesos que lo soliciten sin importar el lugar donde se encuentren, posteriormente este modelo evolucionaría a lo que ahora denominamos computación en nube (cloud computing) en la que un cliente puede acceder a un servicio sin saber realmente donde se encuentra dicho servicio otorgando una máxima flexibilidad tanto en la implementación como en el mantenimiento de dicho servicio, un gráfico de esta arquitectura se presenta a continuación: Fig. 12 Organización basada en datos compartidos Jorge Guerra Guerra
28. Sistemas Distribuidos: Conceptos e implementación actuales 27 3.2 Arquitecturas Hardware de un Sistema Distribuido Tal como se describió en la primera lección del curso, un Sistema Distribuido consta de dos elementos fundamentales un sistema informático mas una red de computadoras, ambos se reúnen de modo indivisible para conformar el tipo de implementación que estamos estudiando. De ahí que la forma como se conectan los equipos de cómputo para implementar un Sistema Distribuido se presenta en dos modelos bastante conocidos: a) Modelo de estaciones de trabajo: Esta implementación reúne a computadoras en las que se encuentra diseminados los servicios hardware y software disponibles en el Sistema Distribuido. No existe el término cliente o servidor para distinguir a los nodos reunidos en este tipo de red ya que cada computador puede ser en un momento solicitante de un servicio, o en otro momento proveedor de otro, por lo que cada equipo computador recibe el nombre de entidad para describir su presencia en esta arquitectura. Un gráfico de este modelo se presenta a continuación: Fig. 13 Modelo de estaciones de trabajo Actualmente a ésta implementación también se le conoce con el nombre de redes P2P (peer to peer) redes que se volvieron famosas en la década de los 90 y a principios del año 2000 por implementar las famosas redes de intercambio de archivos y cuyos nombres conocemos hasta el día de hoy (Naspter, Ares, eMule y otros) asi como implementaciones académicas como JXTA desarrollada por SUN, de tipo open source utilizado hoy en día en muchas aplicaciones comerciales. b) Modelo cliente servidor: Es el modelo más conocido de implementación de Sistemas Distribuidos. En él las máquinas cumplen roles previamente definidos, las máquinas cliente que solicitan los servicios y las máquinas servidor que procesan las peticiones de servicio y generan la respuesta a las peticiones. Es el modelo más extensamente utilizado en la actualidad, un gráfico mostrando esta implementación se presenta a continuación: Jorge Guerra Guerra
29. Sistemas Distribuidos: Conceptos e implementación actuales 28 Fig. 14 Modelo cliente/servidor Esta implementación es usada por CORBA, RMI, DCOM, Web Services, JMX y otros. 3.3 Acceso a servicios en un Sistema Distribuido Todo Sistema Distribuido debe garantizar algún tipo de mecanismo que permita a un cliente poder enviar su mensaje al servidor que posea dicho servicio. Por ello, se han establecido diferentes formas de comunicación las que se reseñan a continuación: 3.3.1 Modelo multiproceso En este modelo se toma en cuenta la forma como se usan los procesadores y el espacio memoria disponible para la ejecución de los servicios. Se consideran dos modelos: 3.3.1.1 Modelo de memoria compartida Este modelo también es conocido como modelo multiprocesador debido a que los diferentes procesadores van a utilizar el mismo bloque de direcciones por lo que queda a la decisión del sistema operativo definir el lugar donde se colocaran los datos. Las redes basadas en computadoras con múltiples núcleos es un ejemplo típico de esta implementación. Jorge Guerra Guerra
30. Sistemas Distribuidos: Conceptos e implementación actuales 29 PI Elemento de proceso Mi Modulo de memoria Fig. 15 Modelo de memoria compartida 3.3.1.2 Modelo con memoria distribuida Este modelo se le conoce también como modelo multicomputador debido a la presencia de varios equipos de computo que poseen un único procesador el cual tiene su propio bloque de direcciones y por lo tanto controla los procesos que se colocan en él, debido a ello el programador debe saber donde se van a colocar los datos en este tipo de red. PI Elemento de proceso Mi Modulo de memoria Fig. 16 Modelo de memoria distribuida 3.3.2 Paso de mensajes En este modelo el proceso cliente envía un mensaje atreves de la red hacia el servidor que contiene el servicio a accesar y por la misma red debe regresar la respuesta, para que este concepto funcione se requiere que el cliente conozca la localización (máquina y proceso dentro de una máquina) del servicio a accesar. De este modelo tenemos dos opciones: a) Envío de mensajes: Se envía un mensaje conteniendo datos hacia el servidor el cual puede ser una cadena de caracteres (sockets), una llamada a un procedimiento remoto (RPC) o una invocación a un método existente en una clase remota (RMI, CORBA, DCOM). b) Ejecución remota: A diferencia del anterior se envía un código atreves de la red el cual se ejecutará en el servidor remoto utilizando los recursos y procesador de este. En el momento que esté disponible este código regresará al cliente Jorge Guerra Guerra
31. Sistemas Distribuidos: Conceptos e implementación actuales 30 conteniendo la respuesta al servicio solicitado. Los agentes son ejemplos más conocidos de este modelo. 3.4 Comunicación cliente/servidor, uso de interface y Stub La implementación de los Sistemas Distribuidos se considera un desarrollo informático basado en el modelo cliente/servidor del tipo de n capas heterogéneo, por lo tanto, hereda las mismas características de las implementaciones de este tipo una de las más importantes sin lugar a dudas es el aislamiento de los servicios ofrecidos por un proceso servidor a las peticiones que puedan efectuar los procesos cliente 30 través de las interfaces. La interface permite mostrar la descripción de aquellos servicios que pueden ser accesados remotamente y sirve como una mesa de partes que recibirá todas las solicitudes de ejecución y que posteriormente derivará al proceso servidor para su ejecución y envío de respuesta. Fig. 17 Acceso a servicios mediante interface Sin embargo, las interfaces en el Sistema Distribuido tienen un papel mucho más importante, debido a que tanto el proceso cliente como el proceso servidor por naturaleza son heterogéneos no será posible jamás poder realizar un intercambio de mensajes directo debido a la incompatibilidad manifiesta entre ambos. Es aquí donde aparece claramente el papel del componente integrador de estos procesos y que cumplirá con la tarea de permitir la comunicación eficiente entre los procesos involucrados, a este componente se le denomina MIDDLEWARE el cual define los protocolos de comunicación formato de mensaje, formato de datos y todo aquello necesario para la ejecución de servicios. Como es lógico el MIDDLEWARE deberá conectarse tanto con el cliente como el servidor, estos conectores se les conoce con el nombre de Stubs y cumplirán tareas de adaptación de mensajes, trasladarán la definición de los servicios ofrecidos por la interface de servidor hacia el lado cliente posibilitando que cualquier cliente conozca la descripción de los servicios que cualquier servidor tenga disponible. Los Stubs actúan como referencias a objetos remotos desde el lado cliente y se encargarán de retransmitir las llamadas desde cliente a servidor. Jorge Guerra Guerra
32. Sistemas Distribuidos: Conceptos e implementación actuales 31 3.5 Paradigma de computación en red Una vez localizado el servicio a solicitar y el cliente ya ha enviado los parámetros de entrada para la ejecución del servicio, ¿cómo se ejecuta este servicio? Este concepto se denomina paradigma de computación en red y se presenta en tres modelos característicos y que se utilizan en diferentes implementaciones. Debe indicarse además que para la ejecución de un servicio se requieren tres elementos fundamentales a) El procesador: El cual se encargara de ejecutar el servicio b) El código del servicio: Que contiene las instrucciones para la ejecución del servicio y generación de la respuesta solicitada c) Los recursos: Elementos de apoyo que son necesarios para la ejecución del servicio, pueden ser: base de datos, archivos, otros servidores, etc. A continuación se presentan los tres paradigmas actuales de computación en red: 3.5.1 Paradigma cliente/servidor En este paradigma el servidor posee el procesador, el código de servicio y los recursos, correspondiéndole al cliente únicamente la tarea de solicitar el servicio y esperar recibir la respuesta. Este paradigma se utiliza en aquellas implementaciones en las que el cliente puede ser de cualquier tipo de tecnología y cuyas características técnicas no son relevantes. Ejemplo de este paradigma son: CORBA, RMI, Web Services, DCOM. 3.5.2 Paradigma código por demanda Este paradigma tiene la particularidad en que el cliente es el que tiene el procesador en el que se va a ejecutar el servicio, mientras el servidor posee el código de los servicios y los recursos. Este modelo el servidor debe enviar el código del servicio al cliente para que este a continuación pueda ejecutar dicho servicio y accesando a los recursos obtener la respuesta. Es evidente que el tipo de cliente utilizado en este paradigma tiene características técnicas mucho más fuertes que el paradigma anterior como por ejemplo un procesador de determinada potencia, una cantidad de memoria suficiente para alojar al servicio recibido. Ejemplo de este paradigma son: Youtube, los juegos en línea, la ejecución de los archivos flash 31 través de HTML, etc. 3.5.3 Paradigma de agente móvil En este paradigma el cliente envía un bloque de código conteniendo las líneas del servicio el cual será enviado al servidor que posee el procesador y los recursos. Una vez llegado allí se ejecutara el servicio de manera local obteniendo la respuesta, transportándose luego este código de regreso al proceso cliente. Los sistemas basados en agentes son el ejemplo más conocido de este tipo de paradigma. 3.6 Sistemas Distribuidos de gran escala Los Sistemas Distribuidos se construyen en su gran mayoría para aplicaciones o usos generales es decir, para todo tipo de organización que requiere información o ejecutar operaciones de carácter heterogéneo o que se encuentren diseminados en Jorge Guerra Guerra
33. Sistemas Distribuidos: Conceptos e implementación actuales 32 múltiples servidores. Sin embargo, hay una categoría de Sistemas Distribuidos que están destinados a trabajar en aplicaciones particulares, las cuales tendrán como característica la necesidad de uso de grandes recursos de información, ejecución de procesos complejos o cálculos matemáticos de gran amplitud, asimismo, operaciones que demanda buena performance en los sistemas computadores. Para esta situación se presentan las soluciones distribuidas de gran escala las cuales vienen a solucionar en gran parte el requerimiento urgente de un gran poder de cálculo necesario para estas situaciones de carácter especial; dentro de esta categoría se encuentran las aplicaciones basadas en Cluster Computing y Grid Computing. 3.6.1 Cluster Computing La implementación Cluster está basada en la idea de utilizar un conjunto de computadoras independientes que se van a conectar entre sí formando una red de tipo homogénea. Esto es importante, debido a que gran parte de las características de este modelo se basan en que los computadores deben ser idénticos en sus características técnicas y deben trabajar en un ambiente de alto acoplamiento y gran cohesión. La nota característica de esta implementación es que esta red no se verá nunca ya que existe un computador maestro (front end) que será el que se comunique con el exterior tomando las peticiones que provengan de los clientes. Fig. 18 Modelo Cluster Computing El Cluster posee un software especial el cual se encargara de dividir la tarea en subtareas que serán repartidas entre los nodos de Cluster para la ejecución paralela correspondiente. Una característica importante del modelo Cluster es el concepto de balanceo de carga o Failover que consiste, si un computador del Cluster falla o queda fuera de línea, los demás computadores del Cluster asumen la tarea de este en forma automática completando asi el proceso en ejecución. Jorge Guerra Guerra
34. Sistemas Distribuidos: Conceptos e implementación actuales 33 Fig. 19 Ejemplos de implementacion Cluster Computing 3.6.2 Grid Computing Este modelo define la organización de un Sistema Distribuido atreves de la compartición absoluta de todos los recursos computacionales existentes tanto hardware como software por parte de un computador individual con el fin de ejecutar un servicio solicitado utilizando toda infraestructura existente. En ese sentido, el comportamiento del Grid será la de un uniprocesador virtual, para ello, no será necesario que los equipos de cómputo sean de las mismas características, además se pueden encontrar en diferentes lugares y trabajar utilizando diferentes tipos de redes. Para ello, el software de tipo Grid administrara los recursos organizando una arquitectura de tipo capas la cual se muestra en la siguiente figura: Jorge Guerra Guerra
35. Sistemas Distribuidos: Conceptos e implementación actuales 34 Fig. 20 Organización de un Grid Generalmente, el modelo Grid comprende todo tipo de sistemas computadores desde Mainframes, Clusters, así como computadoras personales de todo tipo, los cuales son “federados” tanto de manera permanente como temporal a través de un software que organizara los recursos como se mostro en el grafico anterior. De acuerdo a la tecnología informática utilizada para determinar el funcionamiento del Grid se definen cuatro categorías dentro del Grid Computing, las cuales se muestran en la tabla siguiente: Tipo Grid Definicion Aplicaciones Ejemplos Lideres del mercado Compute Comparte Scientific Mersenne grid; AVAKI, Data Grid exceso de research; SETI@home. Synapse, Dell, ciclos de engineering; Entropia, IBM, computo (y financial; Plataform, Sun, almacenaje) government, others. para proveer engineering…….. un ambiento (compute- de computo intesive de muy alta applications) performance Information Arquitectura Business Royal Bank of IBM, SGI-and Grid distribuida analytics (for Canada; at some point diseñada para analytics Wachovia Corp; expect Oracle compartir acceleration); Morgan to enter this aplicaciones y financial Stanley; market datos services; retail Hewitt; NLI segment comerciales banking; Research técnicos a petroleum; Institute gran escala (geophysical (Nippon Life analysis); (Data- Insurance) intensive applications). Service Grid Integración Enterprise and OGSA (Open Data Synapse, de conceptos inter-enterprise Grid Services IBM, Sun. y tecnologías applications Architecture) de Grid y where program Jorge Guerra Guerra
36. Sistemas Distribuidos: Conceptos e implementación actuales 35 servicios Web to program para communications implementar needs to take una place arquitectura orientada a servicios Intelligent Arquitecturas Beyond IBM Autonomic No leaders Grid de utilidad de deparment and Computing today- expect tipo grid auto enterprise- IBM Workload IBM, Sun and configurable extended Manager HP to be major enterprises HP Planetary players as encompassing Computing these grid partners, Sun types evolve. suppliers, and Management customers Center Tabla 5 Tipos de Grid 3.7 La Web como implementación de Sistemas Distribuidos Los conceptos teóricos sobre Sistemas Distribuidos datan de muchos años sin embargo, la implementación práctica es relativamente reciente debido a la imposibilidad de poder lograr lo que los tecnólogos llaman la conectividad total es decir, el concepto por el cual cualquier cliente puede comunicarse con cualquier servidor. Dentro de la evolución informática se desarrollaron diferentes intentos por lograr este concepto, desde los sistemas operativos distribuidos (como AMOEBA), como implementaciones basadas en Middleware (como CORBA), cada uno de ellos demostró una debilidad inherente para lograr la conectividad que se requería. Posteriormente, sin proponérselo, Tim Benners Lee al desarrollar el concepto HTML y a través de la creación e implementación de la World Wide Web construiría el entorno de integración de aplicaciones informáticas que las tecnologías anteriores no pudieron alcanzar, por ello, la Web es considerada la plataforma ideal para la implantación de soluciones de tipo distribuidas. La Web aprovecha eficientemente la infraestructura física definida por la Internet y permite que máquinas de diferente naturaleza y tecnología puedan intercambiar mensajes no importando el lugar donde se encuentren, como lo muestra el grafico siguiente: Jorge Guerra Guerra
37. Sistemas Distribuidos: Conceptos e implementación actuales 36 Fig. 21 Organización física de la web 3.7.1 Estándares de la Web Para que una solución distribuida pueda correr atreves del entorno Web se requiere obligatoriamente cumplir una serie de estándares exigidos por este entorno y los cuales son: a) El protocolo de comunicación será HTTP b) El formato de documento o interface de usuario de la aplicación deberá ser HTML c) El modelo de referencia para la comunicación distribuida deberá ser el modelo TCP/IP de 4 capas d) El formato de intercambio de datos deberá ser XML Dado, el rápido crecimiento de la Web y su aceptación masiva como el entorno de desarrollo y ejecución de aplicaciones que es hoy día, estos estándares son utilizados por todas las aplicaciones sin importar la tecnología en la que estén construidas ni la plataforma en la que estén alojadas. 3.7.2 Debilidades de la Web Si bien es cierto, la Web es el estándar actual para la ejecución de aplicaciones distribuidas, este entorno tiene algunas debilidades inherentes a su funcionamiento, como son: a) El formato HTML es estático por naturaleza, lo que quiere decir que su contenido siempre será el mismo, lo cual imposibilitaría su uso para operaciones transaccionales o de gestión de contenidos. b) El protocolo HTTP es de tipo useless, es decir sin estado, esto quiere decir que no tiene la capacidad de recordar operaciones realizadas por un mismo cliente en tiempos anteriores, por lo que sería imposible realizar operaciones de acumulación de transacciones, tan necesarias en sistemas de ventas o consultas. c) La aplicación Web está diseñada con el fin de que el cliente de dicha aplicación sea un ser humano, de ahí la explicación del uso en la pagina HTML de controles Jorge Guerra Guerra
38. Sistemas Distribuidos: Conceptos e implementación actuales 37 visuales como cajas, botones, combos, etc. Pero, este tipo de aplicación sería totalmente inútil si el cliente a interactuar fuera otra aplicación más o menos compleja que la inicial (por ejemplo el modelo B2B). Debido a ello, el enfoque actual es la mejora de las características de la tecnología Web desarrollando conceptos como Web Services, HTML Dinámica, Web Semántica, Ontologías y otros destinados a subsanar las deficiencias observadas y potenciar aún más el uso de la Web como la implementación más utilizada de nuestro tiempo. 3.7.3 Generación de HTML Dinámica Una de las principales dificultades de la implementación de las aplicaciones distribuidas bajo entorno Web fue sin lugar a dudas la generación de las páginas HTML con contenido dinámico. Al respecto, se desarrollaron tres modalidades de generación de páginas HTML de estas características que fueron las siguientes: a) CGI Common Gateware Interface: En esta tecnología cada petición HTTP genera un Nuevo proceso el cual se encarga de analizar la solicitud y generar un resultado. Cada proceso corresponderá a una transacción determinada. Es flexible e ideal para pequeñas aplicaciones con pocos clientes concurrentes. El problema es que no escala adecuadamente. b) Plug-ins: En esta tecnología la página HTML es generada debido a la ejecución de un componente de código perteneciente a un lenguaje determinado, el cual al ejecutarse incorporara etiquetas HTML y completará la descripción de la página que será devuelta al cliente solicitante. Tiene un mejor rendimiento y esta más extensamente utilizada. Hay que tener en cuenta, sin embargo, niveles de seguridad y confiabilidad al usar esta tecnología, debido a los posibles huecos de seguridad que podrían producirse por el uso de dicho Plug-in. c) Servidor especializado: Se definen servidores Web que por su tecnología generan la página dinámica de manera óptima con una facilidad de desarrollo debido a las herramientas que poseen. Sin embargo, los lenguajes que utilizan no son estándares y su configuración es bastante rígida. 3.7.3.1 Tipos de Plug-ins 3.7.3.1.1 HTML incrustado en código Este tipo de plug-in define a un componente de código que al recibir una petición de servicio la ejecuta en su lenguaje nativo y posteriormente genera una página HTML y coloca en ella la respuesta obtenida para luego ser enviada al cliente solicitante. Este tipo de plug-in es fácilmente optimizable y se centra en la lógica de negocios de la aplicación. Ejemplos de este tipo son los Servlets y lenguajes como Perl, Python. 3.7.3.1.2 Código incrustado en HTML En este tipo de plug-in la pagina HTML ya existe previamente, y en ella se colocan etiquetas pertenecientes a un lenguaje determinado, que al ejecutarse procesan el servicio solicitado y generan etiquetas HTML que se agregan a las ya existentes, enviándose posteriormente el resultado al cliente. Este tipo de plug-in está centrado en la interface de usuario, además son fáciles de crear y modificar, así Jorge Guerra Guerra
39. Sistemas Distribuidos: Conceptos e implementación actuales 38 como no requieren grandes formalismos en su implementación. Ejemplos de este tipo son JSP, PHP, ASP y ASPX. 3.7.4 Estructura de una aplicación Web En modo conceptual una aplicación web está constituida por un cliente que utilizan un navegador para visualizar la interface de entrada, un servidor web que es el que recibe la petición del cliente mediante un protocolo HTTP, un servidor de aplicaciones que tiene la lógica de negocios, es decir, los servicios a ejecutar y un servidor de base de datos que contiene el repositorio de información de la aplicación. En el grafico siguiente se muestra este modelo: Fig. 22 Aplicación web Por otro lado, del punto de vista informático los tres componentes básicos de la aplicación web pueden ser de cualquier tecnología disponible manteniendo por ello el carácter heterogéneo que los Sistemas Distribuidos definen como se visualiza en el siguiente grafico: Fig. 23 Componentes de una aplicación web 3.7.5 Arquitectura de una aplicación web Tradicionalmente, el advenimiento de las aplicaciones basadas en LAN, trajo como consecuencia la adopción del patrón de arquitectura cliente/servidor de tres capas, interface de usuario, lógica de negocios y acceso a los datos, el cual se desempeño exitosamente durante parte de la década de los 80 y la primera parte de la década Jorge Guerra Guerra
40. Sistemas Distribuidos: Conceptos e implementación actuales 39 de los 90. Este patrón planteaba como condición necesaria que tanto el cliente como el servidor deberían tener por lo menos un elemento de la aplicación instalado en el computador correspondiente. La adopción del entorno web trajo un gran inconveniente a este patrón, debido a que normalmente todos los elementos de la aplicación web residen en el servidor de manera obligatoria. Por ello, algunas empresas de desarrollo tecnológico (por ejemplo BEA WEBLOGIC) hicieron una adaptación del modelo cliente servidor para ser usado en la web, como se presenta en la siguiente figura: Fig. 24 Modelo de tres capas aplicado a la web Esta adaptación no tuvo mayor uso debido a la presunción errónea de que el navegador web es parte de la aplicación, si esto fuera cierto, tendríamos que aceptar que el monitor de la computadora seria parte de una aplicación basada en ventanas. Por esa razón, se definiría un patrón de arquitectura destinado específicamente para el entorno web, dicho patrón se conoce con el nombre de MVC (Modelo Vista Controlador) el cual se muestra en el siguiente gráfico: Fig. 25 Arquitectura MBC Este patrón utiliza tres componentes fundamentales que son: Jorge Guerra Guerra
Areas donde implementamos los sistemas distribuidos

References: resolución 
 Resolución 
 Resolución 
 Resolución 
 resolución 
 resolución 
 Resolución