Está en la página 1de 34

Arquitectura de software

• 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

También podría gustarte