Sie sind auf Seite 1von 80

Aplicaciones Distribuidas

Por: Ing. Kelly Vizconde Basado en el trabajo de

Sorey Bibiana Garca Zapata

Sobre mi
Una frase para empezar

El conocimiento esta condicionado por la experiencia


Me s algunas, me gusta compartir las que me s, las que no s, me gusta aprenderlas, recibo todo tipo de aportes y correcciones Y pues lo que no sepamos, lo averiguamos.

Sobre el curso
Este curso esta enfocado a dar las nociones principales alrededor del desarrollo de aplicaciones distribuidas, reconociendo las tecnologas relacionadas a cada una de las partes fundamentales de estas y por supuesto las consideraciones asociadas a su desarrollo.

Importante!
...desarrollar software, no es programar
este curso requiere conocer claramente esa diferencia!

El desarrollo de software incluye todas las disciplinas asociadas a la ingeniera de software desde el anlisis hasta la puesta en produccin
el desarrollo de aplicaciones distribuidas sugiere por tanto consideraciones durante la ejecucin de todo el ciclo de vida

Recomendacin!
Si a este momento, no reconoce conceptos como, ingeniera de software u orientacin a objetos, inicie con el aprendizaje de estos antes de profundizar tcnicamente en la distribucin de aplicaciones.
Ahora si, comencemos

Que es una

aplicacin distribuida?

Es una aplicacin con distintos componentes


que se ejecutan en entornos separados, normalmente en diferentes plataformas conectadas a travs de una red
Wikipedia

Se entendi?
Veamos que tanto

Cuales son los componentes que se distribuyen? Que criterios se usan para determinar que conforma un componente?

A travs de que mecanismos se realiza la comunicacin entre componentes distribuidos? Que es un componente?

Que debera saberse y/o tenerse en cuenta para desarrollar una aplicacin distribuida?

Cliente/Servidor
Webservices

Protocolos

Despliegue
Servicios Objetos

Comunicacin

UML
Interfaces

Niveles

Algunos Conceptos
Interoperabilidad

Comunicacin

Arquitectura
Acceso a Datos
Paquetes

Lgica de Negocio

Interfaz de Usuario

Componentes

Capas
Calidades Sistmicas

Vamos por partes

A que se refiere la distribucin?

Las distribucin refiere a la construccin de software por partes, a las cuales les son asignadas un conjunto especfico de responsabilidades dentro de un sistema.

Esta distribucin como bien enunciaba la definicin formal, habla de que las partes o componentes se encuentran en entornos separados, sin embargo, lo que tiene implcito esta definicin, es que para realizar esta separacin fsica primero debe tenerse clara la separacin lgica de las partes de una aplicacin, esto quiere decir que programticamente existe una forma de separar o agrupar los componentes.

La separacin fsica no es en todas las ocasiones maquinas diferentes de acuerdo a arquitectura tambien puede ser la ubicacin de un conjunto de funcionalidades en archivos, rutas o montadas sobre tcnologas diferentes dentro de la misma mquina

Ahora bien, cuando hablemos de distribucin lgica lo entenderemos como separacin por Capas (tiers) y cuando hablemos de distribucin fsica usaremos el trmino separacin en Niveles (layers)

La separacin por capas y niveles hace parte de la arquitectura del sistema y es definida por el arquitecto de la aplicacin.
una situacin evidente si conocemos la ingeniera de software Nuestra tarea en este curso est en familiarizarnos con este tipo de tareas.

Ambos tipos de distribucin se hacen con base en las necesidades tcnicas, de diseo y/o de negocio
esas necesidades son las que aprenderemos a identificar en este curso.

La separacin en niveles tiene una serie de consideraciones de tipo tcnico y tambin econmico, a las que nos referiremos mas adelante, por ahora lo concebiremos de forma bsica, como separacin fsica de los componentes.
Sin embargo de las capas, tenemos ms que decir

Las capas dentro de una arquitectura son un conjunto de servicios especializados que pueden ser accesibles por mltiples clientes y que deben ser fcilmente reutilizables.

Las capas adems, segn el escenario y tipo de aplicacin, estn separadas fsicamente.

Si, fsicamente! Lo que significa que una capa puede ser a su vez un nivel

Una capa puede contener muchos componentes, un mismo componente puede ubicarse en varias capas de acuerdo a su naturaleza y a las consideraciones explicitas de la arquitectura
como? No hay problema, lo iremos entendiendo, de eso se trata

bueno y a todo esto

Qu es un componente?

Veamos una definicin formal...

Un componente es un elemento de software que encapsula una serie de funcionalidades. Un componente es una unidad independiente, que puede ser utilizado en conjunto con otros componentes para formar un sistema ms complejo.

Cada componente de un sistema puede verse como un paquete o mdulo

Un componente esta compuesto por elementos que pueden ser clases y/o recursos complementarios como archivos de configuracin, imgenes, entre otros. Y a su vez esas clases y recursos pueden estn agrupados dentro del componente en subpaquetes, de acuerdo a su naturaleza o necesidades de negocio.

En este punto visualizamos varios conceptos que podemos presentar de la siguiente forma
Aplicacin Niveles Capas Componentes Paquetes Clases

Otros Recursos

Sub paquetes

Hablar de clases en este punto, nos hace recordar que debemos hacer un recuento nuestros conocimientos sobre programacin orientada a objetos, ya que la construccin de componentes esta basada es los mismos principios y/o caractersticas con las que cumple este conocido paradigma

Recordemos lo ms bsico Los principios que dirigen la orientacin a objetos son

la modularidad y la reusabilidad
Qu son?

En trminos simples la modularidad significa trabajar por partes


(de hecho, tal cual como lo plantea el desarrollo por componentes)

Y la reusabilidad significa

No se invente la rueda!

Lo que ya esta hecho es para usarse y algunas de las cosas que no estn hechas, deben construirse pensando en que alguien necesitar usarlo alguna vez

Veamos, que tanto recordamos

Que es una clase? Que es un objeto? Que es un mensaje?

Que son atributos, caractersticas o propiedades?


Que son mtodos, procedimientos , funciones o servicios? Que significa que un objeto esta compuesto por una interfaz, una implementacin y un estado?

Despus de este repaso avancemos un poco ms

Que es abstraccin, encapsulamiento, polimorfismo, herencia?


Si en este punto se encuentra un poco confundido, recuerde mi consejo, no profundice ms hasta no entender claramente los conceptos mencionados

Los componentes igual que los objetos deben cumplir con dos caractersticas importantes la alta cohesin y el bajo acoplamiento
que tan claros son?.

Cuando decimos que un componente tiene una alta cohesin hablamos de que todos los elementos dentro de el estn estrechamente relacionados
el criterio de relacin debe ser de negocio o tcnico y no subjetivo

Cuando decimos que un componente tiene una bajo acoplamiento hablamos del nivel de independencia que tiene un componente con respecto a otros
esta independencia se refiere al grado en que un componente puede funcionar sin recurrir a otros y se refiere a relaciones de acoplamiento diferentes a la funcional o arquitectnica

Tener estas dos metas en mente durante la construccin de componentes, ahorrar trabajo y tiempos de desarrollo a los equipos y proyectos
si reconocemos el valor de la ingeniera de software, entenderemos lo que esto significa

Los componentes desarrollados satisfacen una necesidad asociada a una o varias partes de una aplicacin, y son separados de acuerdo a su uso o a por una agrupacin lgica que determina la relacin entre ellos.

Ahora bien

El paradigma bsico de la separacin por capas establece al menos 3 partes distintas dentro de una aplicacin

La Presentacin La Lgica de Negocio El Acceso a Datos y los Datos

Veamos entonces que significan cada una de estas partes

La Presentacin o interfaz de usuario se refiere al mecanismo de interaccin del usuario con el sistema
Los tipos de interfaces de software ms comunes son las aplicaciones de ventanas y web Los tipos de interfaces de hardware ms comunes son el ratn, el teclado, el micrfono, pantallas tctiles, dispositivos de audio

La Lgica de Negocio refiere el conjunto de reglas que determinan especficamente como funciona un sistema, segn su naturaleza, y bajo que parmetros y condiciones de acuerdo a las necesidades de los clientes y usuarios.

El acceso a datos refiere al medio a travs del cual podemos acceder y manipular los datos persistentes de un sistema El almacenamiento de datos refiere a la forma en que se encuentran guardados dichos datos, por ejemplo, en archivos o bases de datos.

Despus de conocer estos conceptos bsicos, podemos pasar entonces a ver, los diferentes tipos de aplicacin

Aplicaciones Monolticas Aplicaciones Cliente/Servidor Aplicaciones de 3 Capas Aplicaciones de N Capas


veamos unas definiciones bsica sobre estas

Una aplicacin monoltica o de una capa es aquella cuya interfaz, lgica de negocio y acceso a datos se encuentran mezclados o altamente acoplados, esto dificulta que pueda hacerse una separacin lgica y fsica donde alguna de las partes pueda ser reutilizable.

Una aplicacin Cliente/Servidor o aplicacin de dos capas es aquella donde los datos y la lgica de negocio se encuentran separados de la interfaz, este tipo de aplicacin tambin es denominada, cliente liviano.

Otro escenario vlido para una aplicacin Cliente/Servidor, se da separando los datos de la interfaz y la lgica de negocio, este tipo de aplicacin tambin es denominado, cliente pesado.

Una aplicacin 3 capas es aquella donde la interfaz, la lgica de negocio, el acceso a datos y los datos se encuentran separados.

Es muy importante entender, que la separacin de la que se habla no es necesariamente fsica, como ya se haba dicho antes, la primera separacin que se da es lgica y debemos reiterar que la separacin lgica es programtica.

Es muy tentador para los desarrolladores mezclar una o ms capas; por ejemplo implementando alguna validacin u otro proceso de negocios dentro de la capa de presentacin en vez de en la capa de lgica de negocio, .

Sin embargo ubicar la lgica de programacin en las capas adecuadas, es ms un comportamiento que debera ser inherente al trabajo como programador, obviamente uno que este interesado en hacer su trabajo, bien hecho.
Los problemas que conllevan la mala separacin de la lgica de programacin, no son inmediatos, sus efectos se vern muy seguramente en el transcurso de la evolucin de las aplicaciones.

Y pues para hacer un trabajo bien hecho, hay que reconocer que las consideraciones asociadas al desarrollo por capas
Veamos cada una de ellas y enumeremos algunas consideraciones iniciales

Que consideraciones deberamos tener en cuenta cuando pensamos en la Capa de Presentacin?

Y las consideraciones de la Capa de Lgica de Negocios?

Solo por mencionar los ms populares

Es mucho ms que una cuestin de gusto, hay que pensar en los costos, la productividad, portabilidad e interoperabilidad entre muchos otros factores

Y las consideraciones de la Capa de Acceso a Datos?

Nuevamente solo por mencionar los ms usados

Bueno y si ya estn separadas las 3 capas principales, que es entonces una de aplicacin de N capas?

Pues bien, la evolucin de la tecnologa y las redes de comunicaciones, hacen que cada da se generen nuevos escenarios de intercambio de informacin entre empresas, y entre los mismos sistemas existentes dentro de las empresas, de forma que se satisfagan las necesidades constantes y cambiantes de clientes y usuarios, para quienes debe resultar transparente el obtener informacin de un sistema u otro.

Otra de las razones importantes por las que surge este concepto, es debido a que en la evolucin del desarrollo de software, se ha identificado la necesidad de crear nuevas capas, especializadas en funciones especificas, diferentes a las 3 identificadas previamente. Tal es el caso de la seguridad, el control de excepciones, el transporte de datos entre capas, la generacin de trazas de errores, entre otros.

Este por ejemplo es la propuesta de Microsoft para una aplicacin distribuida y que como vemos tiene ms de 3 capas
Sin estrs, no hemos pasado de la tierra al cielo, con el tiempo iremos entendiendo que significa todo esto

Ya que hemos hecho nfasis en el significado del desarrollo o distribucin de la lgica de programacin y recursos del sistema por capas, continuemos hablando de los componentes.

ahora bien

Hay componentes de diferentes tipos


Ejecutables, Pginas Web, Libreras, Controles, Procedimientos Almacenados, Servicios Web

Los ejecutables refieren programas o aplicaciones de escritorio que corren sobre un sistema operativo

Una pagina web es una fuente de informacin adaptada para la World Wide Web (WWW), que es accesible mediante un navegador de Internet y normalmente forma parte de un sitio web.
Wikipedia

Las libreras refieren bibliotecas o conjunto de clases que contienen lgica de programacin implementada como servicios que pueden ser utilizados desde otras libreras o aplicaciones

Los controles refieren libreras de tipo grafico que pueden ser usada en la construccin de interfaces de usuario.

Un servicio web (en ingls Web service) es un conjunto de protocolos y estndares que sirven para intercambiar datos entre aplicaciones
Wikipedia
Suena complicado verdad? no hay problema, este tema lo ampliaremos ms adelante!

Lo que debemos saber inicialmente sobre los servicios web es que actualmente son la forma mas popular de comunicacin entre niveles, que si recordamos, refiere a entornos separados e incluso de tecnologas diferentes.

Tratemos de simplificar lo que acabamos de leer

Generalmente las aplicaciones exponen a los usuarios una interfaz grfica que permite interactuar con los datos de un negocio. Los servicios web son un tipo de aplicacin que permite exponer servicios (mtodos, procedimientos) existentes en clases o libreras clases, a travs de los cuales se accede a la lgica de negocio que ofrece un sistema, este es el mecanismo ms comnmente utilizado actualmente para compartir informacin entre empresas.

Estos son los conceptos inciales, entenderlos y apropiarse de su manejo nos garantizar entender su detalle y los temas que vienen ms adelante, pero antes de terminar veamos una aclaracin

Importante!
No es lo mismo hablar de una aplicacin distribuida y un sistema distribuido

Un sistema distribuido se define como:

Una coleccin de computadores separados fsicamente y conectados entre s por una red de comunicaciones distribuida; cada mquina posee sus componentes de hardware y software que
el usuario percibe como un
Wikipedia

solo sistema

Es el caso del conocido buscador de Google, el cual funciona utilizando una red de computadores que realizan simultneamente las bsquedas solicitadas por un usuario, sin que el usuario perciba siquiera que esto esta sucediendo. Una razn importante para la existencia de los sistemas distribuidos tiene que ver con la limitacin de recursos del hardware.

A pesar de actualmente contamos con altos niveles de procesamiento en el hardware disponible, estos niveles son limitados en recursos, es decir en capacidad de procesamiento, memoria, ancho de banda, entre otros criterios. Esta situacin hace que los arquitectos de software, tengan que implementar estrategias en donde mas de un servidor atiende las solicitudes de los sistemas que tienen por ejemplo muchos usuarios accediendo de forma concurrente al mismo sistema.

Un aplicacin distribuida puede requerir ser implementada como un sistema distribuido, sin embargo esta condicin no es indispensable, puesto que est determinada por necesidades especficas para tipos de aplicaciones y/o escenarios en los que priman principalmente factores como la

escalabilidad horizontal y el desempeo


estas ultimas refieren calidades sistmicas, temas que veremos ms adelante

Nos vemos en la prxima! Ciao

Das könnte Ihnen auch gefallen