Sistemas distribuidos.docx
Short Description
Download Sistemas distribuidos.docx...
Description
INSTITUTO POLITÉCNICO NACIONAL
1
ESCUELA DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INGENIERÍA EN COMPUTACIÓN PROFESORA: SALAS JIMÉNEZ VERÓNICA ALUMNO: RAMÍREZ RAYGOZA JUAN JOSÉ SIGNATURA: SISTEMAS DISTRIBUIDOS GRUPO: 8CM12 TEMA: SISTEMAS DISTRIBUIDOS FECHA: 6 DE MARZO DEL 2017
SISTEMAS DISTRIBUIDOS
ÍNDICE CAPITULO 1 1.1 Introducción a los sistemas distribuidos 1.2 Características de un sistema distribuido 2 Heterogeneidad 1.2.1 1.2.2 Extensibilidad 1.2.3 Seguridad 1.2.4 Escalabilidad 1.2.5 Control de errores 1.2.6 Concurrencia 1.2.7 Transparencia 1.3 Modelos arquitectónicos 1.4 Modelo fundamentales 1.5 Recursos de comunicación 1.5.1 Protocolos TCP/IP 1.5.2 Servicios y puertos 1.5.3 Procesos y demonios
CAPÍTULO 2 2.1 Introducción a los sistemas de multiprocesamiento 2.2 Clasificación de los sistemas de multiprocesamiento 2.2.1 Fuertemente acoplados 2.2.2 Débilmente acoplados 2.3 Sistemas de cluster 2.3.1 Multiprocesamiento dedicado 2.3.2 Multiprocesamiento compartido 2.4 Protocolos de comunicación 2.5 Paso de mensajes 2.6 Objetos remotos 2.7 Procedimientos remotos
CAPÍTULO 3 3.1 Almacenamiento de alta disponibilidad 3.2 Servicios locales de alta disponibilidad 3.2.1 Arreglos de discos 3.2.2 Manejo de transacciones 3.3 Servicios distribuidos de alta disponibilidad 3.3.1 Servicios de almacén de archivos 3.3.2 Servicios de distribución de información 3.4 Servicios de Directorio y Búsqueda 3.5 Servicios de archivos en red
SISTEMAS DISTRIBUIDOS
3.6 Replicación
3
CAPÍTULO 1
SISTEMAS DISTRIBUIDOS
1.1 INTRODUCCIÓN A LOS SISTEMAS DISTRIBUIDOS 4 La Computación Distribuida, se puede definir para referirse a cualquier sistema en el que múltiples agentes autónomos, cada uno con capacidades de cómputo individual, se comunican entre sí y afectan mutuamente su comportamiento. Los agentes, usualmente llamados procesadores, procesos o nodos, pueden ser desde computadoras completas hasta autómatas celulares con capacidad de cómputo y memoria muy limitados que se pueden comunicar mediante mensajes. La Computación Distribuida hace referencia a cualquier evento en el cual se maneja un sistema en una red de computadoras y trata de describir las tendencias hacia la funcionalidad distribuida: sistemas distribuidos, procesamiento distribuido, bases de datos distribuidas y cualquier otro término computacional que sea distribuido. Podemos decir entonces, que la Computación Distribuida se refiere a los servicios que provee un Sistema de Computación Distribuido. Una de las primeras caracterizaciones de un Sistema Distribuido atribuye las siguientes propiedades: o o o o o
Está compuesto por varios recursos informáticos de propósito general, tanto físicos como lógicos, que pueden asignarse dinámicamente a tareas concretas. Estos recursos están distribuidos físicamente, y funcionan gracias a una red de comunicaciones. Hay un sistema operativo de alto nivel, que unifica e integra el control de los componentes. El hecho de la distribución es transparente, permitiendo que los servicios puedan ser solicitados especificando simplemente su nombre (no su localización). El funcionamiento de los recursos físicos y lógicos está caracterizado por una autonomía coordinada.
A pesar del tiempo transcurrido, esta definición sigue siendo, en esencia, válida. Así, para Coulouris un sistema distribuido es aquél que está compuesto por varias computadoras autónomas conectadas mediante una red de comunicaciones y equipadas con programas que les permitan coordinar sus actividades y compartir recursos. Bal ofrece una definición muy similar: ``Un sistema de computación distribuida está compuesto por
SISTEMAS DISTRIBUIDOS
varios procesadores autónomos que no comparten memoria principal, pero cooperan mediante el paso de mensajes sobre una red de comunicaciones''. Y según Schroeder, todo sistema distribuido tiene tres características básicas. La existencia de varias computadoras, en general, cada una con su propio procesador, memoria local, subsistema de entrada/salida y quizás incluso memoria persistente. o
5 o
Interconexión. Existen vías que permiten la comunicación entre las computadoras, a través de las cuales pueden transmitir información. Estado compartido. Las computadoras cooperan para mantener algún tipo de estado compartido. El funcionamiento correcto del sistema se describirse como el mantenimiento de una serie de invariantes globales que requiere la coordinación de varias computadoras.
El término de Computación Distribuida se define de varias maneras y lo mismo se aplica al término de Sistema Distribuido. Una característica muy importante es que las diferencias entre las computadoras y las maneras en que estas se comunican no son transparentes para el usuario final, esto mismo aplica para la organización interna del sistema distribuido. Otra característica importante es que los usuarios y las aplicaciones pueden interactuar con un Sistema Distribuido de manera consistente y uniforme, sin importar donde y cuando se lleve a cabo la interacción. Todo Sistema Distribuido debe también ser relativamente fácil poder expandir, lo cual se logra al tener computadoras independientes, pero al mismo tiempo “esconder” las funciones de dichas computadoras en el sistema. Normalmente un sistema distribuido debe de estar siempre disponible a pesar de que ciertas partes que lo conforman puedan no estar funcionando. Los usuarios y las aplicaciones no deben de notar en ningún momento que estas partes están siendo reemplazadas o reparadas, o que se han agregado nuevas partes al sistema para poder dar servicio a más usuarios o aplicaciones.
1.2.1 HETEROGENEIDAD Al hablar de heterogeneidad nos referimos a la variedad y diferencia que podemos encontrar en los elementos que componen una red de computadoras sobre la que se ejecuta un sistema distribuido, dicha heterogeneidad no sólo se aplica a las redes y al hardware de las computadoras, sino también a los sistemas operativos, los lenguajes de programación y las implementaciones en las que trabajan los diferentes desarrolladores.
SISTEMAS DISTRIBUIDOS
Un ejemplo de esto lo podemos ver muy claro en Internet, ya que es una red que está conformada por muchos tipos de redes cuyas diferencias se encuentran enmascaradas, puesto que todas las computadoras que se conectan a este utilizan los protocolos de Internet para comunicarse una con otra, así una computadora conectada a una red Ethernet puede comunicarse con otra computadora conectada a una red TokenRing, basta con que se haga una
6
implementación de los protocolos de Internet para cada una de esas redes.
SISTEMAS DISTRIBUIDOS
1.2.2 EXTENSIBILIDAD La extensibilidad y la apertura son dos características de un sistema distribuido que están ampliamente ligadas una con la otra. Un sistema abierto debe de ser 7 extensible y un sistema extensible puede ser etiquetado como un sistema abierto y un sistema distribuido debe de contar con ambas características. Un sistema distribuido abierto es un sistema que ofrece servicios desarrollados de acuerdo a reglas estandarizadas que describen la sintaxis y la semántica de dichos servicios. Estas reglas son formalizadas en protocolos. En el caso de los sistemas distribuidos, los servicios se especifican generalmente a través de interfaces que por lo general son descritas en un Lenguaje de Definición de Interfaz (IDL), dicho lenguaje especifica los nombres de las funciones que están disponibles, así como los parámetros de entrada, los valores de salida y los posibles errores que pueden obtenerse al invocarse dichas funciones. Si la definición de una interfaz se hace de manera adecuada, esta permitirá que dos procesos puedan comunicarse entre sí, siempre y cuando ambos procesos cuenten con la misma interfaz. Esto también permite que cada dos desarrolladores independientes construyan su propia implementación de dichas interfaces, lo cual conlleva al desarrollo de dos sistemas distribuidos desarrollados por separado que operan de la misma manera. Una especificación se considera adecuada como: o o
Completa: significa que todo lo necesario para hacer una implementación de la interfaz ha sido especificado y que no será necesario que el propio desarrollador sea quien agregue detalles específicos de la implementación. Neutral: significa que las especificaciones no deben tener ninguna tendencia hacia como se debe de hacer la implementación de dicha especificación. La completitud y la neutralidad son muy importantes para la interoperabilidad y la portabilidad, que son características que complementan la apertura de un sistema distribuido.
La interoperabilidad, también conocida como compatibilidad, caracteriza el grado en el que la implementación de sistemas o componentes de diferentes fabricantes pueden coexistir y trabajar juntos, siempre y cuando se utilicen los servicios como este especificado por el estándar común bajo el cual dichos sistemas fueron desarrollados. La portabilidad por su parte caracteriza a que nivel puede ser ejecutada una aplicación desarrollada para un sistema distribuido “A” sobre un sistema distribuido “B” que implementa las mismas interfaces del sistema “A”, pero sin hacerle modificaciones.
SISTEMAS DISTRIBUIDOS
Uno de los principales objetivos que se persiguen al desarrollar un sistema operativo abierto, es que este sea flexible, lo que implica que dicho sistema puede ser integrado por diferentes componentes (tanto de hardware como de software), posiblemente de diferentes proveedores, que nuevos componentes pueden agregarse al sistema y que componentes existentes pueden ser reemplazados sin afectar el funcionamiento de los componentes ya existentes, 8 en otras palabras, un sistema distribuido abierto debe de ser extensible. Para lograr la flexibilidad en un sistema distribuido abierto es necesario que el sistema este organizado en módulos o componentes relativamente pequeños y fáciles de reemplazar, esto implica que además de definir las especificaciones y la documentación de las interfaces de alto nivel a las que tienen acceso los usuarios y las aplicaciones, también es necesario definir las especificaciones de las interfaces de las partes internas que componen el sistema y describir de qué manera interactúan entre sí.
1.2.3 SEGURIDAD La gran mayoría de la información que maneja un sistema distribuido tiene un alto valor para los usuarios de dicho sistema, y es por eso que la seguridad de la información juega un papel clave al momento de desarrollar dicho sistema. La seguridad de la información es todo lo que concierne a asegurar que no ocurrirán cosas malas con los mensajes que envían los clientes para solicitar información a un servidor, y por supuesto, con la información que estos reciben como respuesta a sus peticiones. No basta con asegurar que estos mensajes serán transmitidos de forma oculta, sino que también hay que asegurar que la información sea entregada únicamente a quien debe de ser entregada y que esto se hará siempre de forma correcta y en el momento en que se requiere. La seguridad es relativa a la amenaza que cada sistema afronta, afecta a todos los puntos del sistema y debe de ser fácil de obtener. La seguridad debe ofrecer los siguientes servicios: o o o o o o
Confidencialidad, es decir, el manejo privado de la información: proteger la información de ser accedida por usuarios no autorizados. Autentificación, o capacidad de asegurar la identidad de un usuario. Integridad, que asegura que la información que empleamos no ha sido manipulada, alterada o corrompida desde el origen. No repudio, de una operación de emisión y recepción de información por parte de los agentes. Control de acceso a la información y/o recursos administrados por un sistema. Disponibilidad de los recursos necesarios de un sistema cuando estos sean requeridos, lo que protege la información contra interferencia con los procedimientos de acceso a los recursos. SISTEMAS DISTRIBUIDOS
El alto valor de que tiene la información es la razón principal por la que esta se puede ver amenazada de muchas formas, entre las principales podemos encontrar: Interrupción: Destruye la información o la inutiliza. Ataca la disponibilidad.
9
Interceptación: Obtiene acceso a información. Ataca la confidencialidad
Modificación: Modifica la información. Ataca la integridad.
Fabricación: Falsifica la información. Ataca autenticidad.
la
Para defenderse de este tipo de amenazas se han desarrollado diversas técnicas de encriptación, firmas digitales, implementación de barreras perimetrales (firewalls), modelos de seguridad internos y externos, etc. Sin embargo, estas técnicas parecen no ser suficientes para evitar que intrusos logren interferir con el flujo de información óptimo de un sistema, ya que encuentran formas de “brincarse” las barreras de seguridad de muchas organizaciones y además siguen ideando nuevas formas de atacar y amenazar la información. Como hoy en día la capacidad de los sistemas distribuidos ha crecido mucho, en ocasiones resulta muy difícil o incluso imposible bloquear el servicio utilizando una sola computadora atacante, por lo que ahora se han desarrollado los ataques de denegación de servicio distribuidos, los cuales hacen uso de miles o incluso millones de computadoras para generar las peticiones al sistema que se desea bloquear, por lo que bloquear un ataque de esta magnitud resulta sumamente complicado. SISTEMAS DISTRIBUIDOS
Si bien no podemos asegurar que un sistema distribuido sea cien por ciento seguro, es importante contar con un esquema de seguridad lo más robusto posible que, a pesar de no ser inmune a todo tipo de ataques, si será capaz de frenar la gran mayoría de dichos ataques. Estas son algunas recomendaciones muy útiles para los desarrolladores, administradores e implementadores de un sistema distribuidos. 10
Efectuar un análisis de riesgos. La idea es muy sencilla: trazar todos los elementos que conforman nuestro sistema (hardware y software) y observar cuáles involucran más o menos riesgo. Esto desembocará en un plan de seguridad cuyo objetivo es disminuir el riesgo total del sistema, que se puede modelar como la suma de los riesgos de sus componentes: RIESGO TOTAL = RIESGO (componente 1) + RIESGO (componente 2). El riesgo de cada componente está en función directa a las pérdidas que ocasionaría el que éste deje de operar, así como en función de cuán vulnerable es dicho componente en este momento. Mantener las cosas simples Un sistema complejo es más difícil de asegurar y potencialmente proporciona una mayor cantidad de puertas abiertas a los atacantes. En general, es recomendable intentar dividir el problema mediante la simplificación de la configuración, para así identificar los puntos o rutas de control vulnerables para incrementar la seguridad. La seguridad debe estar en todos los niveles. Esto se puede expresar más sencillamente como: no confiar el sistema a un único mecanismo de seguridad. La información fluye a través de los distintos componentes y/o capas del sistema y son muchas las instancias en las que se puede mejorar su seguridad. La recomendación estipula que utilicemos todas estas instancias a pesar de que en principio puedan parecer redundantes. Esto tiene dos problemas: o o
Muchos ataques o "vulnerabilidades" se originan (de forma inocente o intencional) desde dentro de la organización. El sistema que controla la "puerta" siempre puede fallar.
Encriptar tanto como sea posible En general, los canales de comunicación más vulnerables o de mayor cercanía al público requieren una encriptación "más fuerte", es decir, más difícil de descifrar por los curiosos o atacantes. Cierta información conlleva más riesgo que otra, y por tanto requerirá un nivel de encriptación diferenciado. SISTEMAS DISTRIBUIDOS
La tecnología de encriptación de información destinada a pasar a través de la red ha evolucionado bastante, haciéndose popular el término VPN para hacer referencia a canales que encriptan la información de un modo más o menos transparente. Hay soluciones propietarias, así como estándares relativamente implementados como IP Sec. Ciertas aplicaciones estándares han recibido soluciones de encriptación también estándar. El caso del Web encriptado bajo SSL11(HTTPS) junto con la industria de certificados digitales es el caso más conspicuo. De igual modo los estándares para correo electrónico PGP (o derivados) y S/MIME son integrados cada vez con mayor frecuencia en las aplicaciones de los usuarios finales. Hay muchas más recomendaciones de seguridad como, por ejemplo: o o o o o o o o o o o o
No confiar en la autenticación estándar. No usar la configuración "estándar". Educar a los usuarios. Ejecutar sólo los servicios imprescindiblesMantenerse al día con las actualizaciones y hacer chequeos regulares. Establecer planes de contingencia y sistemas de respaldo. Mantener contacto con el proveedor de líneas de comunicación. No permitir conexiones directas desde la red interna a Internet. Hacer uso de una red perimétrica o zona desmilitarizada. Prácticas de programación segura, Vigilancia. Establecimiento de políticas, etc.
1.2.4 ESCALABILIDAD La escalabilidad es una de las características más importantes para los desarrolladores de un sistema distribuido. Se dice que un sistema es escalable si logra conservar su efectividad cuando hay el número de recursos y el número de usuarios incrementa significativamente. La escalabilidad de un sistema pude medirse en tres aspectos diferentes: o o o
Con respecto a su tamaño: lo que significa que se pueden agregar más usuarios y más recursos al sistema de una manera muy fácil. Con respecto a su localización o área de implementación: lo que significa que tanto los usuarios como los recursos pueden estar en locaciones remotas y separadas el uno del otro. Con respecto a su administración: lo que significa que puede ser fácil de administrar a pesar de que se utiliza en diferentes organizaciones independientes que cuentan con diferentes políticas de seguridad y que hacen un uso particular del sistema.
Desafortunadamente, un sistema que es escalable en uno o más de estos aspectos por lo general afecta el rendimiento del sistema conforme al crecimiento del mismo. Problemas de la Escalabilidad SISTEMAS DISTRIBUIDOS
Cuando se necesita escalar un sistema a un nivel más alto es muy común que surja algún tipo de problema. Si consideramos la escalabilidad con respecto al tamaño de un sistema, nos encontramos con las limitaciones que presentan los servicios, los datos y los algoritmos centralizados. En muchos sistemas distribuidos es común encontrar servicios centralizados, es decir, que son implementados en un mismo servidor, lo que puede 12 ocasionar un problema muy obvio: este servidor puede convertirse en un cuello de botella si el número de usuarios crece, y a pesar de tener una capacidad de procesamiento y almacenamiento virtualmente ilimitada, la comunicación con este servidor puede llegar a tener un límite y eventualmente impedir el crecimiento del sistema. Desafortunadamente el uso de un sólo servidor puede ser inevitable, ya que por lo general tenemos servicios que trabajan con información muy sensible y que tiene que ser lo más segura posible, por lo que el tener esta información almacenada en diferentes servidores puede llegar a poner la información en riesgo y hacer el sistema más vulnerable. El uso de algoritmos centralizados es en teoría la solución óptima a un problema de computación distribuida, sin embargo, en la práctica podemos ver que el uso de este tipo de algoritmos en un sistema distribuido grande no es una buena idea, ya que colectar y transportar los datos de entrada y salida del sistema hacia un sólo punto en el que se computan dichos datos pudiese sobrecargar parte de la red con todos los mensajes que necesita enviar y recibir, además de que el computo de toda la información en una sola máquina tiene más riesgo a fallos y puede resultar más tardada. La solución a este problema es el uso de algoritmos descentralizados, los cuales cuentan con ciertas características que los diferencian de los algoritmos centralizados, entre las que podemos mencionar: o o o o
Ninguna máquina tiene información completa del estado del sistema. Cada máquina toma decisiones propias basándose solamente en información local. Problemas o fallos de una máquina no arruinan el procesamiento de todo el algoritmo. No necesariamente se cuenta con un reloj global (algoritmos no sincronizados).
Por otro lado, tenemos los problemas de la escalabilidad con respecto a la localización o área de implementación de un sistema distribuido. Una de las principales razones por las cuales resulta difícil escalar los sistemas distribuidos que existen actualmente, es que dichos sistemas fueron diseñados para trabajar redes de acceso locales (LANs) y que están basados en una comunicación síncrona. Otro problema a considerar es que la comunicación en una WAN es poco confiable y en la gran mayoría de los casos es punto a punto, al contrario de las redes locales que generalmente son muy confiables y permiten hacer
SISTEMAS DISTRIBUIDOS
difusiones o transmisiones de tipo “broadcast”, lo que hace mucho más fácil el desarrollo de sistemas distribuidos. La escalabilidad con respecto a la localización o área de implementación está directamente relacionada con los problemas de soluciones centralizadas comentados anteriormente.
13 Finalmente, podemos mencionar los problemas que acarrea la escalabilidad de la administración de un sistema distribuido. Este problema se da cuando un sistema distribuido de expande a otro dominio, que por lo general contará con diferentes políticas de uso y pago de recursos, administración y seguridad. Por lo general cuando esto pasa se deben de tomar al menos dos tipos de medidas de seguridad: o o
El sistema distribuido tiene que protegerse de ataques malignos provenientes del nuevo dominio, y restringir el acceso a los servicios y datos que no están a disponibilidad de los usuarios del mismo. El nuevo dominio tiene que protegerse de ataques malignos provenientes del sistema distribuido. Básicamente, el nuevo dominio no sabe qué tipo de información puede esperar del código enviado por el nuevo dominio por lo que pudiera decidir limitar los permisos de acceso a dicho código.
Técnicas de Escalabilidad Como los problemas de escalabilidad de los sistemas distribuidos se manifiestan como problemas de rendimiento causados por la capacidad limitada de servidores y de las redes de comunicaciones, existen solamente tres técnicas de escalabilidad: o
o o
Eliminar la latencia de las comunicaciones: es útil en el caso de querer lograr la escalabilidad geográfica de un sistema, la idea básica es simple: tratar de evitar la espera de respuestas a las peticiones que se hagan a servicios remotos lo más que se pueda. La distribución, que consiste en tomar un elemento, separarlo en partes pequeñas y distribuir esas partes en todo el sistema. La replicación aumenta la disponibilidad de los componentes del sistema y además ayuda a balancear la carga entre los componentes que se replican, con lo que se logra una mejora del rendimiento del sistema.
Una forma especial de replicación es el Cacheo, el cual consiste en guardar una copia de algún recurso (por lo general, de datos) de forma temporal en un lugar cercano al cliente, para que éste lo pueda acceder más fácilmente.
1.2.5 CONTROL DE ERRORES El fallo tanto del hardware como el software es algo prácticamente inevitable, y por más confiable que pueda parecer algún componente, siempre es importante estar preparado para cuando este falle. En un sistema centralizado SISTEMAS DISTRIBUIDOS
por lo general el fallo de cualquier componente del sistema provoca que todos los servicios que este ofrece dejen de funcionar, en cambio, en un sistema distribuido, los fallos son parciales, puesto que solo afectan a los servicios que el componente que fallo este prestando, mientras que otros servicios que prestan otros componentes siguen funcionando. El tratamiento de fallos en un sistema distribuido es una tarea difícil, pero que 14 se puede lograr si se utilizan las técnicas adecuadas, según el sistema que se desee proteger. Algunas de las técnicas más comunes son las siguientes: Detección de Fallos: no es posible tratar un fallo si este no se ha detectado, sin embargo, la detección de un fallo dentro de un sistema distribuido puede no ser tan sencillo, tanto como en los componentes de hardware y software, los sistemas distribuidos operan gracias a la transmisión de mensajes, y el funcionamiento del sistema depende en gran parte de estas transmisiones de datos entre los diferentes componentes; un fallo en la transmisión de datos entre componentes no es fácil detectar, pero es algo que se puede esperar (dependiendo del medio por el que se haga la transmisión y otras condiciones) y al saber que existe la posibilidad de ese fallo, se puede monitorear y aplicar técnicas que aseguren que dicha transmisión siempre sea correcta. Enmascaramiento de Fallos: una vez que un fallo es detectado, es importante encontrar la manera para que un usuario del sistema no note dicho fallo y que pueda seguir utilizando el sistema de manera normal, esto es, ocultar los fallos del sistema y encargarse de que los servicios que se ofrecen al cliente nunca sean interrumpidos. Tolerancia a Fallos: es importante saber cuándo un sistema puede llegar a tener ciertos problemas sin que estos afecten de manera grave al usuario de los servicios proporcionados, para así, ignorar la ocurrencia de dichos fallos cuando la aplicación lo soporte, o bien, hacer saber al cliente que hay un problema en lugar de gastar tiempo y recursos innecesarios para corregirlo cuando probablemente el problema no se pueda arreglar rápido y el cliente termine por abortar el proceso; Pretender arreglar de manera inmediata todos los problemas que puedan surgir en un sistema puede resultar incluso dañino para el mismo sistema, puesto que hay problemas que mientras son arreglados pueden afectar el rendimiento de otros componentes del sistema que sí están trabajando. Recuperación Frente a Fallos: Una vez que fue detectado un fallo y que se ha decidido arreglarlo, hay que encontrar la mejor manera de hacerlo, y además, de recuperar el estado del sistema antes de que ocurriera el fallo; esto requiere del software adecuado para poder reconstruir o bien retractar los cambios que no fueron completados al momento en que fue interrumpido el sistema. Redundancia: un sistema distribuido puede lograr ser tolerante a fallos gracias a la utilización de componentes redundantes dentro del sistema. La redundancia se logra con la replicación de dichos componentes y con la habilidad del sistema de recurrir a los componentes de respaldo en caso de que SISTEMAS DISTRIBUIDOS
el componente de uso primario falle, todo esto por supuesto, sin que el usuario se percate de lo que está sucediendo. La redundancia se puede dar en muchas partes del sistema: componentes internos de los servidores, servidores de aplicaciones, de Web, de archivos, de correo o de bases de datos, sistemas de almacenamiento, conexiones a la red de comunicación, etc. Es muy importante tomar en cuenta que todos los componentes que estén replicados en el sistema 15 deben mantenerse actualizados para evitar problemas de consistencia.
1.2.6 CONCURRENCIA El control de concurrencia trata con los problemas de aislamiento y consistencia del procesamiento de transacciones. El control de concurrencia de un sistema distribuido asegura que la consistencia de los datos que se almacenan y que se procesan en el sistema se mantienen en un ambiente distribuido multiusuario. Si las transacciones son internamente consistentes, la manera más simple de lograr este objetivo es ejecutar cada transacción sola, una después de otra. Sin embargo, esto puede afectar mucho el desempeño de un sistema distribuido dado que el nivel de concurrencia se reduce al mínimo. El nivel de concurrencia, es decir, el número de transacciones simultáneas activas, es probablemente el parámetro más importante en sistemas distribuidos. Por lo tanto, los mecanismos de control de concurrencia buscan encontrar un balance entre el mantenimiento de la consistencia de los datos y el mantenimiento de un alto nivel de concurrencia. Si no se hace un adecuado control de concurrencia, se pueden presentar dos anomalías. o o
Se pueden perder actualizaciones provocando que los efectos de algunas transacciones no se reflejen en los datos almacenados. Pueden presentarse recuperaciones de información inconsistentes.
1.2.7 TRANSPARENCIA Se dice que un sistema distribuido es transparente, cuando este es capaz de presentarse ante los usuarios y las aplicaciones como si fuese un sistema que corre en una sola computadora, y no como un sistema cuyos procesos y recursos están distribuidos físicamente en varias computadoras. SISTEMAS DISTRIBUIDOS
Tipos de Transparencia: Según el Manual de Referencia ANSA y el Modelo de Referencia para el Procesamiento Distribuido Abierto de la Organización Internacional de Estándares (ISO 1995), el concepto de transparencia de puede aplicar a 8 aspectos diferentes de un sistema distribuido: o Transparencia de Acceso: oculta las diferencias entre la representación de 16 o o o o o o o
los datos y la manera en que los recursos son accedidos. Transparencia de Ubicación: oculta la localización de los recursos y permite el acceso a los mismos sin la necesidad de conocer su localización. Transparencia de Migración: oculta que un recurso o un cliente del sistema sea reubicado, lo que permite hacer dichas reubicaciones sin afectar la operación de los usuarios y los servicios. Transparencia de Recolocación: oculta que un recurso o un cliente del sistema pueda moverse a una ubicación diferente mientras están en uso. Transparencia de Replicación: oculta la existencia de múltiples ejemplares del mismo recurso. Transparencia de Concurrencia: oculta que un recurso sea compartido por varios usuarios sin interferir entre ellos mismos. Transparencia Frente a Fallos: oculta el fallo y recuperación de un recurso dentro del sistema, dejando que los usuarios terminen sus tareas a pesar de los fallos de hardware o software que pudieran presentarse. Transparencia de Persistencia: oculta si un recurso (de software) está almacenado en memoria o en disco.
Desde el punto de vista de los usuarios, la transparencia se logra cuando: o o o
Sus pedidos se satisfacen con ejecuciones en paralelo en distintas máquinas. Se utilizan una variedad de servidores de archivos. El usuario no necesita saberlo ni notarlo.
La transparencia desde el punto de vista de los programas significa diseñar la interfaz de llamadas al sistema de modo que no sea visible la existencia de varios procesadores. No es transparente un sistema donde el acceso a los archivos remotos se realice mediante: o o
El establecimiento explícito de una conexión en la red con un servidor remoto. El envío posterior de mensajes, donde el acceso a los servicios remotos será distinto al acceso a los servicios locales.
Grado de Transparencia. SISTEMAS DISTRIBUIDOS
A pesar de que la transparencia es una característica generalmente deseable para cualquier sistema distribuido, hay situaciones en las que el pretender enmascarar todos los aspectos relacionados con la distribución de los componentes del sistema puede no ser lo más óptimo; en algunas ocasiones es mejor hacer del conocimiento del usuario que el sistema está compuesto por varios elementos y que por más óptima que sea la transmisión de mensajes o 17 la distribución y replicación de componentes, habrá cierto tiempo de respuesta mínimo entre cada transacción que es imposible evitar. Hay también una relación directa entre el nivel de transparencia y el rendimiento de un sistema distribuido, por lo que lo ideal es encontrar un bien equilibrio entre ambos factores. La transparencia es uno de los principales objetivos del diseño e implementación de un sistema distribuido, sin embargo, es importante tener en consideración otros factores que pueden ser afectados por la transparencia, principalmente el desempeño general del sistema.
1.3 MODELOS ARQUITECTÓNICOS Los sistemas distribuidos(SD) son los sistemas software más complejos. Con los modelos arquitectónicos tratamos de simplificar estos sistemas viendo la colocación de las partes y las relaciones entre ellas. Incluye también el control global de estructura, los protocolos para comunicación, sincronización, y acceso a datos, la asignación de funcionalidad, distribución física, escalamiento y desempeño, dimensiones de evolución y selección de alternativas de diseño. Los diferentes modelos arquitectónicos son: o o o o
Capas de software. Arquitectura de Sistemas. Interface y Objetos. Arquitectura multiprocesador
Capa de software. La idea básica es desmembrar la complejidad de sistema mediante el diseño en capas y servicios. El término arquitectura de software se refería inicialmente a la estructuración del software como capas en un único computador. Más recientemente las capas son uno o varios procesos, localizados en el mismo o diferente computador, que ofrecen y solicitan servicios
SISTEMAS DISTRIBUIDOS
o o
Capas: grupo de funcionalidades fuertemente y altamente coherentes. Servicios: funcionalidades proporcionales a capas superiores.
La estructura típica en capas de un SD es la siguiente: 18 Plataforma: Hardware y sistema operativo. Estas capas más bajas proporcionan servicios a las superiores y su implementación depende de cada computador. Middleware: Es una capa software que logra transparencia en la heterogeneidad en el nivel de plataforma. Logra comunicación y compartición de recursos. El middleware se ocupa de proporcionar bloques útiles para la construcción de componentes de software que puedan trabajar con otros en un sistema distribuido. En particular mejorar el nivel de las actividades de comunicación en los procesos de aplicación, soportando abstracciones como: llamadas a procedimientos remotos, comunicación entre grupos de procesos, etc. Arquitectura de objetos distribuidos En el modelo cliente-servidor de un sistema distribuido, los clientes y los servidores son diferentes. Los clientes reciben servicios de los servidores y no de otros clientes; los servidores pueden actuar como clientes recibiendo servicios de otros servidores, pero sin solicitar servicios de clientes; los clientes deben conocer los servicios que ofrece cada uno de los servidores y deben conocer como contactar con cada uno de estos servidores Este modelo funciona bien para muchos tipos de aplicaciones. Sin embargo, limita la flexibilidad de los diseñadores del sistema ya que ellos deben decidir donde se proporciona cada servicio. También deben planificar la escalabilidad y proporcionar algún medio para distribuir la carga sobre los servidores cuando más clientes se añadan al sistema. Una aproximación más general al diseño de sistemas distribuidos es eliminar la distinción entre cliente y servidor y diseñar la arquitectura del sistema como una arquitectura de objetos distribuidos. En una arquitectura de objetos distribuidos, los componentes fundamentales del sistema son objetos que SISTEMAS DISTRIBUIDOS
proporcionan una interfaz a un conjunto de servicios que ellos suministran. Otros objetos realizan llamadas a estos servicios sin hacer ninguna distinción lógica entre un cliente (el receptor de un servicio) y un servidor (el proveedor de un servicio).
19
Interface y Objetos o o
Una interface de un proceso es la especificación del conjunto de funciones que se pueden invocar sobre él. En lenguajes orientados a objetos, los procesos distribuidos pueden ser construidos de una forma más orientada al objeto. Las referencias a estos objetos se pasan a otros procesos para que se pueda acceder a sus métodos de forma remota. Esta es la aproximación adoptada por CORBA y JAVA RMI.
Variaciones del modelo cliente-servidor: Clientes Delgados o
En el cliente sólo se ejecuta una interfaz basada en ventajas, mientras que la aplicación si se ejecuta en un servidor remoto, usualmente muy potente.
Arquitectura multiprocesador El modelo más simple de un sistema distribuido es un sistema multiprocesador en el que el software está formado por varios procesos que pueden (aunque no necesariamente) ejecutarse sobre procesadores diferentes. Este modelo es común en sistemas grandes de tiempo real. Estos sistemas recogen información, toman decisiones usando esta información y envían señales a los actuadores que modifican el entorno del sistema. Lógicamente, los procesos relacionados con la recopilación de información, toma de decisión y control de actuadores podrían ejecutarse todos ellos sobre un único procesador bajo el control de un planificador (scheduler). El uso de múltiples procesadores mejora el rendimiento y adaptabilidad del sistema. La distribución de procesos ente los procesadores puede ser predeterminada (esto es común en sistemas críticos) o puede estar bajo el control de un despachado (dispcher) que decide que procesos se asignan a cada procesador. Este es un SISTEMAS DISTRIBUIDOS
módulo simplificado de sistema de control de tráfico. Un conjunto de sensores distribuidos recoge información sobre el flujo de tráfico y la procesan localmente entes de enviarla a una sala de control. Los operadores toman decisiones usando información y dan instrucciones a un proceso de control de diversas luces de tráfico. En este ejemplo, hay varios procesos lógicos para gestionar los sensores, la sala de control y los semáforos. Estos procesos lógicos 20 pueden ser procesos individuales o un grupo de procesos.
Cliente – servidor El modelo cliente-servidor es la arquitectura más citada cuando se discuten los sistemas distribuidos. Es el modelo más importante y sigue siendo el más ampliamente utilizado. La estructura simple de esta arquitectura, en la cual los procesos toman el rol de ser clientes o servidores. En particular, los procesos de cliente interactúan con los procesos de servidor individuales en equipos anfitriones (host) potencialmente separados, con el fin de acceder a los recursos compartidos que administran. El modelo cliente-servidor puede tomar diferentes configuraciones. Por ejemplo, puede existir más de un cliente conectado a un servidor. También se puede tener un grupo de servidores interconectados dedicados a dar servicio a un grupo de clientes.
Proxy SISTEMAS DISTRIBUIDOS
Es un servidor que se emplea como intermediario entre las peticiones de recursos que realiza un cliente a otro servidor. Por ejemplo, si una computadora A solicita un recurso a una computadora C, lo hará mediante una petición a la computadora B que, a su vez, trasladará la petición a la computadora C. De esta manera, la computadora C no sabrá que la petición procedió originalmente de la computadora A.
21 Esta situación estratégica de punto intermedio suele ser aprovechada para soportar una serie de funcionalidades, como: o o o o o o
Proporcionar caché. Control de acceso. Registro del tráfico. Prohibir cierto tipo de tráfico. Mejorar el rendimiento. Mantener el anonimato.
El proxy más conocido es el servidor proxy web, su función principal es interceptar la navegación de los clientes por páginas web por motivos de seguridad, rendimiento, anonimato, entre otros.
Peer-to-peer Los sistemas peer-to-peer (p2p) son sistemas descentralizados en los que los cálculos pueden llevarse a cabo en cualquier nodo de la red y, al menos en principio, no se hacen distinciones entre clientes y servidores. En las aplicaciones peer-to-peer, el sistema en su totalidad se diseña para aprovechar la ventaja de la potencia computacional y disponibilidad de almacenamiento a través de una red de computadoras potencialmente enorme. Los estándares y protocolos que posibilitan las comunicaciones a través de los nodos están embebidos en la propia aplicación, y cada nodo debe ejecutar una copia de dicha aplicación. Hay indicios de que esta tecnología se está utilizando de forma creciente en empresas para que las redes de PCs soporten la potencia de dichas empresas. Intel y Boeing han implementado sistemas p2p para aplicaciones que requieren computaciones intensivas. Para aplicaciones cooperativas que soportan trabajo distribuido, ésta parece ser la tecnología más efectiva. SISTEMAS DISTRIBUIDOS
Se puede ver la arquitectura de las aplicaciones p2p desde dos puntos de vista. La arquitectura lógica de la red es la distribución de la arquitectura del sistema, mientras que la arquitectura de la aplicación es la organización genérica de los componentes en cada tipo de aplicación. En 22 principio, en los sistemas peer-to-peer cada nodo en la red podría conocer cualquier otro nodo, podría conectarse con él, y podría intercambiar datos. En la práctica, por supuesto, esto es imposible, ya que los nodos se organizan dentro de “localidades” con algunos nodos que actúan como puentes a otras localidades de nodos. Beneficios de un sistema peer-to-peer: o o o o o o o
Nodos comparten recursos. Se pueden desplegar algoritmos distribuidos. Escalamiento más fácil del sistema. Ahorro de costos. Flexibilidad. Ningún punto único de falla. Mayor robustez del sistema.
Applets Un applet es un código que se ejecuta en el contexto de otro programa, por ejemplo, en un navegador web. El código se descarga en el navegador y se ejecuta allí.
SISTEMAS DISTRIBUIDOS
a) A solicitud del cliente el servidor web, responde con el código del applet. b) El cliente interactúa con el applet
23
Un applet normalmente lleva a cabo una función muy específica, que carece de uso independiente, y son ampliamente utilizados en aplicaciones de telefonía móvil. Un applet puede dar una buena respuesta interactiva, ya que no sufre de los retrasos o variabilidad de ancho de banda asociado con la comunicación de la red. Sin embargo, un applet típicamente carece de sesión y tiene privilegios restringidos de seguridad. A menudo, un applet consiste en un código poco confiable, por eso se les impide tener acceso al sistema de archivos local. Los applet que se cargan a través de la red con frecuencia son considerados como códigos de poca confianza, a excepción de que lleven la firma digital de una entidad especificada como confiable. Ejemplos de los applets más comunes son: o o o o
Java applets. Animaciones Flash. Windows media player. Modelos 3D.
Clúster En informática, el término clúster (“grupo” o “racimo”) hace referencia a conjuntos o conglomerados de computadoras construidos mediante el uso de hardware común y que se comportan como si fueran una única computadora. El uso de los clústeres varía desde las aplicaciones de supe cómputo, servidores web y comercio electrónico hasta el software de misiones críticas y bases de datos de alto rendimiento. El cómputo con clústeres es el resultado de la convergencia de varias tendencias tecnológicas actuales, entre las que se pueden destacar: o o o o
Microprocesadores de alto rendimiento. Redes de alta velocidad. Software para cómputo distribuido de alto rendimiento. Crecientes necesidades de potencia computacional.
Los servicios esperados de un clúster principalmente son: o
Alto rendimiento. SISTEMAS DISTRIBUIDOS
o o o
Alta disponibilidad. Escalabilidad. Balanceo de carga.
Típicamente respecto a la rapidez y disponibilidad, se espera que un clúster sea más económico que el uso de computadoras individuales. Un clúster puede ser: 24 o o
o
Homogéneo: cuando todas las computadoras tienen la misma configuración en hardware y sistema operativo. Semihomogéneo: cuando las computadoras tienen diferente rendimiento, pero guardan una similitud con respecto a su arquitectura y sistema operativo. Heterogéneo: cuando las computadoras tienen diferente hardware y sistema operativo.
Grid El cómputo grid es un paradigma del cómputo distribuido, frecuentemente usado para indicar una infraestructura de gestión de recursos distribuidos que se centra en el acceso coordinado a los recursos informáticos remotos. Estos recursos de cómputo son colectados desde múltiples localizaciones para alcanzar una meta común. A diferencia del cómputo de cluster (en grupo o racimo), el cómputo grid tiende a ser más heterogéneo y disperso geográficamente. Generalmente las grids son usadas para una variedad de propósitos, pero puede haber grids especializadas para fines específicos. Los recursos que son integrados por una infraestructura grid son típicamente plataformas de cómputo dedicadas a supercomputadoras de alta gama o clústers de propósito general. Definen la computación grid como cualquiera de una variedad de niveles de virtualización a lo largo de un continuo, donde a lo largo de ese continuo se podría decir que una solución particular es una implementación de cómputo grid frente a una relativamente simple aplicación usando recursos virtuales, pero incluso en los niveles más simples de virtualización, siempre se requieren habilitar tecnologías de redes. Beneficios del cómputo grid: SISTEMAS DISTRIBUIDOS
o o o o o o 25 o
Explotación de recursos infrautilizados. Capacidad de CPU paralelos. Recursos virtuales y organizaciones virtuales para la colaboración. Acceso a recursos adicionales. Balanceo de recursos. Fiabilidad. Mejor gestión de infraestructuras de TI más grandes y distribuidos.
1.4 MODELO FUNDAMENTALES Modelo de interacción
Se refiere a la forma en que se produce el “paso de mensajes” entre los procesos restringe los modos de interacción: Retrasos, precisión y tiempo
SISTEMAS DISTRIBUIDOS
Problemas presentados en las prestaciones del canal:
26 o
o o o
Latencia: retardo entre el envío y recepción del mensaje Tiempo de acceso a la red (ej., retardos de transmisión Ethernet). Tiempo para que el primer bit viaje desde la interfaz de la red transmisora hasta la interfaz de red receptora. Tiempo procesado dentro del proceso de envío y recepción. Caudal: número de unidades (ej., paquetes) entregadas por unidad de tiempo. Ancho de banda: cantidad de información (ej., bits) transmitida por unidad de tiempo. Variación de retardo: variación en retardos entre diferentes mensajes del mismo tipo.
En virtud del modelo de comunicación aparecen dos familias de sistemas: o
Sistemas distribuidos síncronos:
o
El tiempo para ejecutar cada paso de un proceso tiene establecidos limites inferiores y superiores. los tiempos de entrega de mensajes tienen límites establecidos. Cada proceso tiene un reloj que deriva rangos en tiempo real con límites establecidos.
Sistemas distribuidos asíncronos: sin lımite
Tiempos de ejecución de procesos Tiempo de entrega de mensajes Tasa de movimiento del reloj
Modelo de fallo Fallo por omisión (del proceso o del canal) o
Fallas por omisión de proceso: caída de proceso
o
Detección con timeouts La caída es del tipo fail-stop si otro proceso puede detectar con certeza que el proceso ha caído
Fallas por omisión de comunicación (canal): el mensaje no ha sido entregado (perdida de mensajes) SISTEMAS DISTRIBUIDOS
Posibles causas:
Error de trasmisión de red Sobrecarga de buffer de recepción de mensajes
Fallas arbitrarias
27 o o
Proceso: omite pasos esperados del proceso o lleva a cabo no deseados Canal de comunicación: ej., sin entrega, corrupción o Duplicidad
Tipos de fallos
Modelo de seguridad Las técnicas de seguridad permiten la comprobación de fallos y la minimización de su posible aparición: Comunicación Fiable o o
Validez de la comunicación: cualquier mensaje enviado () será escuchado. Integridad de la comunicación: Cualquier mensaje recibido () es correcto y respeta la secuencialidad.
Amenazas: o
Duplicación de mensajes, desorden, corrupción del mensaje, revelación, etc.
Amenaza a los Procesos o o o o o
Acceso indebido a los recursos Ataque a la integridad del proceso Suplantación de los principales interlocutores Falsificación de servicios Falsificación de peticiones
Amenaza a los canales o
Acceso indebido al canal SISTEMAS DISTRIBUIDOS
Captura de mensajes Reenvió de mensajes Eliminación de mensajes Modificación de mensajes y de código móvil
o o o o
Amenaza a la disponibilidad del servicio
28 o o
Ataque a la integridad de los servicios Ataque de denegación de servicio
1.5 RECURSOS DE COMUNICACIÓN La comunicación entre procesos es el núcleo de todos los sistemas distribuidos, por tal razón es importante entender la manera en que los procesos localizados en diferentes computadoras pueden intercambiar información. En los sistemas distribuidos tradicionalmente la comunicación está basada en el paso de mensaje. Esta técnica aporta sincronización entre procesos y permite la exclusión mutua, su principal característica es que no requiere memoria compartida, por lo que resulta ser muy importante en la programación de sistemas distribuidos. En este capítulo revisamos diferentes conceptos relacionados con los procesos y la comunicación en los sistemas distribuidos, como hilos, clientes, servidores, la llamada a un procedimiento remoto (RPC), el paradigma cliente-servidor, la comunicación en grupo y la interfaz de sockets. Hilos Los hilos se diferencian de los procesos en que los primeros comparten los mismos recursos del programa que las contiene, en tanto los procesos tienen de manera separada su código, así como sus datos. Se pueden identifi car hilos de dos tipos de flujo: o o
Flujo único: En este caso, un programa utiliza únicamente un hilo para controlar su ejecución. Flujo múltiple: Son aquellos programas que utilizan varios contextos de ejecución para realizar su trabajo.
SISTEMAS DISTRIBUIDOS
En un sistema multihilos, cada tarea se inicia y termina tan pronto como sea posible, esto facilita la entrada de datos en sistemas en tiempo real, especialmente si estos datos provienen de diferentes fuentes. En un programa multihilo se tiene el hilo principal del programa en ejecución, quien a su vez tiene otros hilos o tareas paralelas en ejecución. Un29 hilo se define como una secuencia única de control de flujo dentro de un programa, en un programa puede haber más de una secuencia de control o hilos. Un hilo es una parte del programa que se ejecuta independientemente del resto. El hilo es la unidad de código más pequeña que se pueda ejecutar en un entorno multitareas. El uso de hilos permite al programador escribir programas más eficientes, debido a que los hilos permiten optimizar recursos tan importantes como el mejor desempeño del CPU al minimizar sus tiempos de inactividad. El uso de hilos es muy valioso en entornos interactivos en red, ya que permiten sincronizar la diferencia entre la velocidad de transmisión de la red con las de procesamiento del CPU. La velocidad en el manejo del sistema de archivos para lectura y grabación es más lenta comparada con la velocidad de procesamiento de estos datos por el CPU, en este caso el uso de hilos ayuda mucho. Una de las razones de importancia para el estudio de la programación multihilos es que permite acceder a los recursos de tiempo libre de la CPU mientras se realizan otras tareas.
Cliente En un sistema distribuido, el cliente es el elemento que solicita y usa el servicio que proporciona una funcionalidad específica o dato. El cliente tiene una postura proactiva, esto quiere decir que está trabajando en una tarea específica y cuando necesita cierto dato o una operación específica invoca al servidor para obtenerlo. Generalmente es por medio de la aplicación cliente que un usuario accede y mantiene un diálogo con el sistema. El usuario realiza el diálogo vía una interfaz gráfica de usuario. La operación del cliente consiste en arrancar, realizar su trabajo y terminar.
Servidores El servidor es el elemento que proporciona la funcionalidad o servicio en un sistema distribuido. Este servicio puede consistir en compartir datos, informar sobre una solicitud, compartir recursos físicos, imprimir, etc. Generalmente se considera que un servidor tiene una posición reactiva en el sistema, ya que se encuentra inactivo hasta que recibe una petición de servicio. Cuando recibe la petición, la procesa y envía la respuesta al solicitante, para después quedar nuevamente inactivo en espera de una nueva petición. SISTEMAS DISTRIBUIDOS
1.5.1 PROTOCOLOS TCP/IP 30 Conjunto de reglas que son utilizadas para establecer una comunicación en su forma más simple entre determinados procesos para cumplir una determinada tarea, siendo respetadas para el envío y la recepción de datos a través de una red. Los protocolos pueden ser implementados por hardware, software o la combinación de ambos. Por el contrario, un protocolo no define cómo se programa el software para que sea compatible con el protocolo. Esto se denomina implementación o la conversión de un protocolo a un lenguaje de programación. En Internet, los protocolos utilizados pertenecen a una sucesión de protocolos o a un conjunto de protocolos relacionados entre sí. Este conjunto de protocolos se denomina TCP/IP. HTTP: Protocolo de transferencia de hipertexto es el protocolo más utilizado en Internet. El propósito del protocolo HTTP es permitir la transferencia de archivos (principalmente, en formato HTML) entre un navegador (el cliente) y un servidor web (denominado, entre otros, httpd en equipos UNIX) localizado mediante una cadena de caracteres denominada dirección URL. FTP: Define la manera en que los datos deben ser transferidos a través de una red TCP/IP. El objetivo del protocolo FTP es: o o o
Permitir que equipos remotos puedan compartir archivos. Permitir la independencia entre los sistemas de archivo del equipo del cliente y del equipo del servidor. Permitir una transferencia de datos eficaz.
ARP: Tiene un papel clave entre los protocolos de capa de Internet relacionados con el protocolo TCP/IP, ya que permite que se conozca la dirección física de una tarjeta de interfaz de red correspondiente a una dirección IP. Por eso se llama Protocolo de Resolución de Dirección (en inglés ARP significa Address Resolution Protocol). ICMP: Protocolo de mensajes de control de Internet) es un protocolo que permite administrar información relacionada con errores de los equipos en red. Si se tienen en cuenta los escasos controles que lleva a cabo el protocolo IP, ICMP no permite corregir los errores, sino que los notifica a los protocolos de SISTEMAS DISTRIBUIDOS
capas cercanas. Por lo tanto, el protocolo ICMP es usado por todos los routers para indicar un error (llamado un problema de entrega). UDP: (Protocolo de datagrama de usuario) es un protocolo no orientado a conexión de la capa de transporte del modelo TCP/IP. Este protocolo es muy simple ya que no proporciona detección de errores (no es un protocolo 31 orientado a conexión). SMTP: Protocolo simple de transferencia de correo, es el protocolo estándar que permite la transferencia de correo de un servidor a otro mediante una conexión punto a punto. Éste es un protocolo que funciona en línea, encapsulado en una trama TCP/IP. TCP/IP: Influenciado por el modelo OSI, también utiliza el enfoque modular (utiliza módulos o capas), pero sólo contiene cuatro: o o o o
Capa de acceso a la red: Especifica la forma en la que los datos deben enrutarse, sea cual sea el tipo de red utilizado. Capa de Internet: Es responsable de proporcionar el paquete de datos (datagrama). Capa de transporte: Brinda los datos de enrutamiento, junto con los mecanismos que permiten conocer el estado de la transmisión. Capa de aplicación: Incorpora aplicaciones de red estándar (Telnet, SMTP, FTP, etc.).
1.5.2 SERVICIOS Y PUERTOS Diversos programas TCP/IP pueden ejecutarse simultáneamente en Internet (por ejemplo, pueden abrirse diferentes navegadores de manera simultánea o navegar por páginas HTML mientras se descarga un archivo de un FTP). Cada uno de estos programas funciona con un protocolo. A veces el equipo debe poder distinguir las diferentes fuentes de datos. Cada una de estas aplicaciones puede serle asignada una dirección única en equipo, codificada en 16 bits. La combinación de direcciones IP +puerto es n socket. La dirección IP sirve para identificar de manera única un equipo en la red mientras que el número de puerto especifica la aplicación a la que se dirigen los datos. Cuando el equipo recibe información que va dirigida a un puerto, los datos se envían a la aplicación relacionada. Si se trata de una solicitud enviada a la aplicación, la aplicación se denomina aplicación servidor. Si se trata de una respuesta, entonces hablamos de una aplicación cliente. o
Los puertos del 0 al 1023 son los "puertos conocidos" o reservados. Son reservados para procesos del sistema (demonio) o programas ejecutados SISTEMAS DISTRIBUIDOS
o o
por usuarios privilegiados. Sin embargo, un administrador de red puede conectar servicios con puertos de su elección. Los puertos del 1024 al 49151 son los "puertos registrados". Los puertos del 49152 al 65535 son los "puertos dinámicos y/o privados".
32
1.5.3 PROCESOS Y DEMONIOS Un demonio o servicio es un programa que se ejecuta en segundo plano, fuera del control interactivo de los usuarios del sistema ya que carecen de interfaz con estos. El sistema generalmente inicia los demonios durante el arranque, siendo las funciones más comunes de estos las de ofrecer servicios a otros programas, ya sea respondiendo a las peticiones que llegan a través de la red o atendiendo a procesos que se ejecutan en el mismo sistema, así como responder ante cierta actividad del hardware.
SISTEMAS DISTRIBUIDOS
33
CAPÍTULO 2
SISTEMAS DISTRIBUIDOS
34
2.1 INTRODUCCIÓN A LOS SISTEMAS DE MULTIPROCESAMIENTO Un sistema de multiprocesamiento consiste en una computadora que tiene más de un procesador (o bien en una serie de computadoras con CPU’s o procesadores independientes). La mayoría de computadoras supervisoras se diseñan específicamente para dar soporte a múltiples procesadores. Incluyen un bus de altas prestaciones, decenas de MB para memoria con corrección de errores, sistemas de disco redundantes, arquitecturas avanzadas de sistemas que reducen los cuellos de botella utilidades redundantes, como múltiples fuentes de alimentación.
2.2 CLASIFICACIÓN DE LOS SISTEMAS DE MULTIPROCESAMIENTO
Existen varias clasificaciones de las arquitecturas informáticas paralelas. Flynn (1966) introdujo un esquema para clasificar la arquitectura de un computador basándose en cómo la máquina relaciona sus instrucciones (SI, single instrucción) o un flujo de múltiples instrucciones (MI). Esto da lugar a la clasificación siguiente: o o
o o
SISD: Flujo de una sola instrucción, flujo de un solo dato. Esta categoría incluye a los computadores serie convencionales. SIMD. Flujo de una sola instrucción, flujo de múltiples datos. Estos son típicamente los procesadores vectoriales y los computadores en array en los cuales una sola instrucción puede operar sobre diferentes datos en diferentes unidades de ejecución. MISD. Flujo de múltiples instrucciones, flujo de un solo datos. Esta es una organización raras veces utilizada en la cual múltiples instrucciones operan sobre un único flojo de datos en paralelo. MIMD. Flujo de múltiples instrucciones, flujo de múltiples datos. La ejecución simultanea de múltiples instrucciones que operan sobre varios flujos de datos. Esta clase incluye los multiprocesadores de diferentes tipos.
SISTEMAS DISTRIBUIDOS
35
2.2.1 FUERTEMENTE ACOPLADOS Se comunica a través de una memoria principal compartida, por lo que la velocidad a la que se pueden comunicar datos de un procesador a otro es del mismo orden que el ancho de banda de la memoria. Los sistemas individuales hospedan múltiples CPU’s que comparten una memoria principal común (normalmente sobre un bus de memoria de alta velocidad). En los sistemas individuales existe sólo una copia del sistema operativo y la comunicación entre CPU’s es muy rápida. Multiprocesamiento asimétrico (también conocido como procesamiento maestro - esclavo), el Kernel del sistema operativo corre en un CPU y no puede ser dividido entre procesadores. El CPU "maestro" ejecuta operaciones y asigna tareas a otros procesadores "esclavos". A pesar de las grandes mejoras acaecidas en mono-procesadores para algunas aplicaciones no es suficiente. La solución pueden ser los sistemas multiprocesadores: Solución más sencilla, natural y con mejor coste-prestaciones. Las mejoras en microprocesadores cada vez son más complejas: cada avance implica crecer en complejidad, potencia y superficie, lenta pero clara mejora en el software, que permite explotar el paralelismo. Las arquitecturas actuales son muy diversas: hay más investigación que resultados definitivos. SISTEMAS DISTRIBUIDOS
2.2.2 DÉBILMENTE ACOPLADOS Cada procesador tiene un conjunto de dispositivos de entrada- salida y una 36 gran memoria local a donde acceden la mayor parte de las instalaciones y datos. Los procesos que se ejecutan en diferentes procesadores se comunican mediante intercambio de mensajes a través de un sistema de transferencia de mensajes. Consisten en múltiples sistemas, cada uno con su propia memoria privada y su propia copia de sistema operativo, conectados por un enlace de comunicación. Con multiprocesamiento débilmente acoplado cada sistema tiene su propio CPU y memoria dedicada. Cada sistema accede a recursos como el disco, vía el Bus E/S. Desventajas: Tienden a ser más costosos, Hay una considerable carga de software requerida para sincronizar los datos., El enlace de comunicación es relativamente lento.
2.3 SISTEMAS CLUSTER El término clúster (del inglés cluster, "grupo" o "racimo") se aplica a los conjuntos o conglomerados de computadoras construidos mediante la utilización de hardware comunes y que se comportan como si fuesen una única computadora. Hoy en día desempeñan un papel importante en la solución de problemas de las ciencias, las ingenierías y del comercio moderno. La tecnología de clústeres ha evolucionado en apoyo de actividades que van desde aplicaciones de súper cómputo y software de misiones críticas, servidores web y comercio electrónico, hasta bases de datos de alto rendimiento, entre otros usos. El cómputo con clústeres surge como resultado de la convergencia de varias tendencias actuales que incluyen la disponibilidad de microprocesadores económicos de alto rendimiento y redes de alta velocidad, el desarrollo de herramientas de software para cómputo distribuido de alto rendimiento, así SISTEMAS DISTRIBUIDOS
como la creciente necesidad de potencia computacional para aplicaciones que la requieran. Simplemente, un clúster es un grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es visto como un único ordenador, más potente que los comunes de escritorio.
37
Los clústeres son usualmente empleados para mejorar el rendimiento y/o la disponibilidad por encima de la que es provista por un solo computador típicamente siendo más económico que computadores individuales de rapidez y disponibilidad comparables. De un clúster se espera que presente combinaciones de los siguientes servicios: o o o o
Alto rendimiento Alta disponibilidad Balanceo de carga Escalabilidad
La construcción de los ordenadores del clúster es más fácil y económica debido a su flexibilidad: pueden tener toda la misma configuración de hardware y sistema operativo (clúster homogéneo), diferente rendimiento, pero con arquitecturas y sistemas operativos similares (clúster semi homogéneo), o tener diferente hardware y sistema operativo (clúster heterogéneo), lo que hace más fácil y económica su construcción. Para que un clúster funcione como tal, no basta solo con conectar entre sí los ordenadores, sino que es necesario proveer un sistema de manejo del clúster, el cual se encargue de interactuar con el usuario y los procesos que corren en él para optimizar el funcionamiento. Clusters en aplicaciones científicas o o o o o
Se suelen caracterizar por ser aplicaciones computacionalmente intensivas. Sus necesidades de recursos son muy importantes en almacenamiento y especialmente memoria. Requieren nodos y sistemas dedicados, en entornos HPC y HTC. Suelen estar controlados los recursos por planificadores tipo Maui y gestores de recursos tipo PBS. Son en muchas ocasiones códigos legacy, difíciles de mantener, ya que los dominios de aplicación suelen ser difícilmente paralelos.
Clusters en aplicaciones empresariales
SISTEMAS DISTRIBUIDOS
Suelen ser aplicaciones no especialmente intensivas computacionalmente, pero que demandan alta disponibilidad y respuesta inmediata, con lo que los servicios se están ejecutando continuamente y no controlados por un sistema de colas Es usual que un sistema provea varios servicios. Una primera aproximación para 38realizar una distribución del trabajo es separar los servicios: Un servidor web con la BD en un nodo, el contenedor EJB en otro y el servidor de páginas web en otro constituye un claro ejemplo de distribución en el ámbito empresarial. Otra aproximación es instalar una aplicación web en un clúster squid como proxy-caché, apache/tomcat como servidor: web/de aplicaciones web, memcached como caché de consultas a la base de datos y mysql como base de datos. Estos: servicios pueden estar replicados en varios nodos del clúster. Ejemplos: flickr, wikipedia y google.
2.3.1 MULTIPROCESAMIENTO DEDICADO Diferentes microprocesadores gobiernan las distintas tareas y recursos del sistema. El enfoque principal que adoptan es el incremento de rendimiento del sistema para múltiples usuarios de red en múltiples segmentos de red de área local. Los sistemas supervisores dan soporte a múltiples tarjetas de red, lo que incrementa el número de posibles segmentos. El bus de alta velocidad del servidor proporciona transferencia rápida de información entre los segmentos de red. Cada CPU se dedica a una función específica tal como entrada / salida de la tarjeta de interfaz de red u operaciones con los archivos.
2.3.2 MULTIPROCESAMIENTO COMPARTIDO Los microprocesadores del sistema comparten los recursos del sistema, como la entrada salida de memoria y disco. Se distribuye uniformemente la carga de SISTEMAS DISTRIBUIDOS
trabajo a los procesadores disponibles, de modo que uno no esté inactivo mientras otro tiene un exceso de trabajo con una tarea específica. Las prestaciones se incrementan para todas las tareas al añadir microprocesadores, su desventaja es que los sistemas operativos que soportan este tipo de multiprocesamiento son más difíciles de diseñar.
39
2.4 PROTOCOLOS DE COMUNICACIÓN La comunicación entre procesos es un factor clave para construir sistemas distribuidos, los paradigmas de comunicación más usados en sistemas distribuidos son: o o o
Cliente - servidor. Llamada a un procedimiento remoto (RPC). Comunicación en grupo.
Los conceptos fundamentales que deben ser considerados para la comunicación son: o o o o o o o
Los datos tienen que ser aplanados antes de ser enviados. Los datos tienen que ser representados de la misma manera en la fuente y destino. Los datos tienen que empaquetarse para ser enviados. Usar operaciones de send para enviar y receive para recibir. Especificar la comunicación, ya sea en modo bloqueante o no bloqueante. Abstracción del mecanismo de paso de mensaje. La confiabilidad de la comunicación. Por ejemplo, usar TCP en lugar de UDP.
2.5 PASO DE MENSAJES Una de las funciones del stub del cliente es coger los parámetros de entrada, ponerlos en un mensaje y enviárselos al stub del servidor. Sin embargo, se presentan algunos problemas para hacer esto. Debe tenerse en cuenta que los datos en los programas suelen estar representados mediante estructuras de datos, mientras que en un mensaje la información debe ser una secuencia de bytes; por lo tanto, se debe establecer un mecanismo para “aplanar” o serializar los parámetros y pasarlos al mensaje. “Aplanar” significa tomar cualquier estructura de datos y reordenarla como una secuencia de bytes. Esto debe hacerse también con las estructuras de datos dinámicas (listas enlazadas), que deben pasarse a una serie de valores formando una secuencia de bytes. SISTEMAS DISTRIBUIDOS
Aunque el “aplanamiento” (marshalling, en inglés) de los parámetros podría ser una tarea fácil, no lo es. Por desgracia, los lenguajes utilizados para programar los distintos procesos de la red y los procesadores en los que se ejecutan, utilizan diferentes representaciones de los datos que manipulan (distinto tamaño y representación para los enteros –complemento a uno o complemento a dos–, 40 distintas fronteras de alineamiento, distintos códigos de caracteres – ASCII o EBCDIC–, ...). Esto quiere decir que, si un dato lo aplanamos en un proceso, lo ponemos en un mensaje y se lo enviamos a otro proceso de la red (en una máquina distinta), es muy posible que el formato en el que se reciben los datos no sea el que espera el receptor, por lo que el contenido del mensaje podría no entenderse o ser malinterpretado. Un motivo de la interpretación errónea de datos por distintas arquitecturas es el debido a la representación de los números en la memoria. Las tiras de caracteres están compuestas por caracteres sucesivos, tal que cada uno de ellos ocupa un byte, y el carácter siguiente va a continuación en el siguiente byte de memoria. Pero para los números, por ejemplo: los enteros, que suelen ocupar 32 bits (4 bytes), hay dos formas de ordenar los cuatro bytes: o o
Little-endian: El byte menos significativo del entero está en la dirección más baja. (Intel) Big-endian: El byte menos significativo está en la dirección más alta. (Motorola, SPARC).
Para evitar este problema del formato de representación de los datos, los procesos comunicantes deben ponerse previamente de acuerdo en el formato en el que se van intercambiar los datos. Hay tres alternativas en el tipo de acuerdo a tomar: o
o
o
Antes de la transmisión, los datos se convierten a un formato genérico conocido por todos los procesos (representación externa de datos). En el receptor se convierten al formato local de su arquitectura. Algunos estándares de representación externa de datos son: XDR de Sun, Courier de Xerox y ASN 1. Para la comunicación entre dos ordenadores con arquitectura común, el paso anterior puede omitirse. Esto requiere que antes de la transmisión de los parámetros (al establecer la sesión de comunicación), los dos extremos negocien si se requiere pasar los datos a un formato genérico o no. Otra posibilidad consiste en transmitir los datos en su formato nativo (el de la arquitectura del transmisor) junto con un identificador del tipo de arquitectura subyacente. El receptor, consultando el tipo de arquitectura utilizado, decide si es necesario convertir los datos recibidos o no.
2.6 OBJETOS REMOTOS SISTEMAS DISTRIBUIDOS
RMI es una tecnología desarrollada por Sun para permitir la colaboración de objetos que están localizados remotamente. Esta tecnología se enmarca en la idea de permitir colaboración entre Objetos Remotos. La idea no es que los objetos 41 se comuniquen a través de la programación del usuario de protocolos estándares de red. La idea es tener un objeto cliente, donde podamos podamos completar un requerimiento de datos. El cliente luego prepara el requerimiento que envía a un objeto ubicado en un servidor. El objeto remoto prepara la información requerida (accediendo a bases de datos, otros objetos, etc). Finalmente, el objeto remoto envía la respuesta al cliente. En lo posible esta interacción debería ser lo más semejante posible a requerimientos hechos localmente. En principio se puede anhelar la colaboración de objetos escritos en cualquier lenguaje (no es el caso de RMI). Esta idea no es simple de lograr, corresponde al esfuerzo del grupo OMG (Object Management Group, www.omg.org) los cuales propusieron CORBA (Common Object Request Broker Architecture), el cual define un mecanismo común para descubrir servicios e intercambiar datos. CORBA usa Object Request Broker (ORB) como traductores universales para la comunicación entre objetos. Los objetos remotos hablan a través de estos ORB. El protocolo de comunicación entre objetos y ORB es llamado Internet Inter-ORB Protocol o IIOP. La opción propuesta por Microsoft para comunicar objetos remotos es COM (Component Object Model). Hoy este modelo parece haber sido superado por la tecnología .NET. Cuando el cliente y servidor son escritos en Java, la generalidad y complejidad de CORBA no es requerida. En este caso Sun desarrolló RMI, un mecanismo más simple especialmente pensado para comunicación entre aplicaciones Java. Invocación Remota de Objetos (RMI) La idea suena simple, si tenemos acceso a objetos en otras máquinas, podemos llamar a métodos de ese objeto remoto. RMI maneja los detalles de enviar los parámetros, el objeto remoto debe ser activado para ejecutar el método y los valores deben ser retornados de regreso al llamador.
SISTEMAS DISTRIBUIDOS
42
Terminología: o
Objeto cliente: objeto cuyo método hace el llamado remoto.
o
Objeto servidor: Objeto remoto llamado
Notar que los roles de cliente y servidor aplican sólo a un llamado. Un objeto servidor luego puede ser cliente al hacer un llamado remoto. o o
o
Marshalling: es el proceso de codificación de los parámetros. Stub: es un objeto que encapsula el método que deseamos invocar remotamente. Así el llamado remoto es semejante a un llamado local. Éste prepara información con la identificación el objeto remoto a invocar, el método a invocar y codificación de los parámetros (Marshalling). Skeleton: es el objeto del lado del servidor que decodifica los parámetros, ubica el objeto llamado, llama el método deseado, codifica el valor retornado, y envía la información de regreso al stub.
RMI posee un mecanismo para cargar clases dinámicamente desde otro lugar.
SISTEMAS DISTRIBUIDOS
2.7 PROCEDIMIENTOS REMOTOS La comunicación entre cliente y servidor está basada en el protocolo peticiónrespuesta. Es decir, el cliente invoca la petición del servicio enviando un 43 mensaje al servidor; el servidor realiza el servicio requerido y le devuelve la respuesta al cliente en otro mensaje. El cliente siempre debe esperar el mensaje de respuesta del servidor antes de continuar su ejecución, incluso aunque no espere ningún resultado (pues podría haber habido algún error). Estas operaciones se realizan mediante las conocidas primitivas de envío y recepción de mensajes. Por lo que podemos apreciar hasta ahora, para realizar un servicio local, normalmente se utilizan las tradicionales llamadas a procedimientos, mientras que, si el servicio requerido es remoto, hay que acudir a las primitivas disponibles de envío y recepción de mensajes. Se nos presentan varios problemas: o o o
El cliente debe saber si el servicio que necesita es local o remoto antes de solicitarlo. En caso de que el servicio se realice de forma remota, el cliente debe conocer la dirección del servidor. El cliente debe saber la disposición exacta de los parámetros en el mensaje que debe enviar al servidor, así como el formato del mensaje de respuesta.
Parece que este tipo de servicio adolece de la principal propiedad de los sistemas distribuidos: la transparencia. Esto hace pensar que sería bueno aislar o esconder el mecanismo de comunicación de los procesos de su implementación. Con esto se conseguiría: o o o
El programador podría concentrarse en escribir programas que solicitan servicios, independientemente de si la ejecución va a tener lugar en un entorno centralizado o distribuido. Ni el programador ni el cliente necesitan conocer la dirección de la máquina en la que reside el servidor en el momento de la petición. Tampoco necesita el cliente conocer el tipo de máquina o sistema operativo del servidor para ubicar convenientemente los parámetros en el mensaje.
Para conseguir esto, el cliente solamente debe realizar llamadas a procedimientos, de tal forma que, dependiendo de cada caso, la ejecución del servicio solicitado tendrá lugar en la propia máquina o en una remota. El mecanismo mediante el cual la ejecución de un procedimiento tiene lugar en SISTEMAS DISTRIBUIDOS
una máquina remota se denomina Llamada a Procedimiento Remoto o RPC (Remote Procedure Call).
44
CAPÍTULO 3
SISTEMAS DISTRIBUIDOS
45
3.1 ALMACENAMIENTO DE ALTA DISPONIBILIDAD Un clúster de alta disponibilidad es un conjunto de dos o más máquinas que se caracterizan por mantener una serie de servicios compartidos y por estar constantemente monitorizándose entre sí. Podemos dividirlo en dos clases: o
o
Alta disponibilidad de infraestructura: Si se produce un fallo de hardware en alguna de las máquinas del cluster, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios en cualquiera de las otras máquinas del cluster (failover). Y cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la máquina original (failback). Esta capacidad de recuperación automática de servicios nos garantiza la alta disponibilidad de los servicios ofrecidos por el cluster, minimizando así la percepción del fallo por parte de los usuarios. Alta disponibilidad de aplicación: Si se produce un fallo del hardware o de las aplicaciones de alguna de las máquinas del cluster, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios que han fallado en cualquiera de las otras máquinas del cluster. Y cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la máquina original. Esta capacidad de recuperación automática de servicios nos garantiza la integridad de la información, ya que no hay pérdida de datos, y además evita molestias a los usuarios, que no tienen por qué notar que se ha producido un problema.
No hay que confundir un cluster de alta disponibilidad con un cluster de alto rendimiento. El segundo es una configuración de equipos diseñado para proporcionar capacidades de cálculo mucho mayores que la que proporcionan los equipos individuales (véanse por ejemplo los sistemas de tipo Cluster Beowulf), mientras que el primer tipo de cluster está diseñado para garantizar el funcionamiento ininterrumpido de ciertas aplicaciones. Cálculo de la Disponibilidad En un sistema real, si falla uno de los componentes, es reparado o sustituido por un nuevo componente. Si este nuevo componente falla, es sustituido por otro, y así sucesivamente. El componente fijo se considera en el mismo estado SISTEMAS DISTRIBUIDOS
que un nuevo componente. Durante su vida útil, uno de los componentes puede ser considerado en uno de estos estados: Funcionando o en Reparación. El estado funcionando indica que el componente está operacional y el en reparación significa que ha fallado y todavía no ha sido sustituido por un nuevo componente. En 46 caso de defectos, el sistema va de funcionando en modo reparación, y cuando se hace la sustitución volverá al estado funcionando. Por lo tanto, podemos decir que el sistema tiene durante su vida, una media de tiempo para presentar fallas (MTTF) y un tiempo medio de reparación (MTTR). Su tiempo de la vida es una sucesión de MTTFs y MTTRs, a medida que este va fallando y siendo reparado. El tiempo de vida útil del sistema es la suma de MTTFs en ciclos MTTF + MTTR ya vividos.
En forma simplificada, se dice que la disponibilidad de un sistema es la relación entre la duración de la vida útil de este sistema y de su tiempo total de vida. Esto puede ser representado por la fórmula: o
Disponibilidad = MTTF / (MTTF + MTTR)
En la evaluación de una solución de Alta Disponibilidad, es importante tener en cuenta si en la medición de MTTF son vistos como fallas las posibles paradas planificadas.
3.2 SERVICIOS LOCALES DE ALTA DISPONIBILIDAD La alta disponibilidad de las transacciones de servicios web, las transacciones de servicios web se distribuyen entre aplicaciones en distintos servidores o clústeres o en sistemas que no son sistemas WebSphere Application Server, debe en cuenta la afinidad de direccionamiento de las transacciones de las solicitudes de servicios web, así como el impacto en la alta disponibilidad del servicio de transacciones en WebSphere Application Server. Si un cliente remoto envía una serie de solicitudes transaccionales a un servicio de destino que se despliega en un clúster, generalmente preferirá que la primera solicitud establezca una afinidad transaccional de la aplicación cliente con el servidor de destino, de forma que las solicitudes posteriores de la misma transacción se entreguen al mismo servidor de destino. Cuando se completa la transacción, también se envían mensajes del protocolo de transacciones a este mismo servidor de destino, hasta que se produzca una migración tras error de alta disponibilidad de transacción. SISTEMAS DISTRIBUIDOS
Servidores El servidor es el elemento que proporciona la funcionalidad o servicio en un sistema distribuido. Este servicio puede consistir en compartir datos, informar sobre una solicitud, compartir recursos físicos, imprimir, etc. Generalmente se considera que un servidor tiene una posición reactiva en el sistema, ya que se 47 encuentra inactivo hasta que recibe una petición de servicio. Cuando recibe la petición, la procesa y envía la respuesta al solicitante, para después quedar nuevamente inactivo en espera de una nueva petición. En un sistema, el modo de ejecución de un servidor es continuo, ya que se inicializa al arrancar el sistema y está en operación hasta que el sistema se apaga. Un servidor tiene dos modos de arranque: o o
Estático. Dinámico.
Un arranque estático sucede cuando el servidor se arranca como parte del arranque general del sistema donde se encuentra localizado. En contraste, un arranque dinámico sucede cuando un servidor es activado por un proceso del cliente que solicite sus servicios. Los servidores forman parte importante del middleware básico de un sistema distribuido. Entre las características fundamentales de los servidores destaca que pueden ser reusables y relocalizarse. Los servidores pueden ser usados en diferentes tareas, entre las que se pueden destacar las siguientes: o o o o o o o o o o
Servidores Servidores Servidores Servidores Servidores Servidores Servidores Servidores Servidores Servidores
de datos. de archivos. de impresión. de correo. de programas. de bases de datos. de fecha y hora. de multimedia. de transacciones. web.
La comunicación entre procesos es un factor clave para construir sistemas distribuidos, los paradigmas de comunicación más usados en sistemas distribuidos son: o o o
Cliente - servidor. Llamada a un procedimiento remoto (RPC). Comunicación en grupo.
Los conceptos fundamentales que deben ser considerados para la comunicación son: SISTEMAS DISTRIBUIDOS
Los datos tienen que ser aplanados antes de ser enviados. Los datos tienen que ser representados de la misma manera en la fuente y destino. o Los datos tienen que empaquetarse para ser enviados. o Usar operaciones de send para enviar y receive para recibir. o Especificar la comunicación, ya sea en modo bloqueante o no bloqueante. o Abstracción del mecanismo de paso de mensaje. 48 o La confiabilidad de la comunicación. Por ejemplo, usar TCP en lugar de UDP. o o
3.2.1 ARREGLOS DE DISCOS Los arreglos redundantes de discos económicos originales son 5, desde el RAID 1 hasta el RAID 5, y de manera similar comúnmente se hace referencia a un arreglo de discos sin redundancia como RAID 0, aunque dado que no tiene redundancia quizá el nombre más apropiado sería AID. Con el tiempo y la creación de circuitos más veloces nacieron nuevos esquemas y arquitecturas que superan a los niveles originales en diversas características.
RAID 0: Arreglo estriado (o en franjas) de discos sin tolerancia a fallas.
RAID nivel 0 requiere al menos dos platinas de disco para poder ser implementado. Funcionamiento RAID 0 implementa un arreglo de discos en franjas en donde los datos son divididos en bloques y cada bloque es almacenado en un disco distinto. Ventajas En esta configuración un arreglo de discos mejora el desempeño de entrada/salida al distribuir la carga de escritura y lectura a través de varios
SISTEMAS DISTRIBUIDOS
canales y platinas de disco. El mejor desempeño es alcanzado cuando los datos son distribuidos en varios controladores con sólo un disco por controlador. o
No hay sobrecarga por el cálculo de paridad
o
Diseño simple
o
Sencillez de implementación.
49
Desventajas o
No es un RAID debido a que no es redundante ni tolerante a fallas
o
La falla de una platina resulta en la pérdida de los datos de todo el arreglo.
Recomendaciones o
Nunca se debe de utilizar en ambientes de misión crítica.
o
Es muy útil en producción y edición de vídeo e imágenes, así como aplicaciones de pre impresión.
o
En general para aplicaciones que requieran de un alto ancho de banda.
RAID 1: Espejo y duplicación
RAID nivel 1 requiere al menos dos platinas de disco para poder ser implementado. Para mejor desempeño, el controlador debe de ser capaz de realizar dos lecturas concurrentes independientes por par espejo o dos escrituras duplicadas por par de discos en espejo. Funcionamiento RAID 1 implementa un arreglo de discos en espejo en donde los datos son leídos y escritos de manera simultánea en dos discos distintos.
SISTEMAS DISTRIBUIDOS
Ventajas En esta configuración un arreglo de discos puede realizar una escritura o dos lecturas por par en espejo, duplicando la tasa de transaccional de lectura de discos simples con la misma tasa transaccional de escritura que los discos tradicionales. Una redundancia total de datos significa que no es necesaria la reconstrucción en caso de falla de algún disco, sino sólo una copia. 50 o
La tasa de transferencia por bloques es la misma que en los discos tradicionales.
o
Bajo ciertas circunstancias RAID 1 puede soportar fallas simultáneas múltiples de discos.
o
Es el diseño RAID más simple.
o
Sencillez de implementación.
Desventajas o
Es el que tiene mayor derroche de disco de todos los tipos de RAID, con el 100% de derroche.
o
Típicamente la función RAID es llevada a cabo por el software del sistema cargando a la UCP o al servidor, degradando el desempeño del mismo.
o
Probablemente no soporte cambio en caliente de un disco dañado cuando se implementa por software.
Recomendaciones o
Buscar una implementación por hardware.
o
Funciones administrativas y financieras.
o
En general para aplicaciones que requieran de una alta disponibilidad.
SISTEMAS DISTRIBUIDOS
RAID 2: Código de Corrección de Errores con código de Hamming
51
RAID nivel 2 requiere al menos dos platinas de disco para poder ser implementado. Para mejor desempeño, el controlador debe de ser capaz de realizar dos lecturas concurrentes independientes por par espejo o dos escrituras duplicadas por par de discos en espejo. Funcionamiento Cada bit de cada palabra es escrito a un disco, 4 en el ejemplo gráfico. Cada palabra tiene su Código Hamming de Corrección de Errores (CHCE) almacenada en los discos CHCE. Durante la lectura el CHCE verifica y corrige los datos o errores específicos en los discos. Ventajas En esta configuración un arreglo de discos puede realizar una escritura o dos lecturas por par en espejo, duplicando la tasa de transaccional de lectura de discos simples con la misma tasa transaccional de escritura que los discos tradicionales. Una redundancia total de datos significa que no es necesaria la reconstrucción en caso de falla de algún disco, sino sólo una copia. o
Capacidad de corrección de errores al paso.
o
Es posible alcanzar tasas de transferencia muy altas.
o
A mayor tasa de transferencia requerida, es mejor la relación de los discos de datos a los discos CHCE.
o
El diseño del controlador es relativamente simple comparado con los niveles 3,4 y 5.
Desventajas o
Puede tener una alta relación de los discos CHCE a los discos de datos con tamaños de palabra pequeños, tornando el sistema ineficiente.
o
Costo de nivel de entrada muy alto, requiere de una muy alta tasa de transferencia para justificarlo. SISTEMAS DISTRIBUIDOS
o
No existen implementaciones comerciales ya que comercialmente no es viable.
RAID 3: Transferencia en paralelo con paridad
52
RAID nivel 3 requiere cuando menos 3 discos para funcionar. Funcionamiento El bloque de datos es subdividido en bandas y escrito en los discos de datos. Las bandas de paridad son generadas durante la escritura, almacenadas en los discos de paridad y verificado durante la lectura Ventajas o
Muy alta tasa de transferencia de lectura.
o
Muy alta tasa de transferencia de escritura.
o
La falla de un disco tiene impacto poco relevante para la capacidad de transferencia.
o
Baja relación de discos de paridad contra los de datos, lo que aumenta la eficiencia.
Desventajas o
En el mejor de los casos la tasa de transacciones es la misma que en configuraciones de un solo disco.
o
Diseño de controlador relativamente simple.
o
Muy complejo y demandante de recursos para implementarse por software.
Recomendaciones o
Producción de video y transmisiones digitales en línea. SISTEMAS DISTRIBUIDOS
o
Edición de imágenes.
o
Edición de vídeo.
o
Aplicaciones de pre edición.
53 o Cualquier tipo de aplicación que requiera alta densidad de transferencia de datos.
RAID 4: Discos independientes de dato con disco compartido de paridad
RAID nivel 4 requiere cuando menos 3 discos para funcionar. Funcionamiento Cada bloque completo es escrito en un disco de datos. La paridad para bloques del mismo rango es generada durante las escrituras y almacenado en el disco de paridad, y verificado durante las lecturas. Ventajas o
Muy alta tasa transaccional de lectura.
o
Baja relación de discos de paridad contra los de datos, lo que aumenta la eficiencia.
o
Alta tasa de transferencia agregada para lectura.
Desventajas o
Tiene la peor tasa transaccional de escritura, así como para escritura agregada.
o
Diseño muy complejo de controlador.
SISTEMAS DISTRIBUIDOS
o
Reconstrucción de datos compleja e ineficiente en caso de falla de disco.
o
Tasa de transferencia en lectura por bloques igual a la de un disco simple.
RAID 5: Discos independientes de datos con bloques distribuidos de paridad. 54
RAID nivel 5 requiere cuando menos 3 discos para funcionar. Funcionamiento Cada bloque de datos completo es escrito en un disco de datos; la paridad para los bloques en el mismo rango es generada durante las escrituras, almacenada en locaciones distribuidas y verificada durante las lecturas. Ventajas o
Tiene la más alta tasa de transacciones de lectura.
o
Regular tasa de transacciones de escritura.
o
Baja relación entre los discos de paridad contra los discos de datos ofreciendo una alta eficiencia.
o
Buena tasa de transferencia de agregado.
o
Es el nivel de RAID más versátil.
Desventajas o
La falla de un disco tiene impacto sensible en el desempeño.
o
El diseño del controlador es el más complejo.
o
La reconstrucción de datos en caso de falla de un disco es compleja, comparada con RAID 1.
o
Tasa de transferencia en bloques individuales de datos igual que la de un disco sencillo. SISTEMAS DISTRIBUIDOS
Recomendaciones o
Servidores de aplicaciones y archivos.
o
Servidores de bases de datos.
o Servidores Web, correo electrónico y noticias. 55 o
Servidores de Intranet.
3.2.2 MANEJO DE TRANSACCIONES En general, en los sistemas distribuidos se realizan dos acciones que se pue den considerar como contrastantes. La primera acción consiste en que los clientes no deben intervenir en las acciones que realiza otro cliente, mientras que la segunda acción consiste en que el servidor debe ser usado por los clientes para compartir e intercambiar información entre ellos. Para el manejo de este tipo de situaciones en los datos compartidos existe una herramienta conceptual muy útil conocida como “transacción”, la cual es una unidad indivisible de manipulación de información. Las transacciones en los sistemas distribuidos reciben el nombre de transacciones atómicas, siendo estas un mecanismo de alto nivel que oculta los aspectos técnicos de sincronización, como la exclusión mutua, interbloqueos y recuperación de fallas. Algunas características de las transacciones son: o o o
Que agrupa operaciones en una transacción en las que todas terminan o ninguna es realizada, bajo esta última situación se regresa al estado inicial. Que, para implementarlas, el servidor debe de encapsular (aislar) los recursos que maneja y administra. Que las transacciones intentan eliminar algunos problemas debidos a las concurrencias. Por ejemplo, si dos usuarios ejecuten al mismo tiempo Rename (“x”,”y”) y Rename (“x”, “z”) en un servicio de directorio.
Modelo de transacciones Por medio de este se puede modelar con mayor precisión las transacciones a través del uso de procesos independientes. Entre los puntos a considerar están: o
Almacenamiento estable: Permite que la información perdure a todo, con excepción de las catástrofes, para lo cual se realiza un disco espejo. SISTEMAS DISTRIBUIDOS
Primitivas de transacción: Son proporcionadas por el sistema operativo o compilador, como begin-transaction, end - transaction, abort- transaction, read, write. o Propiedades de las transacciones: Son las propiedades fundamentales de las transacciones y se indican como ACID, si se cumple con lo siguiente: Atomicidad: Las transacciones se ejecutan completamente o se abortan. 56 Consistencia: El resultado de una transacción no debe de depender del número de clientes concurrentes. Aislamiento: Los efectos intermedios de las transacciones no deben de ser visibles a otras. Durabilidad: La información debe de guardarse en disco una vez que la transacción se ejecuta exitosamente. o Si una transacción se aborta, es necesario un procedimiento de recuperación para eliminar las operaciones ya realizadas. o
Recuperación de transacciones Un servicio de transacciones tiene que ser capaz de abortar transacciones y recuperarse de los efectos ocasionados por ello. Entre algunos de los problemas relacionados al aborto de las transacciones, se pueden citar los siguientes: lecturas sucias, cascada de aborto, y escrituras prematuras. El problema de “lecturas sucias” ocurre cuando una transacción exitosa lee datos que han sido afectados por una transacción abortada. Una solución a este problema es retrasar la decisión de declarar exitosa una transacción hasta que todas las transacciones relacionadas sean exitosas. Para el problema de “cascada de aborto” se propone como solución que se retrasen las lecturas hasta que las transacciones que se encuentran escribiendo al mismo dato, aborten o tengan éxito. El problema de las “escrituras prematuras” se presenta cuando dos transacciones escriben al mismo dato al mismo tiempo. Para esto se propone como solución retrasar las operaciones de escritura. Usando versiones tentativas normalmente se pueden evitar retrasos.
Transacciones anidadas Una transacción anidada (TA) está formada por un conjunto de transacciones, cada una de las cuales puede estar a su vez formada por transacciones, y así sucesivamente.
SISTEMAS DISTRIBUIDOS
57
Las transacciones anidadas son útiles para: o o o
Dar una jerarquía a las transacciones según su importancia. Especificar la concurrencia. Mejorar el control de las transacciones. Por ejemplo, una transacción
o
anidada puede abortar sin que su padre tenga que hacerlo. Modelar transacciones distribuidas, las cuales son transacciones cuyas partes se realizan en diferentes sitios
Transacciones distribuidas En este tipo de transacciones, una transacción implica a muchos servidores, por lo que existe la posibilidad de datos replicados. Un coordinador es el primer servidor que atiende las transacciones y es responsable. o o
Abortar o declarar exitosa la transacción. Utilizar nuevos servidores para la transacción.
3.3 SERVICIOS DISTRIBUIDOS DE ALTA DISPONIBILIDAD Single System Image SISTEMAS DISTRIBUIDOS
o o
SSI provee una visión centralizada de los recursos del cluster. Maximiza el aprovechamiento de recursos mediante resource poolsy
o
administración. Brinda mayor escalabilidad y abstracción
Un clúster puede brindar así servicios equivalentes a un computador SMP más 58 costoso. Beneficios de SSI o o o o o
Uso transparente de recursos Balanceo de cargas y migración de procesos transparente Mas confiabilidad y mayor disponibilidad Mayor perfomance y mejor tiempo de respuesta Simplificación de la administración
Servicios de SSI o o o o o o o
Único punto de acceso a los servicios del cluster Única jerarquía de filesystems Único punto de control Virtual Networking única Único espacio de memoria Única interface de usuario: CDE, MSWindows, KDE, Gnome, Web, etc.
Servicios de Disponibilidad: o
Espacio de E/S único: cada nodo accede a todos los periféricos
o
independientemente de su localización. Espacio de Procesos único: todos los procesos, independientemente del
o
nodo en que se crean pueden comunicarse con el resto en forma transparente. Checkpointing: salva el estado de los procesos y los resultados intermedios a disco para soportar Rollback cuando el nodo falla.
3.3.1 SERVICIOS DE ALMACÉN DE ARCHIVOS Un archivo es una colección no contigua de bloques o conjunto de apuntadores a bloques del archivo en el índice de bloques que guardan una interfaz con el SISTEMAS DISTRIBUIDOS
módulo cliente. Un archivo es la abstracción de datos guardados en almacenamiento secundario. Un directorio es un archivo especial que permite organizar los archivos. El sistema de archivos en un sistema operativo distribuido se encarga de la organización, almacenamiento, nombrado, repartición y protección de archivos. Importa notar que un sistema de archivos no 59 es igual a una base de datos. Las transparencias requeridas en un sistema de archivos distribuidos son o o o o o
Acceso. Localización. Concurrencia. Falla. Desempeño.
Servicios de archivos Otros requerimientos para los sistemas de archivos distribuidos son heterogeneidad de replicación y de migración. Los módulos que constituyen el sistema de archivos son: o
Servicio de archivos planos: Está compuesto de módulos de archivos y
o
de acceso a archivos. Se encarga de modificar el contenido de los archivos. Servicio de directorios: Está constituido por módulos de directorios y de
o
control de acceso. Se encarga de definir un alfabeto y una sintaxis para formar los nombres de archivos. Módulo cliente: Está compuesto de módulo de bloques y dispositivos. Se encarga de proveer al usuario de una interfaz de programación. También se ocupa de las rutinas de bajo nivel para acceder a bloques de memoria y dispositivos.
3.3.2 SERVICIOS DE DISTRIBUCIÓN DE INFORMACIÓN La Interface de un Servicio de Archivos proporciona toda la información necesaria sobre cada archivo individual como pueden ser sus atributos. La función más importante de un servicio de archivos corresponde a su mantenimiento, ya que este servicio se encarga de todas las operaciones disponibles de lectura y escritura como pueden ser create, read, write, delete.
SISTEMAS DISTRIBUIDOS
Los usuarios de archivos se pueden dividir en dos tipos: Modelo de Carga y Descarga: Éste sólo proporciona dos operaciones principales que son la lectura y escritura del archivo. La operación consiste en transferir todo un archivo hacia el cliente y todos los movimientos de operación sobre el archivo, lo realiza el cliente, cuando ha dejado de utilizar el archivo, éste se es regresado hacia el servidor en forma completa. (con 60 todos los cambios realizados actualmente). o
o
Modelo de acceso remoto: Este tipo de servicios proporciona un gran número de operaciones para abrir y cerrar archivos leer y escribir partes de archivos, moverse a través de un archivo, así como examinar y modificar los atributos de uno o varios archivos.
3.4 SERVICIOS DE DIRECTORIO Y BÚSQUEDA El servicio de directorio proporciona una transformación entre nombres de texto para los archivos y sus UFID (Unique File Identifiers). Una UFID tiene el formato indicado. El UFID puede ser obtenido por los clientes de un archivo indicando su nombre de texto al servicio de directorio. Un UFID es único entre todos los archivos de todas las computadoras y es difícil de duplicar por personas externas. El UFID no es reusable y contiene información sobre la dirección física. Permite que los archivos sean divididos en grupos. Los archivos contienen campos de permisos encriptados.
Funciones del servicio de directorio o o o
Mapeo de nombres a UFIDs. Organización de los archivos planos en un árbol de directorios. Control del acceso a archivos.
Se considera la identificación de la localización donde se encuentra el servicio o el elemento como parte de un esquema de búsqueda o traducción de nombre (dirección) ya que es necesario que el sistema conozca todos los caminos disponibles (vías de acceso) entre los objetos y los servicios. Principalmente se consideran 2 aspectos:
SISTEMAS DISTRIBUIDOS
o o
Encontrar una dirección en la red en donde se encuentre el servicio funcionando. Encontrar una ruta donde la solicitud del servicio encuentre la dirección donde se ubica.
Una dirección puede ser identificada de 2 formas:
61 o Enviando mensajes a la red (Broadcast). Busca un servicio en forma general. o
Enviando directamente un mensaje a un servidor de nombres que devuelve la respuesta.
Dentro de un sistema de manejo de nombres se tienen varios componentes necesarios que permiten hacer la funcionalidad de traducción o interpretación de direcciones físicas, estos componentes son Server name, Agent, Cliente. Todo sistema de nombres debe contener una estructura definida que garantice el acceso más óptimo hacia los elementos que integran el sistema distribuido. Estas estructuras comúnmente son implementadas dentro de los servidores de nombres y sus tipos son: o o o o o
Jerárquico. Centralizado. Replicado. Descentralizado. Distribuida.
3.5 SERVICIOS DE ARCHIVOS EN RED Sistema de archivos de red es un sistema de archivos de computadoras que sirve para compartir archivos, impresoras y otros recursos como un almacenamiento persistente en una red de computadoras. El primer sistema de este tipo fue desarrollado en la década de 1970, y en 1985 Sun Microsystems creó el sistema de archivos de red NFS el cual fue ampliamente utilizado como sistema de archivos distribuido. Otros sistemas notables utilizados fueron el sistema de archivos Andrew (AFS) y el sistema Server Message Block SMB, también conocido como CIFS. Sistema NFS (Network File Systems) El sistema de archivos NFS fue diseñado por la compañía Sun Microsystems en 1985, con el propósito de ejecutarse en una red local (LAN). Entre las características de un sistema NFS se puede destacar lo siguiente: o o
Es el estándar para tener acceso a archivos distribuidos en UNIX. Utiliza el modelo cliente - servidor y ambos se encuentran en el núcleo del sistema operativo. SISTEMAS DISTRIBUIDOS
Permite la heterogeneidad de arquitecturas. Permite las transparencias de acceso, localización, fallas y desempeño. Alcanza transparencia de localización. La transparencia de migración es implementada parcialmente. Las transparencias de replicación, concurrencia y escalabilidad no son implementadas. o NFS utiliza RPC. Es un servidor sin estados, por lo que no mantiene abiertos 62 los archivos ni guarda información sobre ellos. o o o o o
Para su implementación en UNIX, NFS define nuevas capas en el sistema de archivos de UNIX.
NFS utiliza un sistema de archivos virtuales VFS que puede distinguir entre archivos locales y archivos remotos. Usa un v-node en lugar de un i-node. Al vnode se le añade un identificador de sistema. NFS emula la semántica del sistema de archivos de UNIX integrándolo en el núcleo, por lo que no se requiere recompilar librerías. El caché de clientes tiene el problema de las diferentes versiones de archivos, ya que la escritura de un cliente no se traduce en la inmediata modificación de copias del caché en los otros clientes. Las estampillas de tiempo son usadas por el NFS para validar bloques de caché. Inconvenientes del NFS Entre los inconvenientes que presenta NFS se pueden mencionar las siguientes: o o
No es eficiente para sistemas distribuidos grandes. Las implementaciones caché inhiben a tener un pobre desempeño en las operaciones de escritura.
Sistema AFS (Andrew File Systems) SISTEMAS DISTRIBUIDOS
Este sistema de archivos distribuido fue desarrollado en Carnegie Mellon University (CMU) en 1986. El objetivo de AFS es compartir información a gran escala (10,000 estaciones de trabajo). Al igual que en Network File Systems (NFS), en AFS no hay que modificar programas de UNIX. La estrategia clave para alcanzar escalabilidad en AFS es a través del manejo 63 de caché de archivos completos en los nodos clientes. El mecanismo de AFS considera lo siguiente: o o o
Un proceso cliente realiza una operación “open” en un espacio compartido, entonces el servidor envía una copia del archivo al cliente. El cliente realiza todas las operaciones en la copia local. Una vez que el archivo es cerrado, se envía la versión modificada al servidor, mientras que el cliente mantiene la copia local.
La estrategia de diseño de AFS está basado en UNIX, y considera las siguientes observaciones o o o o o
Usar archivos pequeños. Las lecturas se realizan con más frecuencia que las escrituras en una relación de seis a una. El acceso a los archivos es secuencial. Se comparten pocos archivos. Generalmente un solo usuario es el responsable de modificar los archivos compartidos.
Entre las principales características del sistema AFS, se pueden indicar las siguientes: o o o o o
Los cachés usados son del orden de 100 MB. El tamaño de los paquetes para la transferencia de archivos es de 64 KB. El uso de bases de datos no está considerado. Se usan directorios locales o compartidos para colocar los archivos. Está constituido principalmente por dos componentes de software a nivel usuario. Vice, en el servidor. Venus, en el cliente.
o
Cuando muchos clientes usan el AFS, se puede comparar favorablemente con respecto al NFS. Intercepta las llamadas a operaciones de archivos. Permite guardar información de estado sobre las copias de los archivos. Emplea réplicas de archivos, por lo que una nueva escritura deberá de ser hecha en todas las copias distribuidas. Soporta seguridad, protección y heterogeneidad. Los usuarios pueden cambiar de máquinas y usar el mismo nombre. Este proceso deberá ser transparente, excepto por algunas fallas de ejecución iniciales que son necesarias al poner los archivos de usuarios en las máquinas locales.
o o o o o
SISTEMAS DISTRIBUIDOS
64
DCE: Distributed File System es un sistema de ficheros distribuido de DCE que permite agrupar archivos repartidos en diferentes máquinas, en un espacio de nombres único. Está basado casi por completo en el sistema de ficheros AFS pero con ligeras diferencias.
3.6 REPLICACIÓN La replicación significa mantener copias de una información en múltiples computadoras. Este recurso es ampliamente usado en los sistemas distribuidos, debido a que proporciona un mejor rendimiento, alta disponibilidad y tolerancia a fallas. Algunos ejemplos donde se usa la replicación son: o o
Almacenamiento en caché en los servidores web y servidores proxy web. El servicio de nombres DNS. 9.2.1
Beneficios de usar replicación en los sistemas distribuidos Mejoras del rendimiento
SISTEMAS DISTRIBUIDOS
Entre las características con respecto al rendimiento del sistema distribuido que deben de ser observadas al replicar datos se pueden mencionar las siguientes: La replicación se implementa principalmente a través de cachés en clientes o servidores. o Es importante mantener copias de los resultados obtenidos en llamadas 65 anteriores al servicio para evitar o reducir el coste de llamadas idénticas. o Se evita el tiempo de latencia derivado del cálculo del resultado o de realizar consultas a otros servidores. o La replicación de datos con actualizaciones muy frecuentes en la red genera un costo en el uso de protocolos de intercambio y actualización, además de limitar la efectividad de la réplica. o
Alta disponibilidad Entre las características con respecto a la disponibilidad del sistema distribuido que deben de ser observadas al replicar datos se pueden mencionar las siguientes: o o
La proporción de tiempo que un servicio está accesible con tiempos de respuesta razonables, que debe de ser cercana al 100%. Existen pérdidas de disponibilidad debido a los siguientes factores: Fallas en el servidor. Si se replica n veces el servidor, la disponibilidad será 1-pn. Por ejemplo, paran = 2 servidores, la disponibilidad es 1 0.052= 1 – 0.0025 = 99.75%. Particiones de red o desconexiones. Operación desconectada (son aquellas desconexiones de comunicación que a menudo no se planifican y son un efecto secundario de la movilidad del usuario).
Tolerancia a fallas Entre las características respecto a la tolerancia a falla en los sistemas distribuidos, se pueden mencionar las siguientes: o o
Una alta disponibilidad no implica necesariamente corrección, esto se debe a que puede haber datos no actualizados, o inconsistentes, originados por procesos concurrentes. Se puede utilizar la replicación para alcanzar una mayor tolerancia a fallas. Ante una caída o suspensión de servidores; por ejemplo, si se tienen n servidores, pueden fallar n-1 sin que el servicio sufra alteración. Ante fallas bizantinas, es decir, si f servidores presentan fallas bizantinas, un sistema con 2f+1 servidores proveería un servicio correcto.
Requisitos para realizar la replicación Entre los requisitos más importantes que se deben considerar al implementar la replicación en un sistema distribuido, están: SISTEMAS DISTRIBUIDOS
o o
Transparencia. Consistencia.
El requisito de transparencia implica que los clientes no son conscientes de que hay múltiples copias del recurso al que ellos están accediendo. Para los usuarios, solo existen recursos lógicos individuales. Por otro lado, la 66 consistencia implica que las operaciones sobre un conjunto de objetos replicados deben de dar resultados que sigan la especificación de corrección definida para esos objetos. De acuerdo con el tipo de aplicación, la consistencia puede ser más o menos estricta. Modelo general de gestión de réplica Un modelo de sistema general para la gestión de réplicas. Describe el papel de los sistemas de comunicación grupal en la consecución de la tolerancia a fallas a través de la replicación.
Los componentes principales de esta arquitectura de gestión de datos replicados son: o o
Gestor de réplicas. Frontal (front-end).
El gestor de réplicas son los componentes que almacenan las réplicas de un determinado objeto o servicio y operan sobre ellas. Frontal (FE) es el componente o interfaz que atiende las llamadas de los clientes y se comunica con los gestores de réplicas. En general, cinco fases están involucradas en el desempeño de una única solicitud a los objetos replicados: o o o o
La petición es enviada por el frontal a uno o más gestores con las siguientes opciones: Se envía la petición a un gestor y este la reenvía a otros. Multidifundir la petición a varios gestores. Los gestores se coordinan para ejecutar la petición de manera consistente.
Los tipos de ordenación para que los gestores manipulen las réplicas son: SISTEMAS DISTRIBUIDOS
o o o o o o
Ordenamiento FIFO. Ordenamiento casual. Ordenamiento total. Se ejecuta la petición, la cual podría ser realizada de manera tentativa. Se llega a un acuerdo o consenso antes de consumar la ejecución. Uno o más gestores de réplicas entrega una respuesta al frontal.
67 Servicios de tolerancia a fallas basados en replicación Replicación pasiva En la replicación pasiva existe un gestor de réplicas primario y uno o más gestores secundarios también conocidos como “respaldos” o “esclavos”. Los frontales se comunican con el gestor primario, quien ejecuta las operaciones y manda copias a los respaldos. Si el gestor de réplicas primario falla, entonces un gestor de réplicas de respaldo lo sustituye.
Una replicación pasiva tiene las siguientes fases de ejecución: o o o o o
Petición. Coordinación. Ejecución. Acuerdo. Respuesta.
Durante la fase de petición, el frontal envía la petición al gestor primario, quien activa la fase de coordinación y ejecuta las peticiones siguiendo una ordenación FIFO. Se realiza la fase de ejecución de la petición y se almacena la respuesta. Si es una petición de actualización, entonces en la fase de acuerdo el gestor primario envía la actualización a todos los respaldos, quienes confirman la recepción. Finalmente, en la fase de respuesta, el gestor primario envía la respuesta correspondiente al frontal. La replicación pasiva tolera fallas de procesos, pero no tolera fallas bizantinas. El frontal requiere poca funcionalidad, sin embargo, este esquema de replicación es propenso a problemas de cuellos de botella en el gestor primario. SISTEMAS DISTRIBUIDOS
Replicación activa En la replicación activa todos los gestores de réplicas tienen el mismo rol. Los frontales multidifunden las peticiones a todos los gestores y todos los frontales procesan la petición de manera idéntica pero independiente.
68
Al igual que la replicación pasiva, una replicación activa tiene las siguientes fases de ejecución: o o o o o
Petición. Coordinación. Ejecución. Acuerdo. Respuesta.
Sin embargo, las actividades que se realizan en cada fase difieren sustancialmente de las actividades que se hacen en la replicación pasiva. Durante la fase de petición, el frontal multidifunden la petición a los gestores usando multidifusión fiable y de ordenación total. No se envía otra petición hasta que se reciba la respuesta a la petición actual. El sistema de comunicación durante la fase de coordinación entrega la petición a todos los gestores según una ordenación total. Entonces, cada gestor realiza la fase para ejecutar la petición. La fase de acuerdo no es necesaria, debido a que se utiliza multidifusión. Finalmente, en la fase de respuesta, cada gestor manda su respuesta al frontal. El número de respuesta que recibe el frontal está en función de las asunciones de falla y del algoritmo de multidifusión. En la replicación activa, la tolerancia a fallas está soportada principalmente por la multidifusión fiable y totalmente ordenada. La multidifusión es equivalente a un algoritmo de consenso, por lo que la replicación activa permite resolver fallas bizantinas. Esto se debe a que el frontal recoge f+1 respuestas iguales antes de responder al cliente
SISTEMAS DISTRIBUIDOS
View more...
Comments