Para ver los posts anteriores:
Desafíos y Objetivos
Apertura
Un sistema distribuido es abierto cuando ofrece extensibilidad y mantenibilidad mediante la adhesión a estándares que describen la sintaxis y semántica de los servicios que ofrece.
Escalabilidad
Un sistema distribuido es escalable cuando ofrece capacidad de crecimiento en términos de cantidad y tipo de recursos que administra y cantidad usuarios que lo acceden.
Accesibilidad
Un sistema distribuido es accesible cuando garantiza el acceso a los recursos distribuidos que lo componen a todos los usuarios y en todo momento.
Transparencia
Un sistema distribuido es transparente en la medida que oculta su heterogeneidad y su distribución a los usuarios, quienes conservan la visión de un sistema único.
Como consecuencia de perseguir estos objetivos, los sistemas distribuidos se enfrentan a los siguientes desafios:
Concurrencia
Los recursos de un sistema distribuido se caracterizan por estar expuestos al acceso concurrente de uno o mas usuarios, debiendo ser capaz de planificar los accesos evitando deadlocks.
Seguridad
Ademas de garantizar la seguridad a nivel de transporte de datos, debido al alto grado de promiscuidad de la red como medio de comunicación, un sistema distribuido debe abordar la seguridad en términos de autenticación de usuarios, permisos de acceso sobre los recursos y auditoria del uso de los mismos.
Heterogeneidad
Un sistema distribuido es heterogéneo en cuanto es capaz de permitir que los usuarios accedan a servicios y ejecuten aplicaciones bajo cualquier plataforma (esto es diferentes redes, hardware, sistemas operativos y lenguajes de programación)
Modelos de Distribución
Los modelos de distribución pueden responder a aspectos arquitectónicos como a aspectos fundamentales o semánticos. El modelo arquitectónico de un sistema distribuido determina su estructura en función de
cada una de sus componentes por separado. El modelo fundamental o semántico revela los problemas claves a los que se enfrenta un
desarrollador en un sistema distribuido y que condiciona la metodología de trabajo para alcanzar sistemas confiables en términos de seguridad, correctitud y fiabilidad.
Arquitecturas y Modelo Arquitectónico
La arquitectura de un sistema distribuido define la estructura completa de un sistema según sus componentes específicos, determinado el rol y funciones que cumple cada componente, la ubicación dentro de la red y la interrelación entre las componentes lo que determina su rol o interfaz de comunicación.
En cuanto a las funciones de las componentes, se definen como procesos servidores (atienden requerimientos solicitados por otros procesos), procesos clientes (inician la comunicación, solicitan el requerimiento y esperan la respuesta) y procesos pares (procesos que cooperan y comunican simétricamente para realizar una tarea).
Esta visión de componentes amerita considerar una estructura de software expresada por niveles de servicio y que facilitan la interacción en una misma computadora o en varias de ellas.

La plataforma esta conformada por el software y hardware de bajo nivel que establece el en- torno de ejecución de cada componente, sin dicho entorno, no es viable ejecutar aplicaciones siendo esto valido tanto para componentes distribuidas como para componentes que se ejecutan en un sistema único.
El middleware es el nivel de software que otorga abstracción al programador y a las aplicaciones así como también enmascara la heterogeneidad de la plataforma subyacente. El lenguaje RPC, las invocaciones basadas en SQL y los protocolos para invocacion de Web Services, constituyen ejemplos de middleware que retomaremos en próximos capítulos. El modelo arquitectónico en un sistema distribuido, simplifica y abstrae las funciones de cada componente dándoles una ubicación y una interrelación entre ellas.
Modelo Cliente/Servidor
El modelo cliente/servidor cuenta con procesos que ofrecen servicios (servidores) y procesos que utilizan o consumen dichos servicios (clientes). Se valen de un mecanismo de comunicación basado en pregunta-respuesta, siendo siempre el cliente quien inicia dicha comunicación.
Los servicios pueden ser implementados por varios procesos en diferentes computadoras que los alojan (host). Esto significa que tanto servidores como clientes pueden residir en diferentes maquinas, siendo el mecanismo de comunicación lo que pone en evidencia la distribución.
Este mecanismo de comunicación conforma una tercer componente o middleware, que establece la manera en que los procesos (tanto clientes como servidores) van a interactuar, de- terminado si la comunicación sera sincronica o asincronica.

Modelo Peer-to-peer
En este modelo todos los procesos juegan roles similares considerándose pares (o peers) sin distinción entre clientes y servidores. El modelo adhiere claramente a un esquema descentralizado pero el mecanismo de comunicación no establece jerarquía, por lo que el código del proceso en cada nodo debe mantener la consistencia de los recursos y sincronizar las acciones de la aplicación.

Arquitecturas de Software
Los diferentes modelos arquitectónicos se fundamentan en la arquitectura de software subyacente que determina la organización lógica (no física) de los componentes entre varias maquinas.
Estas arquitecturas pensadas como:
- Modelo en capas usado por sistemas cliente-servidor
- Modelo basado en objetos usado en sistemas de objetos distribuidos

Establecen un mecanismo de comunicación sincrónico siendo el sistema distribuido altamente acoplado en el tiempo.
Esto significa que las componentes del sistema distribuido deben estar presentes y activas para que el sistema pueda funcionar.
En el caso del modelo de capas determina un flujo de comunicación dentro de cada componente que deberá recorrer el camino inverso cuando llegue a destino y ademas el destino debe estar disponible.
El modelo de objetos distribuidos, por su parte, sigue el paradigma de la orientación a objetos donde cada objeto posee un estado interno y un comportamiento que sera puesto en ejecución ante la llegada de un mensaje que lo requiera. En este caso no hay niveles o capas pero si se requiere la disponibilidad del objeto que recibe el mensaje y de la computadora que lo contiene.
Por otra parte, se presentan dos modelos desacoplados en espacio y tiempo como lo son:
- Publicar/Suscribir
- Espacio de datos compartido

El modelo de publicación/suscripción no requiere sincronismo (coincidencia en el tiempo) debido a que las componentes publican sus funcionalidades en un bus de eventos que se ocupa de dar respuesta a las componentes que se suscriben a cada una de las funcionalidades publicadas. Tampoco se requiere acoplamiento en espacio, dado que las componentes como el bus de eventos mismo pueden estar distribuidos en la red. Por su parte, el modelo de espacio de datos compartido permite que la comunicación entre las componentes se encuentre absolutamente desacoplada en el tiempo y favorece el acceso a los datos usando una descripción mas que una referencia explicita.

