Conceptos Clave en Arquitectura de Software
¿Qué es la Arquitectura del Software?
La arquitectura del software es una pieza fundamental en el desarrollo de sistemas modernos. Su propósito es definir la estructura, los componentes y las interacciones que conforman una aplicación o sistema. Crea las bases que garantizan la calidad y escalabilidad de los proyectos, funciona como un puente que conecta los objetivos del negocio y las soluciones tecnológicas.
¿Importancia de la Arquitectura del Software?
La arquitectura establece las bases sobre las que construir el sistema. Las decisiones de arquitectura influirán directamente en la calidad final del software, su mantenimiento, 555 escalabilidad, rendimiento, etc.
La arquitectura del software influye en las siguientes características, de ahí su importancia:
- Modularidad del sistema
- Requisitos funcionales y no funcionales
- Escalabilidad y extensibilidad
- Facilidad de colaboración entre equipos
- Reducción de riesgos y costes
- Mejora en la experiencia de usuario
¿Qué es el Escalado Horizontal?
El escalado horizontal es una técnica de escalado basada en añadir más máquinas o nodos, que repliquen a la máquina original con la finalidad de admitir más carga de trabajo. Aunque funcional, en general, se considera un paradigma de escalado muy basto y poco eficiente, ya que requiere replicar todos los sistemas a otras máquinas.
¿Qué son los Requisitos Funcionales y qué Hacen?
Los requisitos funcionales son aquellos que describen las capacidades específicas y las funciones que un sistema de software debe realizar para cumplir con los objetivos establecidos por los usuarios y las partes interesadas. Estos requisitos responden al “qué hace” el sistema y representan la base para el diseño, desarrollo y validación del software.
Un requisito funcional se enfoca en comportamientos concretos, características o acciones que el sistema debe ofrecer.
¿Qué son los Requisitos No Funcionales y qué Hacen?
Los requisitos no funcionales son aquellos que definen las propiedades y restricciones de calidad que debe cumplir un sistema, en lugar de describir funciones específicas. Estos requisitos responden al “cómo debe comportarse” el sistema para garantizar que sea eficiente, seguro, mantenible, y que cumpla con las expectativas del usuario y las limitaciones técnicas.
Un requisito no funcional abarca aspectos como el rendimiento, la escalabilidad, la usabilidad, la disponibilidad, y otras características técnicas o de calidad que influyen en la experiencia del usuario y en la operación del sistema en su conjunto.
Los requisitos funcionales pueden ser muy variados entre diferentes aplicaciones, sin embargo, los requisitos no funcionales suelen ser muy estándares entre aplicaciones.
¿Qué son los Atributos de Calidad del Software y en qué Factores del Desarrollo Afectan?
Los atributos de calidad del software representan características no funcionales que habitualmente hacen referencia al rendimiento, la eficiencia y/o la capacidad de adaptación de un sistema software a lo largo del tiempo.
Los atributos de calidad del software pueden clasificarse en distintas categorías, una de las clasificaciones más aceptadas, como ya hemos definido, la encontramos en el estándar ISO/IEC 25010 que los divide en las siguientes categorías:
Calidad en el uso: Categoría enfocada en la experiencia del usuario final y su interacción con el software.
- Usabilidad: Facilidad con la que los usuarios pueden aprender y operar el sistema.
- Accesibilidad: Grado en el que el sistema es utilizable por personas con diversas capacidades.
Calidad del producto: Atributos internos del software que influyen en su comportamiento y rendimiento.
- Fiabilidad: Capacidad del sistema para operar sin fallos en condiciones específicas.
- Disponibilidad: Probabilidad de que el sistema esté operativo en un momento dado.
- Eficiencia de desempeño: Uso óptimo de los recursos del sistema.
- Seguridad: Protección contra accesos no autorizados y vulnerabilidades.
Capacidades de mantenimiento y evolución: Características que facilitan la modificación y escalabilidad del software.
- Mantenibilidad: Facilidad con la que se pueden corregir errores y realizar mejoras.
- Escalabilidad: Capacidad de adaptación a mayores demandas sin degradación del rendimiento.
- Modularidad: Diseño del sistema basado en componentes independientes.
Interoperabilidad y portabilidad: Garantizan la integración y ejecución del software en diversos entornos.
- Interoperabilidad: Capacidad del sistema para interactuar con otros sistemas sin restricciones.
- Portabilidad: Facilidad con la que el software puede ser trasladado entre diferentes plataformas y entornos.
¿Qué es la Escalabilidad y sus Estrategias?
Definiremos escalabilidad como la capacidad que tiene el software para poder funcionar correctamente frente a un aumento en la carga de trabajo sin degradar su rendimiento.
Factores y estrategias de implementación:
- Escalabilidad horizontal vs. vertical: La escalabilidad horizontal implica añadir más instancias de un servicio, mientras que la vertical mejora la capacidad de un solo servidor.
- Balanceo de carga: Distribuir las solicitudes entre múltiples servidores para evitar sobrecargas y mejorar la disponibilidad.
- Caché y optimización de consultas: Implementación de almacenamiento en caché y mejora en las consultas a la base de datos para reducir la carga del sistema.
- Arquitecturas basadas en microservicios: División del sistema en componentes independientes que pueden escalarse de forma autónoma.
- Uso de computación en la nube: Aprovechamiento de plataformas como AWS.
¿Diferencias Técnicas de Escalabilidad en Arquitectura Cliente-Servidor?
- Escalado vertical: Aumentar recursos del servidor (CPU, RAM, etc.).
- Escalado horizontal: Añadir más servidores y usar un balanceador de carga.
- Uso de caché: Reducir carga del servidor almacenando respuestas temporales (ej. Redis, cliente web).
- Separación en capas: Dividir la app en presentación, lógica y datos para escalar por partes.
- Clustering y failover: Agrupar servidores para tolerancia a fallos y distribución de carga.
- Colas de mensajes: Procesar tareas asíncronas para evitar cuellos de botella.