lunes, 12 de mayo de 2014

Introducción

   La computación desde sus inicios ha sufrido muchos cambios, desde los grandes ordenadores que permitían realizar tareas en forma limitada y de uso un tanto exclusivo de organizaciones muy selectas, hasta los actuales ordenadores ya sean personales o portátiles que tienen las mismas e incluso mayores capacidades que los primeros y que están cada vez más introducidos en el quehacer cotidiano de una persona.
Los mayores cambios se atribuyen principalmente a dos causas, que se dieron desde las décadas de los setenta:
1. El desarrollo de los microprocesadores, que permitieron reducir en tamaño y costo a los ordenadores y aumentar en gran medida las capacidades de los mismos y su acceso a más personas.
2. El desarrollo de las redes de área local y de las comunicaciones que permitieron conectar ordenadores con posibilidad de transferencia de datos a alta velocidad.
Es en este contexto que aparece el concepto de "Sistemas Distribuidos" que se ha popularizado tanto en la actualidad y que tiene como ámbito de estudio las redes como por ejemplo: Internet, redes de teléfonos móviles, redes corporativas, redes de empresas, etc.
En consecuencia, el presente trabajo que lleva el título de "Sistemas Distribuidos", tiene como principal objetivo: "describir panorámicamente los aspectos relevantes que están involucrados en los Sistemas Distribuidos".
Para lograr el objetivo planteado se ha estructurado el trabajo de la siguiente manera:
1. Introducción.- Donde especificamos el preámbulo del tema, el objetivo del trabajo y el contenido del mismo.
2. Desarrollo.- Donde se describen los aspectos involucrados en los sistemas distribuidos.
3. Referencias.- Donde especificamos las fuentes que fueron consultadas para el presente estudio.








 AMANECER DE LA RED 1

 

Definicion de los Sistemas Distribuidos


Sistemas Operativos Distribuidos

Los sistemas operativos distribuidos desempeñan las mismas funciones que un sistema operativo normal, pero con la diferencia de trabajar en un entorno distribuido. Su Misión principal consiste en facilitar el acceso y la gestión de los recursos distribuidos en la red.
En un sistema operativo distribuido los usuarios pueden acceder a recursos remotos de la misma manera en que lo hacen para los recursos locales. Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores esté en un equipo o en diferentes, lo cual es transparente para el usuario.
Los sistemas distribuidos deben de ser muy confiables y estables ya que si un componente del sistema se descompone otro componente debe de ser capaz de reemplazarlo inmediatamente y no afectar los procesos del sistema.
Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.



Características básicas

Los sistemas operativos distribuidos están basados en las ideas básicas:
• Transparencia
• Eficiencia
• Flexibilidad
• Escalabilidad.

Existen dos esquemas básicos: Los Fuertemente Acoplados y los débiles. Un sistema fuertemente acoplado es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.


Transparencia

El concepto de transparencia de un Sistema operativo distribuido va ligado a la idea de que todo el sistema funcione de forma similar en todos los puntos de la red, debido a esto queda como labor del sistema operativo coordinar el mecanismo que logre la unificación de todos los sistemas y recursos totalmente transparente para el usuario o aplicación.
El que el sistema disponga de varios procesadores debe lograr un mayor rendimiento del sistema, pero el sistema operativo debe controlar que tanto los usuarios como los programadores vean el núcleo del sistema distribuido como un único procesador, Es decir que la programación y la ejecución de los programas y tareas sean exactamente iguales que las de los sistemas operativos normales en aspectos visuales y de programación, pero mas rápidos y eficientes por la distribución de la tareas.


Eficiencia

La idea base de los sistemas operativos distribuido es la de obtener sistemas mucho mas rápidos que los utilizados de procesador único, Y para lograr esto tenemos que olvidar la idea antigua de ejecutar los programas en estos procesadores y pensar en distribuir las tareas a los procesadores libres mas rápidos en cada momento.
El concepto global de que un procesador haga todas las tareas y la desarrolle rápido depende de muchos factores concretos: Velocidad, Memoria y tipo de procesamiento, Pero para un sistema operativo distribuido esto es mucho mas fácil y eficiente, solo buscara un procesador mas rápido y mas libre para que desarrolle las tareas y hará un display de los resultados obtenidos.


Flexibilidad

La Flexibilidad dentro de sistema operativo distribuido, describe su capacidad para soportar cambios, actualizaciones y mejoras que le permitan irse desarrollando al mismo ritmo de la evolución tecnológica.
Dicha capacidad es una virtud y un conflicto. Una Virtud debido a las grandes necesidades de los sistemas operativos de mejorar después de las primeras versiones y un conflicto que surge entre los sistemas de con Núcleo Monolítico y los sistemas con Micro núcleo las cuales son dos arquitecturas distintas del núcleo del sistema operativo.


Escalabilidad

Los sistemas distribuidos operan de manera efectiva y eficiente a muchas escalas diferentes. La escala más pequeña consiste en dos estaciones de trabajo y un servidor de ficheros, mientras que un sistema distribuido construido alrededor de una red de área local simple podría contener varios cientos de estaciones de trabajo, varios servidores de ficheros, servidores de impresión y otros servidores de propósito especifico. 





Ventajas

Procesadores más poderosos y a menos costos.
*Desarrollo de Estaciones con más capacidades
*Las estaciones satisfacen las necesidades de los usuarios.
*Uso de nuevas interfaces

Avances en la Tecnología de Comunicaciones.
*Disponibilidad de elementos de Comunicación.
*Desarrollo de nuevas técnicas.

Compartición de Recursos.
*Dispositivos (Hardware).
*Programas (Software).

Eficiencia y Flexibilidad.
*Respuesta Rápida.
*Ejecución Concurrente de procesos (En varias computadoras).

*Empleo de técnicas de procesamiento distribuido

Disponibilidad y Confiabilidad.
*Sistema poco propenso a fallas (Si un componente no afecta a la disponibilidad del sistema).
*Mayores servicios que elevan la funcionalidad ( Monitoreo, Telecontrol, Correo Eléctrico, Etc.).

Crecimiento Modular.
*Es inherente al crecimiento.
*Inclusión rápida de nuevos recursos.
*Los recursos actuales no afectan.

Desventajas

*Requerimientos de mayores controles de procesamiento.

*Velocidad de propagación de información ( Muy lenta a veces).

*Servicios de replicación de datos y servicios con posibilidades de fallas.

*Mayores controles de acceso y proceso ( Commit ).

*Administración más compleja.

*Costos.


Características Principales de los Sistemas Distribuidos


Compartición de Recursos

El término 'recurso' es bastante abstracto, pero es el que mejor caracteriza el abanico de entidades que pueden compartirse en un sistema distribuido. El abanico se extiende desde componentes hardware como discos e impresoras hasta elementos software como ficheros, ventanas, bases de datos y otros objetos de datos.

La idea de compartición de recursos no es nueva ni aparece en el marco de los sistemas distribuidos. Los sistemas multiusuario clásicos desde siempre han provisto compartición de recursos entre sus usuarios. Sin embargo, los recursos de una computadora multiusuario se comparten de manera natural entre todos sus usuarios. Por el contrario, los usuarios de estaciones de trabajo monousuario o computadoras personales dentro de un sistema distribuido no obtienen automáticamente los beneficios de la compartición de recursos.

Los recursos en un sistema distribuido están físicamente encapsulados en una de las computadoras y sólo pueden ser accedidos por otras computadoras mediante las comunicaciones (la red). Para que la compartición de recursos sea efectiva, ésta debe ser manejada por un programa que ofrezca un interfaz de comunicación permitiendo que el recurso sea accedido, manipulado y actualizado de una manera fiable y consistente. Surge el término genérico de gestor de recursos.

Un gestor de recursos es un modulo software que maneja un conjunto de recursos de un tipo en particular. Cada tipo de recurso requiere algunas políticas y métodos específicos junto con requisitos comunes para todos ellos. Éstos incluyen la provisión de un esquema de nombres para cada clase de recurso, permitir que los recursos individuales sean accedidos desde cualquier localización; la traslación de nombre de recurso a direcciones de comunicación y la coordinación de los accesos concurrentes que cambian el estado de los recursos compartidos para mantener la consistencia.

Un sistema distribuido puede verse de manera abstracta como un conjunto de gestores de recursos y un conjunto de programas que usan los recursos. Los usuarios de los recursos se comunican con los gestores de los recursos para acceder a los recursos compartidos del sistema. Esta perspectiva nos lleva a dos modelos de sistemas distribuidos: el modelo cliente-servidor y el modelo basado en objetos.


Apertura (opennesss)

Un sistema informático es abierto si el sistema puede ser extendido de diversas maneras. Un sistema puede ser abierto o cerrado con respecto a extensiones hardware (añadir periféricos, memoria o interfaces de comunicación, etc... ) o con respecto a las extensiones software ( añadir características al sistema operativo, protocolos de comunicación y servicios de compartición de recursos, etc... ). La apertura de los sistemas distribuidos se determina primariamente por el grado hacia el que nuevos servicios de compartición de recursos se pueden añadir sin perjudicar ni duplicar a los ya existentes.

Básicamente los sistemas distribuidos cumplen una serie de características:

Los interfaces software clave del sistema están claramente especificados y se ponen a disposición de los desarrolladores. En una palabra, los interfaces se hacen públicos.
Los sistema distribuidos abiertos se basan en la provisión de un mecanismo uniforme de comunicación entre procesos e interfaces publicados para acceder a recursos compartidos.
Los sistema distribuidos abiertos pueden construirse a partir de hardware y software heterogéneo, posiblemente proveniente de vendedores diferentes. Pero la conformidad de cada componente con el estándar publicado debe ser cuidadosamente comprobada y certificada si se quiere evitar tener problemas de integración.


Concurrencia

Cuando existen varios procesos en una única maquina decimos que se están ejecutando concurrentemente. Si el ordenador esta equipado con un único procesador central, la concurrencia tiene lugar entrelazando la ejecución de los distintos procesos. Si la computadora tiene N procesadores, entonces se pueden estar ejecutando estrictamente a la vez hasta N procesos.
En los sistemas distribuidos hay muchas maquinas, cada una con uno o mas procesadores centrales. Es decir, si hay M ordenadores en un sistema distribuido con un procesador central cada una entonces hasta M procesos estar ejecutándose en paralelo.
En un sistema distribuido que esta basado en el modelo de compartición de recursos, la posibilidad de ejecución paralela ocurre por dos razones:
Muchos usuarios interactuan simultáneamente con programas de aplicación.
Muchos procesos servidores se ejecutan concurrentemente, cada uno respondiendo a diferentes peticiones de los procesos clientes.

El caso (1) es menos conflictivo, ya que normalmente las aplicaciones de interacción se ejecutan aisladamente en la estación de trabajo del usuario y no entran en conflicto con las aplicaciones ejecutadas en las estaciones de trabajo de otros usuarios.

El caso (2) surge debido a la existencia de uno o mas procesos servidores para cada tipo de recurso. Estos procesos se ejecutan en distintas maquinas, de manera que se están ejecutando en paralelo diversos servidores, junto con diversos programas de aplicación. Las peticiones para acceder a los recursos de un servidor dado pueden ser encoladas en el servidor y ser procesadas secuencialmente o bien pueden ser procesadas varias concurrentemente por múltiples instancias del proceso gestor de recursos. Cuando esto ocurre los procesos servidores deben sincronizar sus acciones para asegurarse de que no existen conflictos. La sincronización debe ser cuidadosamente planeada para asegurar que no se pierden los beneficios de la concurrencia.


Escalabilidad

Los sistemas distribuidos operan de manera efectiva y eficiente a muchas escalas diferentes. La escala más pequeña consiste en dos estaciones de trabajo y un servidor de ficheros, mientras que un sistema distribuido construido alrededor de una red de área local simple podría contener varios cientos de estaciones de trabajo, varios servidores de ficheros, servidores de impresión y otros servidores de propósito especifico. A menudo se conectan varias redes de área local para formar internetworks, y éstas podrían contener muchos miles de ordenadores que forman un único sistema distribuido, permitiendo que los recursos sean compartidos entre todos ellos.

Tanto el software de sistema como el de aplicación no deberían cambiar cuando la escala del sistema se incrementa. La necesidad de escalabilidad no es solo un problema de prestaciones de red o de hardware, sino que esta íntimamente ligada con todos los aspectos del diseño de los sistemas distribuidos. El diseño del sistema debe reconocer explícitamente la necesidad de escalabilidad o de lo contrario aparecerán serias limitaciones.

La demanda de escalabilidad en los sistemas distribuidos ha conducido a una filosofía de diseño en que cualquier recurso simple -hardware o software- puede extenderse para proporcionar servicio a tantos usuarios como se quiera. Esto es, si la demanda de un recurso crece, debería ser posible extender el sistema para darla servicio,. Por ejemplo, la frecuencia con la que se accede a los ficheros crece cuando se incrementa el numero de usuarios y estaciones de trabajo en un sistema distribuido. Entonces, debe ser posible añadir ordenadores servidores para evitar el cuello de botella que se produciría si un solo servidor de ficheros tuviera que manejar todas las peticiones de acceso a los ficheros. En este caso el sistema deberá estar diseñado de manera que permita trabajar con ficheros replicados en distintos servidores, con las consideraciones de consistencias que ello conlleva.

Cuando el tamaño y complejidad de las redes de ordenadores crece, es un objetivo primordial diseñar software de sistema distribuido que seguirá siendo eficiente y útil con esas nuevas configuraciones de la red. Resumiendo, el trabajo necesario para procesar una petición simple para acceder a un recurso compartido debería ser prácticamente independiente del tamaño de la red. Las técnicas necesarias para conseguir estos objetivos incluyen el uso de datos replicados, la técnica asociada de caching, y el uso de múltiples servidores para manejar ciertas tareas, aprovechando la concurrencia para permitir una mayor productividad.


Tolerancia a Fallos

Los sistemas informáticos a veces fallan. Cuando se producen fallos en el software o en el hardware, los programas podrían producir resultados incorrectos o podrían pararse antes de terminar la computación que estaban realizando. El diseño de sistemas tolerantes a fallos se basa en dos cuestiones, complementarias entre sí: Redundancia hardware (uso de componentes redundantes) y recuperación del software (diseño de programas que sean capaces de recuperarse de los fallos).

En los sistemas distribuidos la redundancia puede plantearse en un grano mas fino que el hardware, pueden replicarse los servidores individuales que son esenciales para la operación continuada de aplicaciones criticas.

La recuperación del software tiene relación con el diseño de software que sea capaz de recuperar (roll-back) el estado de los datos permanentes antes de que se produjera el fallo.

Los sistemas distribuidos también proveen un alto grado de disponibilidad en la vertiente de fallos hardware. La disponibilidad de un sistema es una medida de la proporción de tiempo que esta disponible para su uso. Un fallo simple en una maquina multiuruario resulta en la no disponibilidad del sistema para todos los usuarios. Cuando uno de los componentes de un sistema distribuidos falla, solo se ve afectado el trabajo que estaba realizando el componente averiado. Un usuario podría desplazarse a otra estación de trabajo; un proceso servidor podría ejecutarse en otra maquina.


Transparencia

La transparencia se define como la ocultación al usuario y al programador de aplicaciones de la separación de los componentes de un sistema distribuido, de manera que el sistema se percibe como un todo, en vez de una colección de componentes independientes. La transparencia ejerce una gran influencia en el diseño del software de sistema.

El manual de referencia RM-ODP [ISO 1996a] identifica ocho formas de transparencia. Estas proveen un resumen útil de la motivación y metas de los sistemas distribuidos. Las transparencias definidas son:

Transparencia de Acceso : Permite el acceso a los objetos de información remotos de la misma forma que a los objetos de información locales.


Transparencia de Localización: Permite el acceso a los objetos de información sin conocimiento de su localización.

Transparencia de Concurrencia: Permite que varios procesos operen concurrentemente utilizando objetos de información compartidos y de forma que no exista interferencia entre ellos.

Transparencia de Replicación: Permite utilizar múltiples instancias de los objetos de información para incrementar la fiabilidad y las prestaciones sin que los usuarios o los programas de aplicación tengan por que conoces la existencia de las replicas.

Transparencia de Fallos: Permite a los usuarios y programas de aplicación completar sus tareas a pesar de la ocurrencia de fallos en el hardware o en el software.

Transparencia de Migración: Permite el movimiento de objetos de información dentro de un sistema sin afectar a los usuarios o a los programas de aplicación.

Transparencia de Prestaciones: Permite que el sistema sea reconfigurado para mejorar las prestaciones mientras la carga varia.

Transparencia de Escalado: Permite la expansión del sistema y de las aplicaciones sin cambiar la estructura del sistema o los algoritmos de la aplicación.

Las dos mas importantes son las transparencias de acceso y de localización; su presencia o ausencia afecta fuertemente a la utilización de los recursos distribuidos. A menudo se las denomina a ambas transparencias de red. La transparencia de red provee un grado similar de anonimato en los recursos al que se encuentra en los sistemas centralizados.


Categorías de los sistemas Distribuidos

Modelo de Minicomputadoras.
Varias computadoras que soportan diferentes usuarios cada una y provee acceso a recursos remotos.
Por lo menos un usuario por cada computadora ( CPU < Usuarios ).

Modelo de Estación de Trabajo.
Varias estaciones (Por lo general cientos), donde cada usuario cuenta con una estación de trabajo (ET) y realiza en ella todo su trabajo. Requiere de un Sistema Operativo que soporte funciones de acceso y control remoto.
Un microprocesador por cada usuario ( CPU = Usuarios).
Las estaciones de trabajo cuentan con Interfaces Gráficas, CPU potentes y Memorias propias.

Modelo microprocesadores en Pooling.
Trata de utilizar uno o más microprocesadores dependiendo de las necesidades de los usuarios.
Primero los procesadores completan su tarea y posteriormente regresan a esperar una nueva asignación.
El número de microprocesadores normalmente es mayor a uno por usuario ( CPU > Usuarios).



Concepto de Software


El software es un ingrediente indispensable para el funcionamiento del computador. Está formado por una serie de instrucciones y datos, que permiten aprovechar todos los recursos que el computador tiene, de manera que pueda resolver gran cantidad de problemas. Un computador en si, es sólo un conglomerado de componentes electrónicos; el software le da vida al computador, haciendo que sus componentes funcionen de forma ordenada.

El software es un conjunto de instrucciones detalladas que controlan la operación de un sistema computacional.




Funciones del software:



Administrar los recursos de computacionales

Proporcionar las herramientas para optimizar estos recursos.

Actuar como intermediario entre el usuario y la información almacenada.


 Sistemas operativos de red

Al igual que un equipo no puede trabajar sin un sistema operativo, una red de ordenadores no puede funcionar sin un sistema operativo de red que permita compartir los recursos, la información y las funciones de los equipos de la red. Según el tipo de sistema operativo de red, éste puede añadirse al propio sistema operativo del equipo (por ejmplo, Netware de Novell) o integrarse con él (por ejemplo, Windows NT y Apple Talk). La configuración más adecuada será la que mejor se adapte a las necesidades y funciones de la red.

Las funciones principales de un sistema operativo de red son:

Conectar los equipos, periféricos y demás dispositivos de la red.
Coordinar las funciones de estos elementos.
Controlar el acceso a los datos y a los elementos.



Libros 

Cliente Servidor

MODELO CLIENTE SERVIDOR


«Es un modelo para construir sistemas de información, que se sustenta en la idea de repartir el tratamiento de la información y los datos por todo el sistema informático, permitiendo mejorar el rendimiento del sistema global de información»


 En términos de arquitectura.
Los distintos aspectos que caracterizan a una aplicación (proceso, almacenamiento, control y operaciones de entrada y salida de datos) en el sentido más amplio, están situados en más de un computador, los cuales se encuentran interconectados mediante una red de comunicaciones

Es la tecnología que proporciona al usuario final el acceso transparente a las aplicaciones, datos, servicios de cómputo o cualquier otro recurso del grupo de trabajo y/o, a través de la organización, en múltiples plataformas. El modelo soporta un medio ambiente distribuido en el cual los requerimientos de servicio hechos por estaciones de trabajo inteligentes o "clientes'', resultan en un trabajo realizado por otros computadores llamados servidores".

Que es un Cliente.
 Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de los datos o de las aplicaciones es totalmente transparente para el cliente.
Que es un Servidor.
 Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente. Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs, para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión, acceso a bases de datos, fax, procesamiento de imágenes, etc.
Que es una Arquitectura.
 Una arquitectura es un entramado de componentes funcionales que aprovechando diferentes estándares, convenciones, reglas y procesos, permite integrar una amplia gama de productos y servicios informáticos, de manera que pueden ser utilizados eficazmente dentro de la organización.

Debemos señalar que para seleccionar el modelo de una arquitectura, hay que partir del contexto tecnológico y organizativo del momento y, que la arquitectura Cliente/Servidor requiere una determinada especialización de cada uno de los diferentes componentes que la integran.



Modelo en Tres Capas (Three-Tier Model)

Con la arquitectura cliente/servidor en tres capas (three-tier) añadimos una nueva capa entre el cliente y el servidor donde se implementa la lógica de la aplicación. De esta forma el cliente es básicamente una interface, que no tiene por qué cambiar si cambian las especificaciones de la base de datos o de la aplicación; queda aislado completamente del acceso a los datos.
Así un applet de Java se carga en el navegador del cliente y se comunica con un servlet que corre en la máquina servidor; o bien accedemos a la base de datos a través de un formulario HTML. El servlet establece una conexión a la base de datos mediante JDBC.
En este caso se tiene total libertad para escoger dónde se coloca la lógica de la aplicación: en el cliente, en el servidor de base de datos, o en otro(s) servidor(es). También se tiene total libertad para la elección del lenguaje a utilizar.
Se utiliza un lenguaje de tipo general (probablemente C) por lo que no existen restricciones de funcionalidad.
Los programas serán óptimos desde el punto de vista de la performance.
También deberá implementarse especialmente el Call remoto, lo que seguramente se hará de una forma más libre que los Remote Procedure Call actualmente disponibles.
No existe compromiso alguno con el uso de lenguajes propietarios, por lo que las aplicaciones serán totalmente portables sin cambio alguno.
Puede determinarse en qué servidor(es) se quiere hacer funcionar estos procedimientos. En aplicaciones críticas se pueden agregar tantos servidores de aplicación como sean necesarios, de forma simple, y sin comprometer en absoluto la integridad de la base de datos, obteniéndose una escalabilidad muy grande sin necesidad de tocar el servidor de dicha base de datos.
El problema de esta arquitectura es ¿cómo se implementa?. Parece ilusorio tratar de programar manualmente estos procedimientos, mientras que, si se dispone de una herramienta que lo hace automáticamente, presenta ventajas claras sobre la alternativa anterior:

Como se podría esperar cada uno de los componentes de la aplicación en una arquitectura three-tier se separa en una sola entidad. Esto te permite implementar componentes de una manera más flexible. Algo que no creo que sorprenda es la afirmación de que este tipo de arquitectura es la más compleja.




  • 1.- El cliente no tiene que tener drivers ODBCni la problemática consiguiente de instalación de los drivers por tanto se reduce el costo de mantener las aplicaciones cliente
  • 2.- El Cliente y el Gestor de Reglas de negocio tienen que hablar el mismo lenguaje (en nuestro caso COM)
  • 3.- El Gestor de Reglas de Negocio y el Servidor de Datos tienen que hablar el mismo lenguaje (en nuestro caso ODBC)

Evolución del modelo Cliente Servidor

·        Mono-capa
·        Data Base Server – Computación centralizada
·        Two-Tier – Proceso de transacciones
·        Multi-tier Client/Server
·        Three-tier
·        Multi-tier
·        N-tier


Aplicaciones mono-capa


Entendemos por aplicaciones mono-capa, aquellas que tanto la propia aplicación como los datos que maneja se encuentran en la misma máquina y son administradas por la misma herramienta: podríamos decir que son una sola entidad


Modelo En Dos Capas (Two-Tier Model)

En una arquitectura cliente/servidor clásica tenemos dos "capas" (two-tier):
o        Una donde está el cliente que implementa la interface.
Otra donde se encuentra el gestor de bases de datos que trata las peticiones recibidas desde el cliente.
La lógica de la aplicación se encuentra por tanto repartida entre el cliente y servidor.
Un ejemplo de esta configuración podría ser un applet Java que se carga en el navegador del cliente y trabaja directamente con la base de datos mediante JDBC.

En esta Arquitectura todas las peticiones de los clientes se controlan en la capa correspondiente a la lógica del negocio. Cuando el cliente necesita hacer una petición se la hace a la capa en la que se encuentra la lógica del negocio. Esto es bastante importante pues eso quiere decir que:
Lo ideal sería que el Gestor de Reglas de Negocio no sólo OLE y ODBC sino otros estandares como DBLib, OLI, DRDA, SQL/API y X/Open

Arquitectura de N Tier


Windows DNA distribuye una aplicación entre varias capas llamadas niveles. Aunque los niveles algunas veces residen físicamente en máquinas diferentes, Windows® DNA enfatiza la distribución lógica. Mientras que los nombres de estos niveles difieren de acuerdo a la fuente, la Guía del Desarrollador de BackOffice® (BackOffice® Developer's Guide, BDG) se refiere a ellos como sigue:

Servicios de usuario.
Servicios de negocios.
Servicios de datos.




Este diagrama muestra como varias aplicaciones y tecnologías de Microsoft son implementadas en la arquitectura N niveles. Al leer la BDG, Usted verá como estos niveles trabajan juntos para proporcionar la funcionalidad, estabilidad y escalabilidad que las aplicaciones empresariales requieren. Como lo indica el diagrama, Windows DNA sintetiza en las aplicaciones un conjunto común de servicios, incluyendo HTML y HTML dinámico (DHTML), controles ActiveX®, componentes del Modelo de Objeto Componente (COM), scripts en el lado cliente y en el lado servidor, transacciones, seguridad y servicios de directorio, acceso a datos y a bases de datos, administración de sistemas y ambientes de creación de componentes. Estos servicios son expuestos de manera unificada a través del COM, el cual permite que las aplicaciones interoperen y compartan componentes.
Las principales ventajas del desarrollo en N niveles son respecto a la escalabilidad. Las aplicaciones que procesan su lógica de negocios, ya sea en las máquinas cliente o en las bases de datos, se vuelven lentas cuando están siendo muy utilizadas. Esto se ha convertido en algo muy importante en esta era donde las aplicaciones de Web pueden ser utilizadas millones de veces por día. La transición para el desarrollo N niveles no es gratis, el tiempo de desarrollo se incrementó debido a la complejidad de añadir otro nivel. Afortunadamente, el middleware, tal como el MTS, fue desarrollado para manejar automáticamente los detalles de la infraestructura de aplicación, tal como el manejo de procesos alternos y los detalles de COM.


Libros Relacionados
books.google.co.ve/books?isbn=9702605776
books.google.co.ve/books?isbn=8484297934
books.google.co.ve/books?isbn=8484542068

Bases de Datos Distribuidas


Una Base de Datos Distribuida (BDD) es una colección de datos distribuidos en diferentes nodos de una red de computadoras. Cada sitio de la red es autónomo, puede ejecutar aplicaciones locales y al menos una aplicación global, lo cual requiere el acceso a datos, ubicados en varios sitios, usando un subsistema de comunicación [Ceri, 1984]. Para el diseño de BDDs se han definido dos grandes estrategias [Ceri, 1987]: el enfoque Top-Down y el Bottom-Up. En el enfoque Top-Down se comienza diseñando el esquema global, luego se concibe la fragmentación de la BD y la localización de los fragmentos en los sitios. Se completa ejecutando, en cada sitio, el diseño físico de los datos. Por otro lado el enfoque Bottom-Upse basa en la integración de esquemas ya creados en un esquema global a partir de las BD existentes.

Los Sistemas de Bases de Datos Distribuidas representan más naturalmente la estructura geográficamente descentralizada de una organización, aumentan la disponibilidad de los datos, reducen el tráfico de comunicación y es justificable, además, por el abaratamiento de los costos en el equipamiento y la infraestructura de comunicaciones de las redes de computadoras. El diseño de las Bases de Datos Distribuidas posee las fases del diseño centralizado y cuenta, además, con dos nuevos problemas que caracterizan el proceso de distribución de datos, e incluyen la determinación de: cómo dividir la base de datos en componentes para localizarlos en diferentes sitios, qué cantidad de datos debe ser replicados y cómo deben los fragmentos replicados ser localizados.
Existen varias definiciones sobre qué es un sistema distribuido pero hay divergencias entre ellas, para nuestros propósitos es suficiente expresar que un sistema distribuido es una colección de computadoras independientes interconectadas entre sí que aparecen ante los usuarios del sistema como una única computadora [Özsu, 1991].


Ventajas y Desventajas de las bases de datos distibuidas sistemas distribuidos



Ventajas



El acceso a los datos es más rápido debido a que los datos se localizan más cercanos al lugar donde se utilizan.

El procesamiento es rápido debido a que varios nodos intervienen en el procesamiento de una carga de trabajo,
Nuevos nodos se pueden agregar fácil y rápidamente.
La probabilidad de que una falla en un solo nodo afecte al sistema es baja y existe una autonomía e independencia entre los nodos.
Control local de los datos con que se interactúa.
Mayor tolerancia a los fallos


Desventajas



Es más complicado el control y la manipulación de los datos

Es compleja el aseguramiento de la integridad de la información en presencia de fallas no predecibles tanto de componentes de hardware como de software. La integridad se refiere a la consistencia, validez y exactitud de la información.
El control de concurrencia y los mecanismos de recuperación son mucho más complejos que en un sistema centralizado dado que los datos pueden estar replicados.
La distribución de la BD requiere determinar la fragmentación y la localización. La fragmentación es el proceso de dividir una relación en pequeñas porciones llamadas fragmentos [Meghini, 1991]. Las razones principales para la fragmentación son el incremento del nivel de concurrencia y el desempeño del sistema. Existen dos alternativas para fragmentar datos: fragmentación horizontal (FH) y fragmentación vertical (FV). La combinación de las anteriores resulta en una fragmentación híbrida. Es importante seguir tres reglas, las cuales aseguran que la BD no tenga cambios semánticos durante la fragmentación: completitud, reconstrucción y disjuntura.









Libros Relacionados
books.google.co.ve/books?isbn=9684444192
books.google.co.ve/books?isbn=9706862862

Sistemas Operativos Distribuidos



Sistemas Operativos Distribuidos

Un sistema operativo distribuido es la unión lógica de un grupo de sistemas operativos sobre una colección de nodos computacionales independientes, conectados en red, comunicándose y físicamente separados.  Cada nodo contiene de forma individual un subconjunto específico de los programas que componen el sistema operativo distribuido. Cada subconjunto es una combinación de dos proveedores de servicios distintos. El primero es un núcleo ubicuo mínimo o micro núcleo, que controla el hardware del nodo. El segundo es una colección de componente de administración del sistema de alto nivel que coordinan las actividades individuales y colaborativas del nodo. Estas componentes son una abstracción de las funciones del micro núcleo y dan soporte a las aplicaciones de usuario. 
El micro núcleo y las componentes de administración trabajan en conjunto. Ambos dan soporte al objetivo del sistema el cual es integrar múltiples recursos y capacidad de procesamiento en un sistema eficiente y estable. Esta integración sin fisuras de nodos individuales en un sistema global es conocido como transparencia, o sistema de imagen única; haciendo referencia a la ilusión que se le brinda a los usuarios de que el sistema global luce como una entidad computacional única.

Características básicas

Los sistemas operativos distribuidos están basados en las ideas básicas:
• Transparencia
• Eficiencia
• Flexibilidad
• Escalabilidad
Existen dos esquemas básicos: Los Fuertemente Acoplados y los débiles. Un sistema fuertemente acoplado es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

Transparencia

El concepto de transparencia de un Sistema operativo distribuido va ligado a la idea de que todo el sistema funcione de forma similar en todos los puntos de la red, debido a esto queda como labor del sistema operativo coordinar el mecanismo que logre la unificación de todos los sistemas y recursos totalmente transparente para el usuario o aplicación.

El que el sistema disponga de varios procesadores debe lograr un mayor rendimiento del sistema, pero el sistema operativo debe controlar que tanto los usuarios como los programadores vean el núcleo del sistema distribuido como un único procesador, Es decir que la programación y la ejecución de los programas y tareas sean exactamente iguales que las de los sistemas operativos normales en aspectos visuales y de programación, pero mas rápidos y eficientes por la distribución de la tareas.

Eficiencia

La idea base de los sistemas operativos distribuido es la de obtener sistemas mucho mas rápidos que los utilizados de procesador único, Y para lograr esto tenemos que olvidar la idea antigua de ejecutar los programas en estos procesadores y pensar en distribuir las tareas a los procesadores libres mas rápidos en cada momento.
El concepto global de que un procesador haga todas las tareas y la desarrolle rápido depende de muchos factores concretos: Velocidad, Memoria y tipo de procesamiento, Pero para un sistema operativo distribuido esto es mucho mas fácil y eficiente, solo buscara un procesador mas rápido y mas libre para que desarrolle las tareas y hará un display de los resultados obtenidos

Escalabilidad

Un sistema operativo distribuido debería funcionar tanto para una docena de computadoras como para mil en una sola red, el tipo de red utilizada no debe de ser un problema ni su topología (LAN o WAN) (TOKEN RING o ETHERNET) y mucho menos la distancia entre los equipos. Sin embargo todo esto influye, Aunque estos puntos serian muy deseables, pude que la solución valida para unas cuantas computadoras no sean aplicables como para mil. Del mismo modo el tipo de red condiciona grandemente el rendimiento del sistema y puede que lo funcione para un tipo de red requiera modificaciones para otro.

Los sistemas operativos distribuidos necesitan de grandes estándares para trabajar y sobre todo de ajustes a las necesidades principales de cada red y sus usuarios. Este concepto propone que cualquier computador debe funcionar perfectamente como un sistema operativo distribuido, pero de la misma forma debe de formar parte y trabajar como más equipos no importan la cantidad o los recursos que estos le puedan proporcionar.

Flexibilidad

La Flexibilidad dentro de sistema operativo distribuido, describe su capacidad para soportar cambios, actualizaciones y mejoras que le permitan irse desarrollando al mismo ritmo de la evolución tecnológica.
Dicha capacidad es una virtud y un conflicto. Una Virtud debido a las grandes necesidades de los sistemas operativos de mejorar después de las primeras versiones y un conflicto que surge entre los sistemas de con Núcleo Monolítico y los sistemas con Micro núcleo las cuales son dos arquitecturas distintas del núcleo del sistema operativo.

Sistema Operativo Distribuido vs Sistema Distribuido.
Existe una diferencia vital entre los sistemas operativos distribuidos y los sistemas distribuidos. Podríamos llamar a un Sistema Distribuido una capacidad del Sistema operativo Distribuido, es decir: Un sistema distribuido es la relación que existe entre una computadora independiente y un servidor de archivos o dispositivos compartidos. Cada computadora ejecuta sus programas en su memoria propia haciendo uso de su único microprocesador y memoria, este no comparte memoria ni asigna tareas a otros procesadores de la red.
Sin embargo, un Sistema operativo distribuido tiene acceso a todos los dispositivos compartidos de la red incluyendo procesadores y memoria RAM.

Libros Relacionado
books.google.co.ve/books?isbn=8497325478
books.google.co.ve/books?isbn=9688806277

Memoria Distribuida

Memoria Compartida Distribuida

Los sistemas de memoria compartida distribuida (DSM) representan la creación hibrida de dos tipos de computación paralelos: la memoria distribuida en sistemas multiprocesador y los sistemas distribuidos. Ellos proveen la abstracción de memoria compartida en sistemas con memorias distribuidas físicamente y consecuentemente combinan las mejores características de ambos enfoques. Debido a esto, el concepto de memoria compartida distribuida es reconocido como uno de los enfoques mas atractivos para la creación de sistemas escalables, de alto rendimiento de sistemas multiprocesador.

La memoria compartida distribuida (DSM) es una abstracción utilizada para compartir datos entre computadores que no comparten memoria física. Los procesos acceden a DSM para leer y actuali­zar, dentro de sus espacios de direcciones, sobre lo que aparenta ser la memoria interna normal asignada a un proceso. Sin embargo, existe un sistema subyacente en tiempo de ejecución que asegura de forma transparente que procesos diferentes ejecutándose en computadores diferentes observen las actualizaciones realizadas entre ellas. Es como si 1os procesos accedieran a una única me­moria compartida, pero de hecho la memoria física está distribuida

La principal característica de DSM es que ahorra al programador todo lo concerniente al paso de mensajes al escribir sus aplicaciones, cuestión que en otro sistema debería tenerse muy presente. DSM es fundamentalmente una herramienta para aplicaciones paralelas o para aplicaciones o gru­pos de aplicaciones distribuidas en las que se puede acceder directamente a datos individuales que ellas comparten. En general, DSM es menos apropiado para sistemas cliente-servidor, ya que los clientes ven al servidor como un gestor de recursos en forma de datos abstractos que se acceden a través de peticiones (por razones de modularidad y protección). Sin embargo, los servidores pue­den proporcionar DSM compartido entre los clientes. Por ejemplo, los archivos plasmados en me­moria (memory mapped) que son compartidos y sobre los que se gestiona un cierto grado de con­sistencia son una forma de DSM

MODELOS DE CONSISTENCIA

La duplicidad de los bloques compartidos aumenta el rendimiento, pero produce un problema de consistencia entre las diferentes copias de la página en caso de una escritura. Si con cada escritura es necesario actualizar todas las copias, el envío de las páginas por la red provoca que el tiempo de espera aumente demasiado, convirtiendo este método en impracticable. Para solucionar este problema se proponen diferentes modelos de consistencia, que establezcan.

Nombramos algunos modelos de consistencia, del más fuerte al más débil: consistencia estricta, secuencial, causal, PRAM, del procesador, débil, de liberación y de entrada

ESTRICTA, CASUAL, SECUENCIAL, DEBIL, DE LIBERACION Y DE ENTRADA.

CONSISTENCIA CASUAL: La condición a cumplir para que unos datos sean causalmente consistentes es:
• Escrituras que están potencialmente relacionadas en forma causal deben ser vistas por todos los procesos en el mismo orden.
• Escrituras concurrentes pueden ser vistas en un orden diferente sobre diferentes máquinas.

Es permitida con un almacenamiento causalmente consistente, pero no con un almacenamiento secuencialmente consistente o con un almacenamiento consistente en forma estricta.

CONSISTENCIA SECUENCIAL: La consistencia secuencial es una forma ligeramente más débil de la consistencia estricta. Satisface la siguiente condición:

El resultado de una ejecución es el mismo si las operaciones (lectura y escritura) de todos los procesos sobre el dato fueron ejecutadas en algún orden secuencial
a) Un dato almacenado secuencialmente consistente.
b) Un dato almacenado que no es secuencialmente consistente.
CONSISTENCIA DÉBIL: Los accesos a variables de sincronización asociadas con los datos almacenados son secuencialmente consistentes.

Propiedades.
No se permite operación sobre una variable de sincronización hasta que todas las escrituras previas de hayan completado.

 No se permiten operaciones de escritura o lectura sobre  datos hasta que no se hayan completado operaciones previas sobre variables de sincronización.

CONSISTENCIA DE LIBERACIÓN  Se basa en el supuesto de que los accesos a variables compartidas se protegen en secciones críticas empleando primitivas de sincronización, como por ejemplo locks. En tal caso, todo acceso esta precedido por una operación adquiere y seguido por una operación release. Es responsabilidad del programador que esta propiedad se cumpla en todos los programas.


 Memoria Compartida Distribuida con base en páginas.

     El esquema de DSM propone un espacio de direcciones de memoria virtual que integra la memoria de todas las computadoras del sistema, y su uso se realiza mediante paginación. Las páginas quedan restringidas a estar necesariamente en un único nodo. Cuando un programa intenta acceder a una posición virtual de memoria, se comprueba si esa página se encuentra de forma local. Si no se encuentra, se provoca un fallo de página, y el sistema operativo solicita la página al resto de nodos. El sistema funciona de forma análoga al sistema de memoria virtual tradicional, pero en este caso los fallos de página se propagan al resto de ordenadores, hasta que la petición llega al nodo que tiene la página virtual solicitada en su memoria local. A primera vista este sistema parece más eficiente que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de páginas excesivo.

 Memoria Compartida Distribuida con Variables.

Un método más estructurado que la DSM con base a páginas consiste en compartir sólo ciertas variables y estructuras de datos necesarias para más de un proceso. Ahora el problema pasa a ser la forma de mantener una base de datos distribuida, en potencia duplicada, consistente en las variables compartidas.


Uno de los aspectos más importantes a tratar de estos sistemas es el de si las variables compartidas deben o no duplicarse, y de qué manera, parcial o total. Si se duplicasen existiría más potencial que en un sistema DSM basado en páginas, en términos de actualización, dado que las escrituras en las variables compartidas individuales se pueden aislar. Dos de los ejemplos más interesantes de este tipo de sistemas son el Munin y el Midway; el primero se basa en una implantación software de la consistencia de liberación, y el segundo consiste en compartir las estructuras de datos individuales, permitiendo que los programas multiprocesador existentes y los nuevos se ejecuten de manera eficiente en las multicomputadores, con ligeros cambios de código.

 Memoria Compartida Distribuida basada en objetos.

     Una alternativa al uso de páginas es tomar el objeto como base de la transferencia de memoria. Aunque el control de la memoria resulta más complejo, el resultado es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden integrar limpiamente. Otra de las restricciones de este modelo es que todos los accesos a los objetos compartidos han de realizarse mediante llamadas a los métodos de los objetos, con lo que no se admiten programas no modulares y se consideran incompatibles.

 Casos de estudio.

La memoria compartida distribuida se implementa utilizando uno de los siguientes métodos o bien una combinación de ellos, hardware especializado, memoria virtual paginada convencional o middleware:
Hardware: las arquitecturas multiprocesador de memoria compartida basadas en una arquitec­tura NUMA (por ejemplo, Dash [Lenoski y otros 1992] y PLUS [Bisiani y Ravishankar 1990] se basan en hardware especializado para proporcionar a los procesadores una visión consistente de la memoria compartida. Gestionan las instrucciones de acceso a memoria LOAD y STORE de forma que se comuniquen con la memoria remota y los módulos de caché según sea necesa­rio para almacenar y obtener datos. Esta comunicación se realiza sobre sistemas de intercone­xión de alta velocidad similares a una red. El prototipo del multiprocesador Dash tiene 64 no­dos; conectados mediante una arquitectura NUMA.
Memoria virtual paginada: muchos sistemas, incluyendo Ivy [Li y Hudak 1989], Munin [Carter y otros 1991], Mirage [Fleisch y Popek 1989], Clouds [Dasgupta y otros 1991], Choices [Sane y otros 1990], COOL (Lea y otros 1993] y Mether [Minnich y Farber 1989], implementan DSM como una región de memoria virtual que ocupa el mismo rango de direcciones en el espacio de direcciones de cada proceso participante. Este tipo de implementación normalmente sólo es factible sobre una colección de computadores homogéneos con formatos de datos y de paginación comunes.


LINK
tesis.ula.ve/postgrado/tde_busca/processaArquivo.php?codArquivo...