lunes, 6 de octubre de 2014

SISTEMAS DISTRIBUIDOS II

Introducción
La creciente necesidad de comunicación a todos los niveles entre particulares y organizaciones ha extendido el uso de los sistemas de comunicación entre ordenadores, desde las redes de área local y las redes de área extensa hasta Internet. En la actualidad el uso de ordenadores aparece generalmente asociado al de algún sistema de comunicación, y es posible disponer de grupos de ordenadores que presten conjuntamente un mismo servicio. En el futuro encontraremos cada vez más redes heterogéneas de ordenadores, con aplicaciones que compartan recursos geográficamente distribuidos, fl uno de información y coordinación entre sus actividades. Como prueba de esta tendencia encontramos ejemplos actuales en los sistemas de reservas aéreas on-line o las aplicaciones de soporte a trabajo colaborativo, como vídeo-conferencias. El concepto de sistema distribuido, aparecido hace ya varias décadas, se puede defi nir como un conjunto de ordenadores interconectados mediante una red que colaboran para la realización de alguna tarea conjunta. Tales sistemas pueden estar compuestos de pequeños ordenadores de bajo coste que combinen sus capacidades. A diferencia de otros sistemas de ordenadores interconectados, los ordenadores (nodos) que forman un sistema distribuido mantienen un estado compartido. Esto requiere una coordinación entre ellos para mantener ese estado consistentemente.
Las principales ventajas que ofrecen los sistemas distribuidos son:
·         Tolerancia a fallos. Una consecuencia de tal estado compartido es precisamente la capacidad de los sistemas distribuidos para tolerar fallos en alguno de sus componentes. En un sistema centralizado el estado se mantiene en un único ordenador, el servidor, de modo que el fallo de este (o cualquier reparación, sustitución, etc. a que deba someterse) hace que el sistema deje de estar disponible. Por el contrario, un sistema distribuido cuenta con diversas unidades de cómputo y gestión de recursos, y por tanto con una menor probabilidad de fallo de todo el sistema, si bien es necesario un esfuerzo especial de gestión para lograr que las aplicaciones no adviertan los fallos de los distintos componentes.
·         Escalabilidad. Para aumentar la capacidad de servicio de un sistema centralizado no existe más alternativa que sustituir el servidor por una máquina más potente. En cambio un sistema distribuido puede aumentar su capacidad añadiendo nuevos nodos al sistema existente.
A cambio de las ventajas ofrecidas, sin embargo, los sistemas distribuidos son notablemente más complejos que los centralizados. En particular es preciso contemplar en su diseño una serie de cuestiones específicas:
·         Fallos en cada componente. En un sistema distribuido no existe un servidor central cuyos fallos inutilicen el sistema. Sin embargo, cada uno de los ordenadores que lo forma puede fallar independientemente. El sistema debe diseñarse de modo que sus especificaciones sigan siendo respetadas aunque falle algún componente aislado.
·         No fiabilidad de las comunicaciones. Igualmente el diseño debe tener en cuenta la imperfección del sistema de comunicaciones entre nodos, y la posibilidad de pérdidas, desorden y duplicación en los mensajes.
·         Coste de las comunicaciones. En general los canales de comunicación que interconectan los distintos nodos de un sistema distribuido tienen mayor retardo y coste que los que conectarían distintos procesos dentro del mismo ordenador.
·         Mantenimiento de la consistencia. Si la solución adoptada pasa por la replicación, en cada uno de los nodos, de la información necesaria para que la aplicación realice sus tareas, resulta imprescindible realizar una gestión adecuada de la consistencia de cada una de las vistas que los diferentes nodos tengan de esa información global. Esto obliga a que se incluya en el diseño algoritmos específicos que proporcionen, en cada caso, las garantías
sufi cientes para el correcto funcionamiento de las aplicaciones.
Asimismo, hay otros factores que difi cultan el desarrollo de los sistemas distribuidos. Por una parte, la programación en estos entornos es más compleja, y por tanto también la depuración y gesteo  del software son más costosos. Por otro lado, un sistema distribuido cuenta con un mayor número de potenciales puntos de intrusión, lo cual, unido a la posible inseguridad de la red de comunicaciones, multiplica los riesgos para la seguridad del sistema y complica el diseño de un sistema distribuido seguro.

ALTA DISPONIBILIDAD
En buena medida los sistemas distribuidos se diseñan eliminar las limitaciones en el servicio proporcionado debido a fallos en el servidor. Una forma de cuantifi car la tolerancia a fallos de un sistema es mediante el concepto de disponibilidad. Este parámetro representa el porcentaje de tiempo durante el cual el sistema se encuentra operativo y depende tanto de la probabilidad de que se den fallos como de la capacidad del sistema para recuperarse frente a estos. En función de su valor se puede establecer una clasifiacción del grado de disponibilidad de un sistema. Así se habla de alta disponibilidad cuando el tiempo en que el sistema no está operativoes menor del 0.001‰ (menos de 30 segundos al año).
La técnica fundamental para mejorar la disponibilidad de un servicio es la replicación de los componentes que lo proporcionan. Cada réplica de un mismo componente se ubicará en un nodo diferente del sistema, de modo que si un componente falla, una de sus réplicas puede atender el servicio correspondiente. Para lograr esta continuidad del servicio en caso de fallo, la replicación ha de apoyarse en una serie de servicios complementarios, como el monitor de pertenencia, que vigila el estado de los componentes del sistema para detectar y notifi car sus fallos y recuperaciones, y los  mecanismos de checkpoints, para realizar actualizaciones de estado, lo cual generalmente requiere a su vez el uso de algún soporte transaccional.
Existen diversas alternativas a la hora de implementar  replicación. Así hay que decidir cuántas réplicas se incluirán, dónde estarán ubicadas, qué nivel de consistencia se exigirá entre el estado de las distintas réplicas, etc. Todas estas opciones, que infl huirán en  el comportamiento ofrecido por el servidor, configuran un modelo de replicación. Los más importantes son la replicación activa y la replicación pasiva. En la primera, las peticiones enviadas al servicio se dirigen a todas las réplicas, y cada una de ellas realiza idéntica tarea, actualiza su estado y responde. En el segundo modelo, en cambio, solo una de las réplicas procesa las peticiones y se encarga de actualizar el estado de las otras. Existen múltiples variantes de cada modelo, así como modelos intermedios. La elección de uno u otro depende del entorno en que se trabaje y del comportamiento deseado para el servicio. 
TITULO: Sistemas Distribuidos
AUTOR: Marica Carmen Bañuls, Luis Irun
FECHA DE ACCESO: 29 de septiembre 2014

Escalabilidad
Las diferentes técnicas de replicación proporcionan, además, distintas características en cuanto a la escalabilidad del sistema. Así, puede verse que la replicación también sirve para aumentar la accesibilidad de la información, proporcionando a los diferentes nodos del sistema la independencia necesaria para convertirse en una unidad computacional activa en el sistema.
La forma en que se integre cada unidad computacional en el sistema influye también en las prestaciones y en la escalabilidad de los servicios que ofrezca este. Además, la elección del modelo de replicación que se implante en el sistema deberá tener en cuenta el tipo de uso que las aplicaciones del sistema distribuido vayan a hacer de este.
Por ejemplo, si se implanta el modelo de replicación pasivo, la escalabilidad del sistema será mejor que la del modelo activo si las operaciones que se realizan sobre la información replicada son mayoritariamente de escritura. Esto es porque el modelo pasivo permite que cada nodo se responsabilice de los accesos a un subconjunto de objetos, actuando así de réplica primaria para dicho subconjunto. De esta forma, todos los nodos pueden hacer el papel de primario para diferentes porciones de la información que replican.
Existen multitud de técnicas para mejorar la escalabilidad y prestaciones del sistema, basadas en diferentes aspectos y principios. El uso de diferentes métodos para la difusión de las actualizaciones es una de las fuentes más comunes para ello. Por ejemplo, si cuando un objeto es modificado se notifican los cambios inmediatamente al resto de nodos, los costes serán mayores que si se retardan las difusiones en el tiempo, con la esperanza de que se realicen más modificaciones de ese objeto antes de difundir los cambios primeros (en este caso, solo sería necesario realizar la última difusión, puesto que la primera sería oculta por las siguientes).
Otras técnicas se basan en los mecanismos de comunicación entre los distintos nodos del sistema. Sobre todo para modelos de replicación del estilo del activo, una adecuada elección de las primitivas de comunicación (incluyendo garantías y características en cuanto a prestaciones y escalabilidad) puede determinar las características del sistema.

Consistencia
La replicación, como ya se ha visto, está palpablemente presente en el ámbito de los sistemas distribuidos. Gracias a ella es posible, por ejemplo, proporcionar tolerancia a fallos, e incrementar las prestaciones y escalabilidad del sistema. Sin embargo, las técnicas de replicación deben incluir los mecanismos necesarios para proporcionar garantías acerca de la consistencia de la información que se replica.
Podríamos definir la consistencia como las garantías que se proporcionan acerca de la visibilidad de los cambios realizados en la información que se replica. Idealmente, cuando en un sistema replicado uno de los nodos realiza una modificación, esta modificación debería poder ser observada en todos y cada uno de los nodos antes de poder realizar ninguna otra operación.
La necesidad de proporcionar estas garantías, sin embargo, entra en conflicto directo con la escalabilidad del sistema, y puede llegar a comprometer las prestaciones alcanzables con un sistema distribuido.
Es por esto que se han definido múltiples relajaciones de la consistencia, que proporcionan al sistema las garantías suficientes para su buen funcionamiento sin comprometer más de lo imprescindible sus prestaciones.
Algunas de estos modos de consistencia son:
·         Consistencia Total. Es la más estricta, garantizando que todas las operaciones se realizan de forma atómica en cada uno de los nodos del sistema, difundiendo sus efectos antes de que ninguna otra operación se inicie. De este modo, todos los nodos observan los cambios en el mismo orden, que coincide con el orden global en que se realizan.
·         Consistencia Secuencial. Es similar al anterior, con la diferencia de que el orden en que se aplican los cambios no tiene por qué coincidir con el orden real en que se realizaron. Sin embargo, la consistencia Secuencial continúa exigiendo que todos los nodos coincidan en dicho orden.
·         Consistencia Causal. Es una nueva relajación de las anteriores, en la que se permite que operaciones iniciadas en diferentes nodos sean difundidas en órdenes distintos, si no existe entre ellas una dependencia “causa – efecto”. Así, el orden en que se aplican las operaciones puede variar en dos nodos distintos si las diferencias no afectan la causalidad de las operaciones.
·         Consistencia Débil. Hace uso de variables de sincronización, a las que los diferentes nodos acceden siguiendo una consistencia secuencial, garantizando que no se obtiene acceso a una variable de sincronización hasta que todas las escrituras previas han sido difundidas a todos los nodos. En otras palabras, las variables de sincronización permiten hacer un volcado de las escrituras de cada nodo, respetando una consistencia secuencial.
La gestión de la consistencia no es pues una tarea simple, y supone un sobreesfuerzo en el diseño de un sistema distribuido, así como un sobrecoste en cuanto a las prestaciones que el sistema pueda ofrecer.
Aplicaciones distribuidas
Las aplicaciones distribuidas son aquellas construidas sobre sistemas distribuidos, con las consiguientes ventajas potenciales en cuanto a rendimiento, disponibilidad y escalabilidad. En general es deseable que los aspectos de mayor complejidad del sistema distribuido queden ocultos a la aplicación:
·         Localización. El usuario no necesita conocer la localización física de un objeto en el sistema. Asimismo, el acceso a objetos locales o remotos se realiza del mismo modo.
·         Replicación. El usuario no precisa conocer el grado de replicación de un objeto (ni siquiera si está replicado), ni el modelo en que tal replicación está implementada.
·         Fallos. El sistema debe enmascarar (al menos en cierto grado) los fallos de alguno de sus componentes de modo que la prestación del servicio continúe.
·         Concurrencia. El acceso a recursos compartidos paralelamente por diversos usuarios requiere una sincronización por parte del sistema.
Si el sistema distribuido cumple estos requisitos de transparencia, el programador de aplicaciones no ha de preocuparse de tales detalles, sino de utilizar los recursos que le ofrece el sistema. Del mismo modo, la aplicación no precisaría ser modificada por el hecho de que el sistema esté compuesto por máquinas heterogéneas, ni por el hecho de que se decida añadir nuevos nodos para su extensión.
Dependiendo del soporte a replicación adoptado, las aplicaciones pueden ser específicas para el sistema operativo distribuido sobre el que se construyen o bien aprovechar las características de alta disponibilidad facilitadas por una capa de middleware.



miércoles, 17 de septiembre de 2014

TECNOLOGIAS AVANZADAS DE SISTEMAS DISTRIBUIDOS



UNIDAD 1 VIRTUALIZACIÓN



1.- ESQUEMA DE VIRTUALIZACIÓN

Si bien los Sistemas Operativos disponen de características de seguridad, protección, gestión de recursos, etc. éstas parecen ser insuficientes para satisfacer los requerimientos de los sistemas informáticos actuales. Las tecnologías de virtualización existentes han sido y continúan siendo masivamente adoptadas para cubrir esas necesidades de los sistemas y aplicaciones por sus características de particionado de recursos, aislamiento, capacidad de consolidación, seguridad, soporte de aplicaciones heredadas, facilidades de administración, etc. Una limitante de las tecnologías de virtualización tradicionales es que el poder de cómputo de una Máquina Virtual está limitado al poder de cómputo de la máquina física que la contiene. Por otro lado, los Sistemas Operativos Distribuidos de Imagen Única ofrecen un poder de cómputo que integra en forma transparente los recursos computacionales de los nodos que constituyen un cluster. Sus características de transparencia evita la reprogramación de las aplicaciones heredadas que fueron desarrolladas para sistemas centralizados. La línea de I/D aquí presentada se orienta hacia un Sistema de Virtualización con Recursos Distribuidos que permita construir Máquina Virtuales con mayor poder de cómputo que una máquina física combinando e integrando las tecnologías de virtualización y Sistemas Operativos Distribuidos de Imagen Única.
                                                                                              

URL:  http://sedici.unlp.edu.ar/handle/10915/18375
FECHA DE VISITA: 28 de septiembre 2014









2. HERRAMIENTAS PARA VIRTUALIZAR

Montserrat Pérez Lobato explica que una de las últimas herramientas de virtualización de sistemas operativos VirtualBox. Es un tipo de herramienta que permite crear un PC virtual dentro de un PC real para poder instalar en él uno o varios sistemas operativos que serán totalmente independientes del sistema operativo real, y así poder trabajar con ellos.
Hay dos versiones: una personal (VirtualBox Open Source Edition) que es totalmente open source y otra para empresas (VirtualBox) que por el momento es gratuita pero no permite el acceso al código y necesita una licencia especial. La versión con licencia tiene una serie de características exclusivas:
  • Soporte para USB
  • Soporte para escritorio remoto (Remote Desktop Protocol, RDP).
  • USB sobre RDP.
  • Carpetas compartidas.
El sistema operativo anfitrión de VirtualBox puede ser tanto Windows 32-bit como Linux 32-bit aunque para poder ejecutar VirtualBox en Linux es necesario instalar una serie de librerías adicionales, en concreto, libxalan-c, libxerces-c y la versión 5 de libstdc++. La versión de VirtualBox para MAC está en desarrollo en fase pre-alfa así que de momento los “maqueros” tendrán que esperar un tiempo para disfrutar de este emulador de PC.
En concreto, los sistemas operativos anfitriones Windows o Linux pueden ser:
  • Windows 2000, service pack 3 y superiores.
  • Windows XP, todos los service packs.
  • Windows Server 2003.
  • Debian GNU/Linux 3.1 (“sarge”) y “etch”.
  • Fedora Core 4 y 5.
  • Gentoo Linux.
  • Redhad Enterprise Linux 3 y 4.
  • SUSE Linux 9 y 10.
  • Ubunto 5.10 (“Breezy Badger”), 6.06 (“Dapper Drake”), 6.10 (“Edgy Eft”)





Requisitos mínimos de instalación
Para poder crear máquinas virtuales con VirtualBox que emulen uno o varios sistemas operativos se necesitan una serie de requisitos:
  • Un procesador x86 razonablemente potente. Cualquier procesador AMD o Intel reciente puede valer.

  • Dependiendo del sistema operativo que se pretenda emular se necesitará mas o menos memoria RAM. Para hacer un cálculo aproximado se necesitan al menos 512 MB para el sistema operativo anfitrión más la cantidad que necesite el sistema operativo a instalar. Se puede instalar disponiendo de menos memoria aunque en este caso el rendimiento se verá disminuido.

  • El espacio en disco que ocupa VirtualBox es pequeño, por ejemplo, la versión para Windows ocupa alrededor de 45 MB, aunque los sistemas operativos a emular pueden requerir bastante espacio en disco, del orden de GB.

AUTOR: Montserrat Pérez Lobato
FECHA DE VISITA: 25 DE SEPTIEMBRE 2014









3. INSTALACION DE MAQUINAS VIRTUALES

Instalación de VirtualBox

Como ya hemos visto, VirtualBox se puede utilizar sobre un sistema operativo anfitrión que sea Windows o Linux (y en un futuro, en MAC). En este artículo nos centraremos en la utilización de VirtualBox sobre Windows, en concreto sobre Windows XP Home Edition. La versión que se usará en el artículo de VirtualBox para Windows será la 1.3.4.

Una vez descargado el archivo de VirtualBox para Windows, VirtualBox_1.3.4_Win_x86.msi, se debe proceder a ejecutarlo. La instalación de esta herramienta es muy sencilla.

La primera ventana es la de bienvenida en la que se debe pulsar el botón Next.

Ventana de bienvenida a la instalación de VirtualBox versión 1.3.4



En la siguiente ventana se nos muestran los términos de la licencia de VirtualBox que en este caso es para uso personal y evaluación. Se debe seleccionar la opción para aceptar los términos de la licencia (I accept the terms in the License Agreement) y pulsar el botón Next.


Términos de la licencia de VirtualBox

Después de aceptar los términos de la licencia se muestra la ventana de elección de los componentes a instalar de VirtualBox:
  • VirtualBox USB Support contiene un conjunto de drivers para que Windows ofrezca un soporte total para los dispositivos USB.
  • VirtualBox Networking son los drivers para que Windows ofrezca soporte de red.
Además de los componentes se debe elegir la ruta donde se va a instalar la aplicación. Por defecto es C:Archivos de programaInnoTek VirtualBox y se recomienda no cambiarla.

Ventana de elección de componentes a instalar de VirtualBox

Si se pulsa el botón de Disk Usage nos aparecen los requisitos de disco duro necesario para la instalación de VirtualBox. En este caso el espacio libre necesario es de 45 MB.

Ventana de requisitos de disco duro para instalar VirtualBox


Al pulsar el botón OK volvemos a la ventana anterior y para continuar con la instalación se debe pulsar el botón Next. En la siguiente ventana se pude dar comienzo a la instalación pulsando el botón Install.

Ventana de instalación de VirtualBox

Una vez que ha concluido la instalación se nos muestra la ventana para dar por finalizada la misma.

Ventana para terminar la instalación de VirtualBox

Para terminar la instalación se debe reiniciar el sistema operativo para que las variables escritas en el registro tomen su valor.

Instalación de VirtualBox

Además de instalar el programa se instalan la licencia (Licence.rtf), el manual de usuario (UserManual.pdf) y el manual de referencia de programación de VirtualBox (VirtualBox SDK Reference).



Menú emergente de VirtualBox

AUTOR: Montserrat Pérez Lobato

FECHA DE VISITA: 24 DE SEPTIEMBRE DEL 2014