lunes, 8 de octubre de 2012

Sistemas Distribuidos. UNIDAD I
1. Introducción
2. Comunicación
3. Procesos
4. Nombrado
5. Sincronización
6. Consistencia y replicación
7. Tolerancia a fallos
8. Seguridad



1.- Concepto de Sistema Distribuido
Un Sistema Distribuido es :
􀂃 Un conjunto de ordenadores independientes que ofrecen a sus usuarios la imagen de un sistema coherente único.
Dos aspectos:
􀂃 Hardware: máquinas autónomas
􀂃 Software: imagen de sistema único


1.1.- Características de los Sistemas Distribuidos (informal)
􀂃 Se ocultan a los usuarios las diferencias entre las máquinas y la complejidad de los mecanismos de comunicación entre máquinas.
􀂃 Los usuarios acceden a los sistemas distribuidos de forma homogénea sea cual sea el lugar desde el que lo hagan.
􀂃 Los sistemas distribuidos deben ser relativamente sencillos de ampliar, por lo que deben escalar bien.
􀂃 Los servicios que ofrecen los sistemas distribuidos deben estar siempre disponibles, aunque determinadas partes de los sistemas fallen o no estén disponibles por reparación, ampliación, sustitución, etc.
􀂃 Los sistemas distribuidos habitualmente se estructuran en niveles, siendo la estructuración como “middleware” una de las más frecuentes.


1.2.- Estructuración en ‘middleware’

Nótese que la capa “middleware” abarca varias máquinas.


1.3.- Ejemplos de sistemas distribuidos
􀂃 Ordenadores para la docencia en laboratorios
􀂃 El servicio de nombres de Internet
􀂃 Los servicios de mensajería de Internet
􀂃 Los servidores de Google
􀂃 WWW




2.- Objetivos de los sistemas distribuidos
1. Facilitar el acceso de los usuarios a recursos remotos.
2. Transparencia de distribución
3. Concepción como sistemas abiertos
4. Escalabilidad


2.1.- Conectar usuarios a recursos
􀂃 El principal objetivo de todo SD es facilitar a los usuarios el acceso a recursos remotos.
􀂃 Recurso debe entenderse en sentido amplio.
􀂃 Ventajas:
- Economía de recursos
- Facilita la compartición de recursos entre usuarios.
􀂃 Desventajas:
- Seguridad


2.2.- Transparencia de distribución
􀂃 Ocultar el hecho de que los procesos y los recursos están físicamente distribuidos sobre
diferentes ordenadores. .
􀂃 Diferentes aspectos de transparencia.

2.2.1.- Tipos de transparencia
Diferentes formas de transparencia en sistemas distribuidos


2.2.2.- Grados de transparencia
􀂃 Muchas veces la transparencia total es inabordable o poco conveniente:
- Por ejemplo: dominios .es (conviene saber que se trata de páginas de España)
- Transparencia ante fallos: teóricamente imposible en determinados sistemas.
􀂃 Nodo que falla indistinguible respecto a nodo que va lento.
􀂃 Imposible saber si un servidor completó una operación antes de fallar.
􀂃 Muchas veces hay que buscar punto de equilibrio entre eficiencia y transparencia, pues la transparencia suele ser cara:
- Escribir en disco en cada operación sobre un servidor para enmascarar fallos
- Mantener las caches de páginas Web siempre actualizadas con precisión


2.3.- Concepción como sistemas abiertos
􀂃 Decimos que un sistema distribuido es abierto si se ajusta a estándares que describen la sintaxis y la semántica de los servicios, estándares que deben potenciar la flexibilidad.
􀂃 Con la adecuación a estándares se logra:
- Interoperabilidad: sistemas que se ajusten al mismo estándar pueden colaborar entre ellos.
- Portabilidad de las aplicaciones: aplicaciones desarrolladas para una implementación concreta de un estándar deben funcionar para otras implementaciones del estándar.
􀂃 Ejemplos:
- CORBA, IDL
- HTML, XML
- ODBC

􀂃 La flexibilidad del sistema debe permitir:
- Configurar el sistema combinando módulos distintos, de fabricantes posiblemente diferentes.
- Añadir nuevos módulos
- Reemplazar unos módulos por otros sin afectar al resto del sistema.
􀂃 La flexibilidad se logra:
- Diseñando sistemas formados por pequeñas componentes claramente diferenciadas que interactúen entre ellas mediante interfaces claras.
- Separando políticas de mecanismos.


2.3.1.- Separación de políticas y mecanismos
􀂃 Los sistemas deben construirse de tal forma que proporcionen una elevada riqueza de mecanismos.
􀂃 Las políticas deben ser configurables:
- Permitiendo al usuario definir los parámetros
- Permitiendo al usuario implementar nuevas políticas.
􀂃 Ejemplos:
- Calidad del servicio del video/audio
- Elección entre diferentes tipos de cifrado
- Número de réplicas en sistemas replicados
- Consistencia entre réplicas o entre caché y datos primarios.


2.4.- Escalabilidad
􀂃 Debe considerarse la escalabilidad en tres vertientes:
- Escalabilidad de tamaño: Los sistemas deben permitir el crecimiento en procesos, nodos, usuarios, sin que se afecte al funcionamiento del sistema.
- Escalabilidad de distancia: Los sistemas deben permitir que se reubiquen componentes de los sistemas en lugares físicamente distantes entre ellos.
- Escalabilidad administrativa: Los sistemas deben ser fácilmente configurables incluso si abarcan organizaciones diferentes.
􀂃 La mayoría de veces sólo se menciona escalabilidad de tamaño, y muchas veces se recurre a soluciones temporales (aumentar la potencia de los servidores)


2.4.1.- Escalabilidad de tamaño
􀂃Ejemplos donde se manifiesta necesidad de escalabilidad de tamaño, muchas veces difícil de solucionar



2.4.1.- Escalabilidad de tamaño
Técnicas
1. Distribución: dividir datos y/o computaciones entre diferentes ordenadores. Ejemplos:
- Mover los cálculos a los clientes en los sistemas Web.
- Particionar los dominios de DNS en diferentes zonas administrativas.
- Crear algoritmos descentralizados (escalables)
2. Replicación: hacer copias de los datos en diferentes lugares.
Ejemplos:
- Sistemas de ficheros replicados. Fundamentalmente para tolerar fallos.
- Bases de datos replicadas
- Sistemas Web como espejos (mirroring)
3. Caching: proporcionar copias de los datos a los clientes
- Caches de Web
- Caches de ficheros

Escalabilidad por distribución


Ejemplo de escalabilidad por distribución de los cálculos: La diferencia
entre permitir que los formularios sean comprobados por:
a) Un servidor
b) Un cliente



Ejemplo de escalabilidad por distribución de los datos: División de los DNS en
zonas


Escalabilidad por distribución de los algoritmos. Creación de algoritmos descentralizados
􀂃 Conviene diseñar algoritmos que se ejecuten en varias máquinas en lugar de algoritmos que necesiten todos los datos para ejecutarse
􀂃 Se logra:
- Distribuir la carga computacional y espacial entre diferentes máquinas
- Distribuir la carga de las comunicaciones en la red.
􀂃 Características de los algoritmos descentralizados:
- Ninguna máquina tiene toda la información completa que requiere el algoritmo
- Las máquinas únicamente toman decisiones en base a su conocimiento local
- El fallo de una máquina no impide que el algoritmo progrese
- No se asume que exista un reloj físico global (para permitir escalabilidad de distancia)


Escalabilidad por replicación/caching
􀂃 Pese a que parece sencillo, presenta un problema importante.
􀂃 Tener múltiples copias de la misma entidad puede provocar que
aparezcan inconsistencias: modificar sólo una copia hace que ésta sea diferente del resto.
􀂃 Hacer que todas las copias sean mutuamente consistentes requiere de protocolos de sincronización global ante cada modificación
􀂃 La sincronización global no escala bien
􀂃 Si pueden tolerarse inconsistencias, se pueden llegar a buenas soluciones, pero depende de cada aplicación en concreto.



2.4.2.- Escalabilidad de distancia
􀂃 Debe considerarse en el diseño de algoritmos descentralizados.
􀂃 Debe considerarse los efectos que supondrán a los algoritmos:
- Los cambios en los tiempos de las comunicaciones debidos a cambios geográficos de los distintos ordenadores (WAN > LAN)
- Las diferencias en cuanto a la fiabilidad de las comunicaciones (LAN > WAN)


2.4.3.- Escalabilidad administrativa
􀂃 Al instalar un sistema sobre diferentes organizaciones suelen aparecer dificultades
relacionadas con la seguridad:
- Diferentes organizaciones tienen implantadas diferentes políticas
- Los administradores de los sistemas no suelen tener acceso a los sistemas de otras organizaciones.
- Los usuarios suelen fiarse únicamente de sus propios administradores.
- Deben implantarse mecanismos que protejan a cada organización del resto y además del propio sistema.


3.1.- Multiprocesadores y Multicomputadoras
􀂃 Multiprocesadores: Cada CPU tiene acceso a toda la memoria
- Diferentes tipos de configuraciones de la red (bus, conmutadores) para conectar CPUs con memorias
􀂃 Multicomputadoras: Cada CPU tiene acceso únicamente a su memoria privada.
- Diferentes tipos de red para conectar las distintas
CPUs entre ellas (bus, conmutadores)



Configuraciones básicas de multiprocesadores y multicomputadoras


3.1.- Multiprocesadores y Multicomputadoras
􀂃 Un multiprocesador basado en bus.

3.2.- Redes de ordenadores
􀂃 Altos grados de heterogeneidad en los nodos:
- Computadoras de altas prestaciones para computación en paralelo (tanto multiprocesadores como multicomputadoras)
- Ordenadores de gama alta (servidores)
- Ordenadores convencionales de escritorio
- Ordenadores portátiles
- Estaciones de trabajo multimedia
􀂃 Altos grados de heterogeneidad en las redes:
- Redes de área local de Gigabit
- Conexiones inalámbricas
- Conmutadores de alta velocidad para WANs
- Conexiones de baja velocidad punto a punto
Idealmente un sistema distribuido ocultará todas estas diferencias


4.1.- Sistemas operativos uniprocesador
􀂃 Objetivo: Proporcionar a los usuarios y aplicaciones una forma sencilla y eficiente de compartir los recursos del ordenador (CPU, memoria, discos, dispositivos)
􀂃 Actualmente los sistemas operativos proporcionan una imagen de máquina virtual a las aplicaciones, de forma que éstas accedes a los recursos como si todos los recursos estuvieran dedicados a ellas.
􀂃 Un aspecto importante de la compartición de recursos es la seguridad: para ello el sistema ofrece servicios para acceder a los recursos y sólo se podrá acceder a los recursos a través de estos servicios.
􀂃 Para implementar esta compartición segura de recursos las CPUs cuentan al menos con dos modos de funcionamiento: modo supervisor y modo usuario.
􀂃 El sistema operativo se ejecuta en modo supervisor, teniendo entonces control sobre todos los recursos, y las aplicaciones se ejecutan en modo usuario.
􀂃 Tipos de sistemas operativos uniprocesador:
- Monolíticos: todo el sistema se ejecuta en modo supervisor
- Micronúcleo: sólo una pequeña parte del sistema se ejecuta en modo supervisor


4.2.- Sistemas operativos multiprocesador
􀂃 Extensión de los sistemas operativos uniprocesador a varias CPUs.
􀂃 Extensión más sencilla en arquitecturas micronúcleo que en arquitecturas monolíticas.
􀂃 Los mismos objetivos que los sistemas operativos uniprocesador, donde adicionalmente se pretende:
- Ocultar el hecho de disponer de varias CPUs
- Mejorar el rendimiento global del sistema
􀂃 Problema: diferentes CPUs acceden concurrentemente a la memoria, que está compartida entre todas ellas:
􀂃 Para sincronizar el acceso concurrente a la memoria se suelen utilizar las mismas primitivas de sincronización que las utilizadas para sistemas multitarea:
- Semáforos, cerrojos, monitores, etc.


4.3.- Sistemas operativos distribuidos
􀂃 Estructura totalmente diferente a la estructura de los sistemas operativos multiprocesador,
pues no hay memoria compartida. Sólo es posible la comunicación entre ordenadores
mediante paso de mensajes.
􀂃 Los sistemas operativos distribuidos se realizan sobre:
- Multicomputadoras: el mismo sistema operativo sobre cada ordenador.
- Redes de ordenadores: sistemas operativos diferentes en cada ordenador, ofreciendo todos ellos la misma interfaz.


4.3.- Sistemas operativos distribuidos
􀂃 Cada núcleo gestiona los recursos locales: CPU, discos, etc.
􀂃 La capa del sistema operativo distribuido, ofrece una imagen de máquina virtual a las aplicaciones, gestionando los recursos ofrecidos por cada núcleo.
􀂃 La capa de sistema operativo distribuido puede ofrecer a las aplicaciones:
- Primitivas de paso de mensajes
- Memoria compartida (construida por software sobre paso de mensajes)
􀂃 Complejidad:
- En general no hay mecanismos sencillos de comunicación global (broadcast)
- En general no hay mecanismos de sincronización global (no hay dispositivos físicamente compartidos: reloj, memoria, etc).
- Es necesario el empleo de mecanismos distribuidos de gestión de recursos: complejos, aparecen interbloqueos, bajo rendimiento.


4.4.- Sistemas operativos en red
􀂃 Se construyen sobre redes de ordenadores heterogéneas sin la pretensión de ofrecer una imagen única de sistema operativo.
􀂃 Cada ordenador cuenta con un sistema operativo ompleto.
􀂃 Los diferentes ordenadores, se conectan en red y sobre la red se apoyan una serie de servicios.
􀂃 Claramente más sencillos que los sistemas operativos distribuidos, donde se penaliza la transparencia.
􀂃 Una de las pocas ventajas de estos sistemas es la facilidad para añadir o eliminar nodos sin afectar al resto.


4.5.- Middleware
􀂃 Se pretende tener la escalabilidad y la flexibilidad de los sistemas operativos en red y la transparencia y facilidad de uso de los sistemas operativos distribuidos.
􀂃 Se construye una capa de software sobre un sistema operativo en red al que llamaremos middleware.
􀂃 Objetivo: ocultar la heterogeneidad de los sistemas operativos en red.
􀂃 Algunas características:
- Cada S.O. no tiene porqué conocer sobre la existencia de los demás nodos.
- El S.O. de cada nodo no tiene porqué ser el mismo.
- Los servicios se distribuyen de forma transparente sobre los diferentes nodos.

􀂃 Motivación: Integrar aplicaciones basadas en red es complejo.
- Diferentes departamentos usan diferentes sistemas operativos en red.
- Interoperabilidad sólo aparece a nivel de servicios muy básicos de los sistemas operativos en red.
- Necesidad de servicios federados:
􀂃 Combinar diferentes bases de datos, pero ofreciendo la imagen de una base de datos única.
􀂃 Servicios de Internet comunes a toda una organización, apoyándose sobre sistemas de información existentes.
􀂃 Permitir transacciones que abarquen diferentes bases de datos.
􀂃 Requerimiento: mantener los sistemas operativos actuales.


Servicios del middleware
􀂃 Servicios de comunicación: pasar de comunicación basada en sockets a:
- RPC (Llamadas a procedimiento remoto)
- ROMI (Invocaciones a objetos remotos)
- Sistemas de notificación de eventos
- Sistemas de ‘streams’ o colas avanzados.
􀂃 Servicios para sistemas información: servicios que permiten gestionar datos de manera distribuida:
- Servicios de nombres distribuidos
- Servicios de directorio y búsqueda distribuidos
- Servicios de seguimiento de recursos móviles
- Servicios de persistencia, caching y replicación de datos
􀂃 Servicios de control: servicios que permiten controlar a las aplicaciones cómo, cuándo y dónde acceden a los datos:
- Servicios de transacciones distribuidas
- Servicios de migración de código
􀂃 Servicios de seguridad:
- Servicios de autenticación y autorización
- Servicios de cifrado
- Servicios de auditoría


5.1.- Modelo básico cliente/servidor
Características:
􀂃 Hay procesos que ofrecen servicios
􀂃 Hay procesos que usan servicios
􀂃 Los clientes y los servidores pueden estar distribuidos en diferentes máquinas.
􀂃 El mecanismo general de comunicación consiste en:
- Cliente envía petición y espera respuesta.
- Servidor recibe petición, procesa y contesta con respuesta.


􀂃 Los servidores: en general proporcionan servicios relacionados con algún recurso compartido:
- Servidores para sistemas de ficheros, bases de datos, etc.
- Servidores para documentos compartidos, entrelazados entre ellos (Web, Lotus Notes, …)
- Servidores de aplicaciones compartidas
- Servidores de objetos compartidos
􀂃 Los clientes: permiten el acceso a los servicios remotos:
- La interfaz de programación transforma peticiones locales al cliente en peticiones y espera de respuestas del servidor.
- Dispositivos sencillos (lectores de códigos de barras, teléfonos móviles, etc)
- Ordenadores que proporcionan interfaces de usuario específicas para cada servicio.
- Ordenadores que proporcionan interfaces de usuario para combinar el acceso a diferentes servicios. 


5.2.- Descomposición de aplicaciones en capas
􀂃 La descomposición tradicional en tres capas:
- La capa de interfaz de usuario, contiene las componentes que forman las interfaces de usuario
de las aplicaciones.
- La capa de procesamiento (lógica de negocio), contiene las reglas de funcionamiento de la
aplicación, sin integrar datos concretos.
- La capa de datos, contiene los datos que los clientes manipulan mediante las demás componentes de la aplicación.


5.3.- Arquitecturas cliente/servidor
􀂃 Una sola capa: por ejemplo un terminal de líneas que interactúa con un ‘mainframe’.
􀂃 Dos capas: Cliente/Servidor.
􀂃 Tres o más capas: cada capa en una máquina diferente. Muchas veces se pueden redefinir
como otras arquitecturas:
- Sistemas de agentes cooperantes


5.3.1.- Arquitecturas alternativas
􀂃 La organización en capas se orienta a plantear una distribución horizontal de los servicios: cada unidad funcional es físicamente distribuida.
􀂃 Otra organización alternativa plantea la distribución vertical: cada cliente o cada servidor puede dividirse en partes lógicamente equivalentes, pero cada parte funcionando en un nodo distinto.
- Si se dividen horizontalmente los servidores: sistemas replicados
- Si se dividen verticalmente los clientes: sistemas peer-to-peer



































1 comentario:

  1. Me encanto! muy resumido en todo y hablando de los conceptos principales e importantes

    ResponderEliminar