• Es la representación de las estructuras del sistema, la cual comprende
los componentes del software, las propiedades de esos componentes visibles externamente y las relaciones entre ellos. • Establecer la arquitectura de software es importante porque facilita la comunicación entre los miembros del equipo de desarrollo, permite tomar decisiones a tiempo que impactarán todo el proyecto y se constituye como un modelo de como se conforma el sistema y como trabaja. Elementos • Cada estilo arquitectónico comprende:
• Conjunto de componentes mediante los cuales se realiza la comunicación,
coordinación y cooperación entre componentes • Restricciones respecto a la integración de los componentes • Modelos semánticos que permiten la comprensión de las propiedades globales, para analizar las propiedades conocidas de los componentes que la integran Arquitectura basada en los datos • En el centro de esta arquitectura se encuentra un almacén de datos al que otros componentes acceden con frecuencia para actualizar, añadir, borrar o modificar los datos del almacén. Arquitectura de flujo de datos • Esta arquitectura se aplica cuando los datos de entrada son transformados a través de una serie de componentes computacionales en los datos de salida. Un patrón tubería y filtro tiene un grupo de componentes, llamados filtros, conectados por tuberías que transmiten datos de un componente al siguiente. Arquitecturas de llamada y retorno • Este estilo arquitectónico permite al arquitecto del sistema construir una estructura de programa fácil de modificar y ajustar a escala, existen dos subestilos: • Arquitecturas de programa principal/subprograma. Esta arquitectura descompone las funciones en una jerarquía de control, donde un programa principal llama a un numero de componentes del programa, los cuales pueden también llamar a otros componentes. • Arquitecturas de llamada de procedimiento remoto. Están distribuidos entre varias computadoras en una red. Arquitecturas orientadas a objetos • Los componentes de este sistema encapsulan los datos y las operaciones que se deben realizar para manipular los datos. La comunicación y coordinación se lleva a cabo a través de paso de mensajes. Arquitecturas estratificadas • La estructura básica de esta arquitectura genera diferentes capas y cada una realiza operaciones que progresivamente se aproximan a las instrucciones de la maquina. En la capa externa, los componentes realizan operaciones de interfaz del sistema. Las capas intermedias proporcionan servicios de utilidad y funciones del software de aplicaciones. Beneficios • Comunicación mutua. Representa un alto nivel de abstracción común que la mayoría de los participantes pueden usar como base para crear entendimiento mutuo, formar consenso y comunicarse entre si. • Decisiones tempranas de diseño. Representa la encarnación de las decisiones de diseño mas tempranas sobre un sistema, y esos vínculos tienen un peso fuera de toda proporción en su gravedad individual con respecto al desarrollo restante del sistema, su servicio en el despliegue y su vida de mantenimiento Beneficios • Restricciones constructivas . Una descripción arquitectónica que proporciona blueprints parciales para el desarrollo, indicando los componentes y la dependencias entre ellos. • Reutilización o abstracción transferible de un sistema. La arquitectura encarna un modelo pequeño, tratable, de la forma en que un sistema se estructura y sus componentes se entienden entre si. • Evolución. La arquitectura puede exponer las dimensiones a lo largo de las cuales puede esperarse que evolucione un sistema Beneficios • Análisis. Las descripciones aportan nuevas oportunidades para el análisis, incluyendo verificaciones de consistencia del sistema, conformidad con las restricciones impuestas por un estilo, conformidad con atributos de calidad, análisis de dependencias y análisis específicos de dominio y negocios. • Administración. La experiencia demuestra que los proyectos exitosos consideran una arquitectura viable como un logro clave del proceso de desarrollo. • Arquitectura funcional basada en la descripción de las distintas funciones del sistema. • Vertical o funcional de usuario donde la descomposición se basa en agrupar funcionalidades que provienen de los requisitos funcionales. • Transversal a las funcionalidades, incluyendo todos los aspectos que no son específicos de ciertos grupos funcionales • Estilos arquitectónicos que implementan la arquitectura funcional, describiendo las capas que lo componen, sus componentes y el modo en que los distintos elementos interaccionan entre ellos. Estilos arquitectónicos • Hace referencia a cada uno de los diferentes modelos de representación conceptual en que se pueden organizar los componentes dentro de una arquitectura de software, entre los estilos mas comunes se encuentran: • Filtro-tubería o procesamiento por lotes • Orientación a objetos • Arquitectura basada en eventos (invocación implícita) • Arquitectura basada en capas • Sistemas basados en repositorios o de datos compartidos • Control de procesos • Procesos distribuidos Arquitectura en capas • Se tienen varias capas, cada capa se comunica con las capas inferiores o superiores a través del paso de información y servicios. Estilos arquitectónicos 1. Monolítico 2. Cliente servidor 3. Punto a punto (P2P) 4. Arquitectura en capas 5. Micro kernel 6. Arquitectura Orientada a Servicios (SOA) 7. Micro servicios 8. Arquitectura Conducida a Eventos (EDA) 9. Transferencia de Estado de Representación (REST) Arquitectura en capas • Todas las capas se colocan de forma horizontal, de tal forma que cada capa solo puede comunicarse con la capa que esta inmediatamente arriba o debajo de ella. Arquitectura en capas • Características: • La aplicación se compone de capas, en la cual cada capa tienen una sola responsabilidad dentro de la aplicación • Las capas de la aplicación son totalmente independientes de las demás, con la excepción de la capa que esta inmediatamente debajo • Deben de existir al menos tres capas para considerase una aplicación por capas • Toda la información se hace siempre de forma descendiente, pasando desde las capas superiores a las mas inferiores Arquitectura en capas Ventajas Desventajas Separacion de responsabilidades Desempeño Facil de desarrollar Escalabilidad Facil de probar Complejidad de despliegue Facil de mantener Anclado a un stack tecnológico Seguridad Tolerancia a fallos Estilo arquitectónico • Un estilo arquitectónico es una colección de decisiones de diseño arquitectónico que: • Son aplicables a un contexto de desarrollo • Dado un sistema particular, restringe las decisiones de diseño de arquitectura sobre dicho sistema, y • Garantiza ciertas calidades del sistema resultante • Caracterizan lecciones aprendidas en el diseño de sistemas de software • Proveen decisiones de diseño generales que restringen y pueden necesitar ser refinadas en decisiones de diseño adicionales y mas especificas para que sean aplicadas en un sistema. Estilo arquitectónico • Un estilo arquitectónico establece un marco de referencia a partir del cual es posible construir aplicaciones que comparten un conjunto de atributos y características mediante el cual es posible edificarlos y clasificarlos. • Los estilos arquitectónicos no determinan la tecnología en la cual esta construido el software, ni determina los detalles técnicos de como debe construirse, solo da ciertos lineamientos y características que debe de cubrir un software para considerarse que sigue determinado estilo arquitectónico. Patrones arquitectónicos • Un patrón arquitectónico es una colección de decisiones de diseño arquitectónicas que tiene un nombre especifico y que son aplicables a problemas de diseño recurrentes, y son parametrizadas para tener en cuenta diferentes contextos de desarrollo de software en los cuales el problema aparece. • Provee un conjunto de decisiones especificas de diseño que han sido identificadas como efectivas para organizar ciertas clases de sistemas de software o subsistemas específicos. • Están decisiones de diseño pueden pensarse como configurables, ya que necesitan ser instanciadas con los componentes y conectores particulares a una aplicación. Estilos simples Estilos influenciados por lenguajes de programación tradicionales
Programación estructurada (monolítica) Programación Orientada a Objetos
Descomposición basada en la Estado y funciones encapsulados en
separación de pasos de procesamiento objetos funcionales Estilo Monolítico Descripción Descomposición basada en la separación de pasos de procesamiento funcionales Componentes Programa principal y subrutinas Conectores Llamadas a procedimientos y funciones Elementos de datos Valores de entrada/salida de las subrutinas Cualidades Modularidad Usos típicos Pequeños programas. Uso pedagógico Precauciones Falla al escalar Problemas con las estructuras de datos Reusó limitado de funciones y procedimientos Impredecible Estilo Monolítico • Diseño basado en descomposición funcional • Programa principal • Muestra saludos e instrucciones • Cicla llamando a los componentes • Cede el control y se espera respuesta Estilo Monolítico • Puede estar construido como una unidad de software o creada a partir de varios módulos o librerías, pero lo que le distingue es que al momento de compilarse se empaqueta como una sola pieza, de tal forma que todos los módulos y librerías se empaquetan junto con la aplicación principal. Estilo Monolítico • Características: • Son aplicaciones autosuficientes (no requieren de nada para funcionar) • Realizan de punta a punta todas las operaciones para terminar una tarea • Son aplicaciones grandes, aunque no es un requisito • Contienen datos privados, cada instalación administra su propia base de datos • Todo el sistema corre sobre una sola plataforma Ventajas Desventajas Fácil de desarrollar Anclado a un stack tecnológico Pocos puntos de fallo Escalado monolítico Autónomo Pueden ser muy grandes Gran desempeño Versión tras versión Si falla, falla todo Difícil mantenimiento Estilo Orientado a Objetos Descripción Estado y funciones encapsulados en objetos Componentes Objetos (atributos y comportamiento) Conectores Invocación a métodos Elementos Parámetros de los métodos Cualidades Integridad de las operaciones Abstracción Reusó a gran escala Correspondencia con objetos del dominio Usos típicos Correlación entre las entidades en el mundo real y las entidades en la app Apps que tienen estructuras de datos complejas y dinámicas Precauciones No todo es un objeto El uso en aplicaciones distribuidas requiere acceso remoto a los objetos Estilo Orientado a Objetos Estilos por capas Considera la arquitectura como un sistema en capas ordenadas. Un programa en un nivel o capa puede obtener los servicios de un nivel inferior
Maquinas virtuales Cliente – servidor
De amplio uso en arquitecturas de Presente en aplicaciones de negocio
computadoras y sistemas operativos Maquina virtual Descripción Secuencia ordenada de capas Componentes Capas conteniendo subcomponentes Conectores Llamadas a procedimientos Elementos Parámetros pasados entre las capas Cualidades Dependencias claras y acotadas Encapsulamiento Basado en niveles de abstracción Reusabilidad, portabilidad Usos típicos Sistemas operativos Stacks de protocoles de red Aplicaciones empresariales Precauciones Performance No siempre se puede encontrar la abstracción correcta Una maquina virtual con varios niveles puede resultar ineficiente Arquitectura de microservicios • Es una aproximación para el desarrollo de software que consiste en construir una aplicación como un conjunto de pequeños servicios, los cuales se ejecutan en su propio proceso y se comunican con mecanismos ligeros (API de recursos HTTP). Cada servicio se encarga de implementar una funcionalidad completa del negocio. Cada servicio es desplegado de forma independiente y puede estar programado en distintos lenguajes y usar diferentes tecnologías de almacenamiento de datos. Arquitectura de microservicios • Caracteristicas: • Los componentes son servicios • Organizda en torno a las funcionalidades del negocio • Productos, no proyectos • Extremos inteligentes, tuberías bobas • Tener gobierno descentralizado permite usar tecnologías que se adapten mejor a cada funcionalidad • Gestion de datos descentralizada • Diseño tolerante a fallos • Automatizacion de la infraestructura • Diseño evolutivo Arquitectura de microservicios • Criticas: • Los servicios forman barreras de información • Los mensajes entre servicios sobre la misma red tienen un costo mayor en términos de latencia y tiempo procesamiento de mensajes comparado con un proceso de servidor monolítico • Las pruebas y el despliegue son mas complicados en el modelo de microservicios • Mover responsabilidades entre servicios es difícil • Contemplar el tamaño de los servicios como el principal mecanismo de estructuración puede llevar a utilizar demasiados servicios cuando una estructura de modularizacion interna puede llevar a un diseño mas simple Arquitectura orientada a servicios • Es un estilo de arquitectura de TI que se apoya en la orientación a servicios, la cual es una forma de pensar en servicios, su construcción y sus resultados. Un servicio es una representación lógica de una actividad de negocio que tiene un resultado de negocio especifico Arquitectura orientada a servicios • Características: • Esta basado en el diseño de servicios que refleja las actividades del negocio en el mundo real • Representa los servicios utilizando descripciones de negocio para asignarles un contexto de negocio • Tiene requerimientos de infraestructura específicos y únicos para este tipo de arquitectura • Esta implementada de acuerdo con las condiciones especificas de la arquitectura de TI en cada compañía • Requiere un gobierno fuerte sobre la representación e implementación de servicios • Requiere un conjunto de pruebas que determinen que es un buen servicio