Desarrollo de Aplicaciones distribuidas con Visual Studio 2013.pdf
Aplicaciones Distribuidas
-
Upload
sorey-garcia -
Category
Technology
-
view
70.598 -
download
5
Transcript of Aplicaciones Distribuidas
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…
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
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
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…
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.
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
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?
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…
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…