Arquitectura
de software
La
arquitectura de un software puede entenderse como aquella estructura del
programa que cohesiona las funcionalidades más críticas y relevantes
(necesarias para el sistema), y que sirve de soporte al resto de
funcionalidades finales (necesarias para el usuario). Su especificación es
ampliamente aceptada como el problema central de diseño de un sistema de
software complejo. Uno de los principios de las metodologías modernas de
desarrollo de software es priorizar la definición, el diseño, la implementación
y la evaluación de la arquitectura del software. La esencia de este principio
es dedicar los mínimos esfuerzos a implementar un prototipo estable de
arquitectura que garantice la viabilidad del proyecto en las fechas más tempranas
posibles. Este artículo reflexiona sobre la importancia de priorizar la
arquitectura tanto para el producto de software como para el proceso de
desarrollo, y sobre los beneficios potenciales que esta práctica puede
reportar.
El software tradicional, como
único proceso ejecutándose en un único ordenador, no supone arquitecturas
complejas ni grandes riesgos. Sin embargo, los sistemas actuales aprovechan
componentes comerciales, código abierto, sistemas distribuidos, nuevos y
diversos lenguajes de programación, entornos de alojamiento (hosting) y de
ejecución remota, y otras dependencias externas, que convierten a la
arquitectura de un sistema en su producto técnico más crítico. Alcanzar una
arquitectura estable que dé garantías sobre la viabilidad del proyecto, se
considera el punto de transición entre lo que se suele denominar la fase de
ingeniería
La
arquitectura de un software puede entenderse como aquella estructura del
programa que cohesiona las funcionalidades más críticas y relevantes
(necesarias para el sistema), y que sirve de soporte al resto de
funcionalidades finales (necesarias para el usuario). Su especificación es
ampliamente aceptada como el problema central de diseño de un sistema de
software complejo. Uno de los principios de las metodologías modernas de
desarrollo de software es priorizar la definición, el diseño, la implementación
y la evaluación de la arquitectura del software. La esencia de este principio
es dedicar los mínimos esfuerzos a implementar un prototipo estable de arquitectura
que garantice la viabilidad del proyecto en las fechas más tempranas posibles.
Arquitectura
cliente-servidor
El
término cliente/servidor es originalmente aplicado a la arquitectura de software que describe el procesamiento
entre dos o más programas: una aplicación y un servicio soportante.
IBM
define al modelo Cliente/Servidor. "Es
la tecnología que proporciona al
usuario final el acceso transparente a las aplicaciones, datos,
servicios de cómputo o cualquier otro recurso del grupo de trabajo y/o, a través de
la organización, en múltiples plataformas. El modelo
soporta un medio ambiente distribuido en el cual los
requerimientos de servicio hechos por estaciones de trabajo inteligentes o
"clientes'', resultan en un trabajo realizado
por otros computadores llamados servidores".
"Los
elementos principales de la arquitectura cliente servidor son justamente el
elemento llamado cliente y el otro elemento llamado servidor". Por ejemplo
dentro de un ambiente multimedia, el elemento cliente seria el
dispositivo que puede observar el vídeo, cuadros y texto, o reproduce el audio distribuido por
el elemento servidor.
Por
otro lado el cliente también puede ser una computadora personal o una televisión inteligente que posea la
capacidad de entender datos digitales. Dentro de este caso el elemento servidor
es el depositario del vídeo digital, audio, fotografías digitales y texto y los
distribuye bajo demanda de ser una maquina que cuenta
con la capacidad de almacenar los datos y ejecutar todo el software que brinda
éstos al cliente.
Arquitectura
Blackboard
Los
sistemas de información distribuida, como la World Wide Web, han demostrado la
simplicidad y versatilidad con la que los sistemas de hipermedia permiten
recuperar eficazmente grandes volúmenes de información. En relación a la integración
de documentos cuyo formato no es HTML cuyo contenido no debe alterarse, se han
propuesto los sistemas abiertos de hipermedia para dar solución a tales
problemas de interoperabilidad. El propósito de éste trabajo, es describir la
construcción de un sistema abierto de hipermedia con fácil integración a la
Web. El sistema consiste de un número reducido de extensiones a un navegador y
de un servidor de enlaces con arquitectura reconfigurable. Entre las
contribuciones de éste trabajo podemos resaltar que el sistema permite:
Extender el modelo simple de enlace de la Web con otros modelos de enlaces como
el específico, genérico, de avance u otros definidos por el usuario. Extender el
modelo de proceso de la Web con una arquitectura reconfigurable que permite no
solo introducir nuevos servidores de enlace sino también organizarlos con
diferentes estilos como el conducto-filtro o el de pizarra. Hacer el seguimiento
de documentos móviles, como aquellos involucrados en aplicaciones workflows,
mediante el modelo de enlace de avance. Demostrar la superioridad expresiva de
la arquitectura de pizarra sobre la conducto-filtro. El sistema se ha usado
exitosamente para recuperar información académica de la Sección de Computación
del Cinvestav al introducir nuevos enlaces sin alterar el contenido de los
documentos Web, un problema bastante común pero en general difícil de resolver
cuando no se cuenta con permisos de acceso para modificar los documentos.
Arquitectura
de capas
La
arquitectura basada en capas se enfoca en la distribución de roles y
responsabilidades de forma jerárquica proveyendo una forma muy efectiva de
separación de responsabilidades. El rol indica el modo y tipo de interacción
con otras capas, y la responsabilidad indica la funcionalidad que está siendo
desarrollada.
El
estilo de arquitectura basado en capas se identifica por las siguientes
características:
•
Describe la descomposición de servicios de forma que la mayoría de la
interacción ocurre solamente entre capas vecinas.
•
Las capas de una aplicación pueden residir en la misma maquina física (misma
capa) o puede estar distribuido sobre diferentes computadores (n-capas).
•
Los componentes de cada capa se comunican con otros componentes en otras capas
a través de interfaces muy bien definidas.
•
Este modelo ha sido descrito como una “pirámide invertida de re-uso” donde cada
capa agrega responsabilidad y abstracción a la capa directamente sobre ella.
Principios
fundamentales
Los
principios comunes que se aplican cuando se diseña para usar este estilo de
arquitectura incluyen:
• Abstracción.
La arquitectura basada en capas abstrae la vista del modelo como un todo
mientras que provee suficiente detalle para entender las relaciones entre
capas.
• Encapsulamiento.
El diseño no hace asunciones acerca de tipos de datos, métodos, propiedades o
implementación.
• Funcionalidad
claramente definida. El diseño claramente define la separación entre la
funcionalidad de cada capa. Capas superiores como la capa de presentación envía
comandos a las capas inferiores como la capa de negocios y la capa de datos y
los datos fluyen hacia y desde las capas en cualquier sentido.
• Alta
cohesion. Cada capa contiene funcionalidad directamente relacionas con la tarea
de dicha capa.
• Reutilizable.
Las capas inferiores no tienen ninguna dependencia con las capas superiores,
permitiéndoles ser reutilizables en otros escenarios.
• Desacople.
La comunicacion entre las capas está basada en la abstracción lo que provee un
desacople entre las capas.
Beneficios
Los
principales beneficios del estilo de arquitectura basado en capas son:
• Abstracción.
Las capas permiten cambios que se realicen en un nivel abstracto. Usted puede
incrementar o disminuir el nivel de abstracción usado en cada capa de la “pila”
jerárquica.
• Aislamiento.
El estilo de arquitectura de capas permite asilar los cambios en tecnologías a
ciertas capas para reducir el impacto en el sistema total.
• Rendimiento.
Distribuir las capas entre múltiples sistemas (físicos) puede incrementar la
escalabilidad, la tolerancia a fallos y el rendimiento.
• Mejoras
en Pruebas. La capacidad de realizar pruebas se beneficia de tener una
interfaces bien definidas para cada capa así como de la habilidad para cambiar
a diferentes implementaciones de las interfaces de cada capa.
• Independencia.
El estilo de arquitectura basado en capas el requerimiento de considerar el
hardware y los problemas de instalación así como las dependencias de interfaces
externas.
Los
siguientes son algunas variaciones del estilo de arquitectura basado en capas:
• Capas
estrictas (Strict layering). Cada capa solo puede invocar a la capa
directamente debajo de a ella.
• Saltos
de Capas (Layer skipping). Las capas pueden invocar otras capas más
profundas que las que están directamente debajo de ellas. Esto puede
incrementar el rendimiento pero impacta la portabilidad.
• Capa
de Caja Negra (Black-box layering). Los limites de las capas y sus
dependencias esta definidas de forma estricta usando interfaces, lo que soporta
extensiones en run-time, intercepción y mejora la capacidad de realiza pruebas.
• Capa
de Caja Blanca (White-box layering). Clases que colaboran entre los
límites de las capas y están altamente acopladas.
Arquitectura
de N-Capas / 3-Capas
Este
estilo de despliegue arquitectónico describe la separación de la funcionalidad
en segmentos separados de forma muy parecida al estilo de capas, pero en el
cual cada segmento está localizado en un computador físicamente separado. Este
estilo ha evolucionado desde la aproximación basada en componentes generalmente
usando métodos específicos de comunicación asociados a una plataforma en vez de
la aproximación basada en mensajes.
Arquitectura
orientada a servicios
La arquitectura
orientada a servicios de cliente (en
inglés Service Oriented Architecture), es un concepto de arquitectura
de software que define la utilización de servicios para dar soporte a los
requisitos del negocio.
Permite
la creación de sistemas de información altamente escalables que reflejan el
negocio de la organización, a su vez brinda una forma bien definida de
exposición e invocación de servicios (comúnmente pero no exclusivamente servicios web), lo cual facilita la interacción
entre diferentes sistemas propios o de terceros.
SOA
define las siguientes capas de software:
Aplicaciones
básicas - Sistemas desarrollados bajo cualquier arquitectura o tecnología,
geográficamente dispersos y bajo cualquier figura de propiedad;
De
exposición de funcionalidades - Donde las funcionalidades de la capa
aplicativa son expuestas en forma de servicios (generalmente como servicios
web);
De
integración de servicios - Facilitan el intercambio de datos entre
elementos de la capa aplicativa orientada a procesos empresariales internos o
en colaboración;
De
composición de procesos - Que define el proceso en términos del negocio y
sus necesidades, y que varía en función del negocio;
De
entrega - donde los servicios son desplegados a los usuarios finales.
Arquitectura
monolítica
Arquitectura
Monolítica. Es un modelo en el cual el sistema operativo y todos los servicios
fundamentales residen en un monitor monolítico que se accede a través de un
mecanismo de llamada al núcleo.
Para
corregir algunos de los problemas de la configuración "ejecutivo en tiempo
real", algunos vendedores de RTOS han adoptado una arquitectura
monolítica. En este modelo, el sistema operativo y
todos los servicios fundamentales, tales como file system, residen en un
monitor monolítico que se accede a través de un mecanismo de llamada al núcleo.
Las
llamadas al núcleo hacen la transición del modo aplicación (o usuario) al modo
supervisor. Se proporciona protección de modo que sólo se puede acceder a
recursos del núcleo en modo supervisor; las aplicaciones se ponen en ejecución
generalmente como procesos que tienen espacios de direccionamiento separados
con protección entre ellos.
Características
•Es
un intento de paliar los problemas de la arquitectura plana.
•Su aportación estriba en que los procesos de usuario ejecutan en espacios de direccionamiento diferentes al del sistema operativo.
•Las implementaciones de UNIX han respondido tradicionalmente este diseño.
•Se aislan del sistema de los errores de los procesos de usuario, pero nuevos dispositivos aparecen en el mercado continuamente y es preciso escribir manejadores para soportarlos. De nuevo el sistema crece y la probabilidad del fallo aumenta.
•El programa de usuario lleva a cabo las llamadas al sistema mediante interrupciones software o traps.
•Sólo en modo supervisor se permite al procesador ejecutar instrucciones privilegiadas. Accesos a las posiciones de memoria asignadas a los adaptadores de dispositivo .
•Copia de datos entre espacios de direccionamiento diferentes.
•Su aportación estriba en que los procesos de usuario ejecutan en espacios de direccionamiento diferentes al del sistema operativo.
•Las implementaciones de UNIX han respondido tradicionalmente este diseño.
•Se aislan del sistema de los errores de los procesos de usuario, pero nuevos dispositivos aparecen en el mercado continuamente y es preciso escribir manejadores para soportarlos. De nuevo el sistema crece y la probabilidad del fallo aumenta.
•El programa de usuario lleva a cabo las llamadas al sistema mediante interrupciones software o traps.
•Sólo en modo supervisor se permite al procesador ejecutar instrucciones privilegiadas. Accesos a las posiciones de memoria asignadas a los adaptadores de dispositivo .
•Copia de datos entre espacios de direccionamiento diferentes.