Está en la página 1de 81

Aplicaciones Distribuidas

Por:
Sorey Bibiana García 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
tecnologías 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 ingeniería de software

desde el análisis hasta la puesta en producción

… el desarrollo de aplicaciones distribuidas sugiere por tanto


consideraciones durante la ejecución de todo el ciclo de vida…
Recomendación!

Si a este momento, no reconoce conceptos como,


ingeniería de software u orientación a objetos,
inicie con el aprendizaje de estos antes de
profundizar técnicamente en la distribución de
aplicaciones.

Ahora si, comencemos…


Que es una aplicación distribuida?
Es una aplicación con distintos componentes
que se ejecutan en entornos separados,
normalmente en diferentes plataformas conectadas
a través 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 través de que mecanismos se realiza la


comunicación entre componentes distribuidos?

Que es un componente?
Que debería saberse y/o tenerse en
cuenta para desarrollar una aplicación
distribuida?
Protocolos
Cliente/Servidor
Comunicación
Webservices Despliegue

Servicios Objetos
UML
Interfaces
Niveles
Algunos Conceptos…
Comunicación
Interoperabilidad
Arquitectura Lógica de Negocio

Acceso a Datos Interfaz de Usuario


Paquetes
Capas
Componentes Calidades Sistémicas
Vamos por partes…

A que se refiere la distribución?


Las distribución refiere a la construcción
de software por partes, a las cuales les son
asignadas una serie de responsabilidades
dentro de un sistema.
Esta distribución como bien enunciaba la definición
formal, habla de que las partes o componentes se
encuentran en máquinas diferentes, sin embargo, lo
que tiene implícito esta definición, es que para
realizar esta separación física primero debe tenerse
clara la separación lógica de las partes de una
aplicación, esto quiere decir que programáticamente
existe una forma de separar o agrupar los
componentes.
Ahora bien, cuando hablemos de distribución
lógica lo entenderemos como separación por
“Capas” (tiers) y cuando hablemos de
distribución física usaremos el término
separación en “Niveles” (layers)
La separación por capas y niveles hace
parte de la arquitectura del sistema y es
definida por el arquitecto de la aplicación.
… una situación evidente si conocemos la ingeniera de software…
Ambos tipos de distribución se
hacen con base en las necesidades
técnicas, de diseño y/o de negocio

… identificar correctamente estas necesidades necesita de habilidades,


conocimiento y experiencia, sin embargo desde algún lugar hay que comenzar.
La separación en niveles tiene una serie de
consideraciones de tipo técnico y también
económico, a las que nos referiremos mas
adelante, por ahora lo concebiremos de forma
básica, como separación física de los
componentes.
Sin embargo de las capas, tenemos más que decir…
“Las capas dentro de una arquitectura son
un conjunto de servicios especializados que
pueden ser accesibles por múltiples clientes y
que deben ser fácilmente reutilizables.”
Las capas además, según el escenario y
tipo de aplicación, están separadas
físicamente.

Si, físicamente! 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 definición 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 más complejo.
Cada componente de un sistema puede
verse como un paquete o módulo
Un componente esta compuesto por
elementos que pueden ser clases y/o
recursos complementarios como archivos
de configuración, imágenes, entre otros.
En este punto visualizamos varios conceptos que podemos
presentar de la siguiente forma…

Aplicación

Niveles

Capas

Componentes

Clases
Otros
Recursos
Hablar de clases en este punto, nos hace
recordar que debemos hacer un recuento de
nuestros conocimientos sobre programación
orientada a objetos, ya que la construcción
de componentes esta basada en los mismos
principios y/o características con las que
cumple este conocido paradigma
Recordemos lo más básico…
Los principios que dirigen la orientación a objetos son…

… la modularidad y la reusabilidad
Qué son?
En términos 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 están 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, características o propiedades?

Que son métodos, procedimientos , funciones o


servicios?

Que significa que un objeto esta compuesto por una


interfaz, una implementación y un estado?
… recordamos algo sobre…

Que es abstracción, encapsulamiento,


polimorfismo, herencia?
Si en este punto se encuentra un poco confundido, recuerde mi
consejo, no profundice más hasta no entender claramente los
conceptos mencionados
Los componentes igual que los objetos deben
cumplir con dos características importantes la
alta cohesión y el bajo acoplamiento

… que tan claros los tenemos?….


Cuando decimos que un componente
tiene una alta cohesión hablamos de
que todos los elementos dentro de el
están estrechamente relacionados
… el criterio de relación debe ser de negocio o técnico 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 arquitectónica…
Tener estas dos metas en mente durante la
construcción de componentes, ahorrará
trabajo y tiempos de desarrollo a los equipos
y proyectos!
… si reconocemos el valor de la ingeniería de software,
entenderemos lo que esto significa…
Los componentes desarrollados satisfacen una
necesidad asociada a una o varias partes de
una aplicación, y son separados de acuerdo a
su uso o a por una agrupación lógica que
determina la relación entre ellos.
Ahora bien…

El paradigma básico de la separación por


capas establece al menos 3 partes distintas
dentro de una aplicación

La Presentación
La Lógica de Negocio
El Acceso y Almacenamiento de Datos
Veamos entonces que significan
cada una de estas partes…
La Presentación o interfaz de usuario se
refiere al mecanismo de interacción del
usuario con el sistema

Los tipos de interfaces de software más comunes


son las aplicaciones de ventanas y web

Los tipos de interfaces de hardware más comunes


son las pantallas, el ratón, el teclado, el micrófono,
pantallas táctiles, dispositivos de audio…
La Lógica de Negocio refiere el conjunto de
reglas que determinan específicamente como
funciona un sistema, según su naturaleza, y
bajo que parámetros y condiciones de
acuerdo a las necesidades de los clientes y
usuarios.
El acceso a datos refiere al medio a través 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.
Después de conocer estos conceptos, podemos
pasar entonces a ver, los diferentes tipos de
aplicación básicos

Aplicaciones Monolíticas
Aplicaciones Cliente/Servidor
Aplicaciones de 3 Capas
Aplicaciones de N Capas
…veamos unas definiciones sobre estas
Una aplicación monolítica o de una capa es
aquella cuya interfaz, lógica de negocio y acceso a
datos se encuentran mezclados o altamente
acoplados, esto dificulta que pueda hacerse una
separación lógica y física donde alguna de las partes
pueda ser reutilizable.
Una aplicación Cliente/Servidor o aplicación
de dos capas es aquella donde los datos y la
lógica de negocio se encuentran separados de
la interfaz, este tipo de aplicación también es
denominada, cliente liviano.
Otro escenario válido para una aplicación
Cliente/Servidor, se da separando los datos de
la interfaz y la lógica de negocio, este tipo de
aplicación también es denominado, cliente
pesado.
Una aplicación 3 capas es aquella donde
la interfaz, la lógica de negocio, el acceso
a datos y los datos se encuentran
separados.
Es muy importante entender, que la
separación de la que se habla no es
necesariamente física, como ya se había
dicho antes, la primera separación que se da
es lógica y debemos reiterar que la
separación lógica es programática.
Pero es bastante común encontrar en la literatura que no se separan
explícitamente los conceptos de niveles y capas…

y generalmente se habla solo de capas.


Sin embargo, si nosotros lo tenemos claro, podemos
entender por ejemplo que pueda darse un escenario
en el cual una aplicación es monolítica (físicamente)
y ser una aplicación de 3 capas (logicamente).

Es el caso de algunos juegos, procesadores de texto


o utilitarios que tenemos en nuestros computadores
personales, los cuales pueden estar bien
estructurados lógicamente, sin embargo
físicamente se encuentran ubicados en una sola
máquina.
Por el contrario puede pasar que un aplicación este
distribuida físicamente, pero que malas practicas
de programación hagan que su presentación, reglas
de negocio y acceso a datos, no estén lógicamente
distribuidas de forma correcta.
“Es muy tentador para los desarrolladores mezclar
una o más capas; por ejemplo implementando
alguna validación u otro proceso de negocios dentro
de la capa de presentación en vez de en la capa de
lógica de negocio, ….”
Sin embargo ubicar la lógica de programación en las
capas adecuadas, es más un comportamiento que
debería ser inherente al trabajo como programador,
obviamente uno que este interesado en hacer su
trabajo, bien hecho.

Los problemas que conllevan la mala separación de


la lógica de programación, no son inmediatos, sus
efectos se verán muy seguramente en el transcurso
de la evolución y mantenimiento 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 principales…
Que consideraciones deberíamos
tener en cuenta cuando pensamos
en la Capa de Presentación?
Y las consideraciones de la
Capa de Lógica de Negocios?
Solo por mencionar los más
populares…

Es mucho más que una cuestión 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
más usados…
Bueno y si ya están separadas las 3
capas principales, que es entonces una
de aplicación de N capas?
Pues bien, la evolución de la tecnología y las redes
de comunicaciones, hacen que cada día se generen
nuevos escenarios de intercambio de información
entre empresas, y entre sistemas existentes dentro
de las empresas, de forma que se satisfagan las
necesidades constantes y cambiantes de clientes y
usuarios, para quienes debería resultar
transparente el obtener información de un sistema
u otro.
Otra de las razones importantes por las que surge
este concepto, es debido a que en la evolución del
desarrollo de software, se ha identificado la
necesidad de crear nuevas capas, especializadas en
funciones especificas, diferentes a las 3
identificadas previamente.

Es el caso de la seguridad, el control de


excepciones, el transporte de datos entre capas, la
generación de trazas de errores, solo por
mencionar algunas...
Esta por ejemplo es la
propuesta de Microsoft
para una aplicación
distribuida y que como
vemos tiene más de 3
capas…

Esta es la visión
simplificada de la
misma propuesta
Ya que hemos hecho énfasis en el significado del
desarrollo o distribución de la lógica de
programación y recursos del sistema por capas,
continuemos hablando de los componentes.
… ahora bien…

Hay componentes de diferentes tipos


Ejecutables, Páginas Web, Librerías, 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 información
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 librerías refieren bibliotecas o conjunto de
clases que contienen lógica de programación
implementada como servicios que pueden ser
utilizados desde otras librerías o aplicaciones
Los controles refieren librerías de tipo grafico que
pueden ser usada en la construcción de interfaces
de usuario, es el caso de los botones, etiquetas,
ventanas y demás controles que usamos para
construir aplicaciones de escritorio.
Un servicio web (en inglés Web service)
es un conjunto de protocolos y
estándares que sirven para intercambiar
datos entre aplicaciones.
Wikipedia

Suena complicado verdad?


Una posible definición sería hablar de los servicios web
como un conjunto de aplicaciones o de tecnologías con
capacidad para interoperar en la Web. Estas aplicaciones o
tecnologías intercambian datos entre sí con el objetivo de
ofrecer unos servicios. Los proveedores ofrecen sus servicios
como procedimientos remotos y los usuarios solicitan un
servicio llamando a estos procedimientos a través de la Web.

http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb
Tratemos de simplificar lo que acabamos de leer…

Generalmente las aplicaciones exponen a los


usuarios una interfaz gráfica que permite
interactuar con los datos de un negocio. Los
servicios web son un tipo de aplicación que permite
exponer servicios (métodos, procedimientos)
existentes en clases o librerías clases, a través de los
cuales se accede a la lógica de negocio que ofrece
un sistema, este es el mecanismo más comúnmente
utilizado actualmente para compartir información
entre empresas.
Estos son los conceptos iníciales, entenderlos
y apropiarse de su manejo nos garantizará
entender su detalle, pero antes de terminar
veamos una aclaración…
Importante!

No es lo mismo hablar de una


aplicación distribuida
y un sistema distribuido
Un sistema distribuido se define como:

Una colección de computadores separados físicamente y


conectados entre sí por una red de comunicaciones distribuida;
cada máquina posee sus componentes de hardware y software
que el usuario percibe como un solo sistema
Wikipedia
Es el caso del conocido buscador de Google,
el cual funciona utilizando una red de computadores
que realizan simultáneamente las búsquedas
solicitadas por un usuario, sin que el usuario perciba
siquiera que esto esta sucediendo.

Una razón importante para la existencia de los


sistemas distribuidos tiene que ver con la limitación
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 situación 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.
Por tanto podemos concluir que, una
aplicación distribuida puede requerir ser
implementada como un sistema distribuido,
sin embargo esta condición no es
indispensable, puesto que está determinada
por necesidades específicas para tipos de
aplicaciones y/o escenarios en los que priman
principalmente factores como la
escalabilidad horizontal y el desempeño.
Nos vemos en la próxima!
No te olvides de visitar mi blog:
http://soreygarcia.blogspot.com
Ciao

También podría gustarte