80
Aplicaciones Aplicaciones Distribuidas Distribuidas Por: Por: Sorey Bibiana García Zapata

Aplicaciones Distribuidas

Embed Size (px)

Citation preview

Aplicaciones DistribuidasAplicaciones DistribuidasPor:Por:

Sorey Bibiana García Zapata

Sobre mi…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…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!Importante!

...desarrollar softwaredesarrollar software, no es programarprogramar…

…este curso requiere conocer claramente esa diferencia!

El desarrollo de softwaredesarrollo de software incluye todas las disciplinas asociadas a la ingeniería de softwareingeniería de software

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

… el desarrollo de aplicaciones distribuidas sugiere por tanto consideraciones durante la ejecución de todo el ciclo de vida…

Recomendación!Recomendación!

Si a este momento, no reconoce conceptos como, ingeniería de software u orientación a objetosingenierí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?aplicación distribuida?

Es una aplicación con distintos componentescomponentes que se ejecutan en entornos separadosentornos separados,

normalmente en diferentes plataformas conectadas a través de una red

Wikipedia

Se entendió?Se entendió?Veamos que tanto…

Cuales son los componentescomponentes que se distribuyendistribuyen?

Que criterios se usan para determinar que conforma un componentecomponente?

A través de que mecanismos se realiza la comunicación comunicación entre componentes distribuidos componentes distribuidos?

Que es un componentecomponente?

Que debería saberse y/o tenerse en saberse y/o tenerse en cuenta cuenta para desarrollardesarrollar una aplicación aplicación

distribuidadistribuida?

CapasCapas

NivelesNiveles

ArquitecturaArquitectura

ProtocolosProtocolos

Calidades SistémicasCalidades Sistémicas

UMLUMLDespliegueDespliegue

Cliente/ServidorCliente/Servidor

ServiciosServicios

Lógica de NegocioLógica de Negocio

Acceso a DatosAcceso a Datos

WebservicesWebservices

InterfacesInterfaces

ComponentesComponentes

ComunicaciónComunicación

ObjetosObjetos

Interfaz de UsuarioInterfaz de UsuarioPaquetesPaquetes

InteroperabilidadInteroperabilidadComunicaciónComunicación

Vamos por partes…

A que se refiere la distribucióndistribución?

Las distribución distribución refiere a la construcción de software por partes, a las cuales les son

asignadas un conjunto específicoconjunto específico de responsabilidades dentro de un sistema.

Esta distribución distribución como bien enunciaba la definición formal, habla de que las partes o componentes se

encuentran en entornos separadosentornos separados, 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 separación lógica de las partes de una

aplicación, esto quiere decir que programáticamente existe una forma de separarseparar o agruparagrupar los

componentes.

La separación físicaseparación física no es en todas las ocasiones “maquinas diferentes” de

acuerdo a arquitectura tambien puede ser la ubicación de un conjunto de

funcionalidades en archivos, rutas o montadas sobre técnologías diferentes

dentro de la misma máquina

Ahora bien, cuando hablemos de distribución lógica lo entenderemos como separación por

“CapasCapas” (tiers) y cuando hablemos de distribución física usaremos el término

separación en “NivelesNiveles” (layers)

La separación por capas y niveles hace parte de la arquitectura del sistema arquitectura del sistema y es

definida por el arquitecto de la aplicación.

… una situación evidente si conocemos la ingeniera de software…Nuestra tarea en este curso está en familiarizarnos con este tipo de tareas.

Ambos tipos de distribución distribución se hacen con base en las necesidades técnicastécnicas, de diseñodiseño y/o de negocionegocio

… esas necesidades son las que aprenderemos a identificar en este curso.

La separación en niveles tiene una serie de consideraciones de tipo técnicotécnico y también económicoeconó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 capascapas 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 escenarioescenario y tipo de aplicacióntipo de aplicación, están separadas

físicamentefísicamente.

Si, físicamente! Lo que significa que una capa puede ser a su vez un nivel

Una capa puede contener muchosmuchos componentes, un mismo componente

puede ubicarse en variasvarias 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 componentecomponente?

Veamos una definición formal...

Un componentecomponente es un elementoelemento de software que encapsulaencapsula una serie de funcionalidades.

Un componentecomponente es una unidad unidad independienteindependiente, que puede ser utilizado en

conjunto con otros componentes para formar un sistema más complejosistema más complejo.

Cada componente de un sistema puede verse como un paquetepaquete o módulomódulo

Un componente esta compuesto por elementos que pueden ser clasesclases y/o recursos complementarios recursos complementarios como archivos de

configuración, imágenes, entre otros. Y a su vez esas clases y recursos pueden están agrupados dentro del componente en subpaquetes, de acuerdo a su

naturaleza o necesidades de negocio.

Aplicación

Niveles

Capas

Componentes

En este punto visualizamos varios conceptos que podemos presentar de la siguiente forma…

Paquetes

Clases

Sub paquetes

Otros Recursos

Hablar de clasesclases en este punto, nos hace recordar que debemos hacer un

recuento nuestros conocimientos sobre programación orientada a objetosprogramación orientada a objetos, ya que la construcción de componentes

esta basada es los mismos principios y/o características con las que cumple este

conocido paradigma

… la modularidadmodularidad y la reusabilidadreusabilidadQué son?

Recordemos lo más básico…Los principios que dirigen la orientación a objetos son

En términos simples la modularidadmodularidad significa trabajar por partes…

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

Y la reusabilidadreusabilidad 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

Que es una claseclase? Que es un objetoobjeto?

Que es un mensajemensaje?

Que son atributosatributos, característicascaracterísticas o propiedadespropiedades?

Que son métodosmétodos, procedimientosprocedimientos , funcionesfunciones o serviciosservicios?

Que significa que un objeto esta compuesto por una interfazinterfaz, una implementaciónimplementación y un estadoestado?

Veamos, que tanto recordamos…

Que es abstracciónabstracción, encapsulamientoencapsulamiento, polimorfismopolimorfismo, herenciaherencia?

Después de este repaso avancemos un poco más

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 alta cohesión y el bajo acoplamientobajo acoplamiento

… que tan claros son?….

Cuando decimos que un componente tiene una alta cohesión alta cohesión hablamos de

que todos los elementos dentrodentro 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 bajo acoplamiento hablamos del nivel de independenciaindependencia que tiene un

componente con respecto a otrosotros… 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á

trabajotrabajo y tiempostiempos 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 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ónLa PresentaciónLa Lógica de NegocioLa Lógica de Negocio

El Acceso a Datos y los DatosEl Acceso a Datos y los Datos

Veamos entonces que significan cada una de estas partespartes…

La Presentación Presentación o interfaz de usuario se refiere al mecanismo de interaccióninteracción del

usuario con el sistema

Los tipos de interfaces de software más comunes son las aplicaciones de ventanasventanas y webweb

Los tipos de interfaces de hardware más comunes son 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 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 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 básicos, podemos pasar entonces a ver, los diferentes tipos

de aplicación

Aplicaciones MonolíticasAplicaciones Cliente/Servidor

Aplicaciones de 3 CapasAplicaciones de N Capas

…veamos unas definiciones básica sobre estas

Una aplicación monolítica 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 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 aplicación Cliente/ServidorCliente/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 aplicación 3 capas es aquella donde la interfaz, la lógica de negocio, el

acceso a datos y los datos se encuentran separados.separados.

Es muy importante 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áticaprogramática.

“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 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.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 de las aplicaciones.

Y pues para hacer un trabajo bien hecho, hay que reconocer que las

consideraciones asociadas consideraciones asociadas al desarrollo por capas…

Veamos cada una de ellas y enumeremos algunas consideraciones iniciales…

Que consideraciones deberíamos tener en cuenta cuando pensamos

en la Capa de PresentaciónCapa de Presentación?

Y las consideraciones de la Capa de Lógica de NegociosCapa de Lógica de Negocios?

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…

Solo por mencionar los más populares…

Y las consideraciones de la Capa de Acceso a DatosCapa 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 capasaplicació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 empresasentre empresas,

y entre los mismos sistemas existentes sistemas existentes dentro de las empresas, de forma que se satisfagan las necesidades constantes y cambiantes de clientes y usuarios, para quienes debe resultar transparentetransparente 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 nuevas capas, especializadas en

funciones especificasfunciones 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

generación de trazas de errores, entre otros.

Este por ejemplo es la propuesta de Microsoft para una aplicación distribuida y que como vemos tiene más de 3 capasmás de 3 capas…

Sin estrés, 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 distribución de la lógica de programación y recursos del sistema por

capascapas, continuemos hablando de los componentescomponentes.

Hay componentescomponentes de diferentes tipos

Ejecutables, Páginas Web, Librerías, Controles, Procedimientos Almacenados, Servicios Web…

… ahora bien…

Los ejecutablesejecutables refieren programas o aplicaciones de escritorio que corren sobre

un sistema operativo

Una pagina web 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íaslibrerí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 controlescontroles refieren librerías de tipo grafico que pueden ser usada en la construcción de interfaces de

usuario.

Un servicio web 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?… no hay problema, este tema lo ampliaremos más adelante!

Lo que debemos saber inicialmente sobre los servicios web servicios web es que actualmente son la forma mas

popular de comunicacióncomunicación entre niveles, que si recordamos, refiere a entornos separados e incluso

de tecnologías diferentes.

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 serviciosservicios (métodos, procedimientos) existentes en clases o librerías clases, a través de los cuales se accede a la lógica de negocioló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 y los temas que vienen

más adelante, pero antes de terminar veamos una aclaración…

Importante! Importante!

No es lo mismo hablar de una aplicación aplicación distribuida distribuida y un sistema distribuidosistema distribuido

Un sistema distribuido sistema distribuido se define como:

Una colección de computadores separados físicamentefí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 sistemaun 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 sistemas distribuidos tiene que ver con la limitación

de recursos del hardwarerecursos del hardware.

A pesar de actualmente contamos con altos niveles de procesamiento en el hardware disponible, estos

niveles son limitadoslimitados en recursos, es decir en capacidad de procesamiento, memoria, ancho de

banda, entre otros criterios.

Esta situación hace que los arquitectos de softwarearquitectos 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 aplicación distribuida aplicación distribuida puede requerir ser implementada como un sistema distribuido, 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ñoescalabilidad horizontal y el desempeño

… estas ultimas refieren calidades sistémicas, temas que veremos más adelante…

Nos vemos en la próxima!Ciao