Joaquin Martinez

Depura tus errores y construye la mejor versión de ti, cada línea cuenta.

Categorías

Análisis de tradeoffs en arquitectura de software

02-09-2024
Desarrollo de software
Fundamentos de arquitectura de software
Cover Post

¿Qué es un Tradeoff en la Arquitectura de Software?

Son conocidos como compensaciones (tradeoffs). En la arquitectura de software, todo es un tradeoff, por lo que es vital analizarlos para comprender sus ventajas y desventajas. Este post explora cómo aplicar este concepto en decisiones de diseño de software para construir sistemas robustos y eficientes.

alt text

Con la ayuda de este gráfico, podemos diferenciar los distintos tipos de tradeoffs:

  • Tradeoffs de arquitectura: Corresponden a decisiones con mayor impacto, que requieren un análisis más profundo y una dedicación considerable de tiempo. Estas decisiones son difíciles de revertir una vez implementadas.
  • Tradeoffs de diseño de software: Involucran decisiones con menor impacto, que demandan menos tiempo de análisis e implementación. A menudo, son reversibles o más fáciles de ajustar a medida que el proyecto avanza.

Ejemplo Práctico: Comunicación en un E-commerce

Imaginemos un caso práctico en un e-commerce, específicamente el carrito de compras, que necesita comunicarse con la pasarela de pago y el control de inventario.

alt text

Existen dos formas principales de implementar esta comunicación: tópicos y colas de mensajes.

Tópicos (Pub/Sub)

En una implementación por tópicos, el carrito (productor) publica un mensaje en un tópico. Los suscriptores, como los servicios de pagos e inventario (consumidores), reciben una copia de esa notificación. Esta arquitectura es altamente escalable y extensible; si se necesita agregar un nuevo consumidor, como un servicio de historial de transacciones, basta con suscribirlo al mismo tópico sin modificar la infraestructura existente.

Colas de Mensajes

En esta implementación, el carrito envía mensajes a través de colas independientes, una para la pasarela de pago y otra para el control de inventario. A diferencia de los tópicos, agregar un nuevo consumidor implica crear una nueva cola de mensajes y la lógica asociada, lo que hace que la mantenibilidad sea más compleja a medida que el sistema crece.

Comparación de Ventajas y Desventajas

Al analizar estas dos implementaciones, el concepto de tradeoff cobra sentido. Aquí comparamos sus características clave en términos de seguridad, rendimiento y escalabilidad.

alt text

Implementación por Tópicos

  • Ventajas:
    • Extensibilidad y desacoplamiento: Es fácil agregar nuevos consumidores o servicios. La arquitectura se mantiene flexible y los servicios no tienen conocimiento directo unos de otros.
  • Desventajas:
    • Acceso generalizado a la información: Todos los consumidores reciben el mismo mensaje, lo que puede suponer un riesgo de seguridad al exponer información sensible a servicios que no la requieren. Por ejemplo, el servicio de inventario no debería tener acceso a los datos de la tarjeta de crédito del cliente.
    • Carga en el rendimiento: El envío de información adicional innecesaria a todos los suscriptores puede afectar la eficiencia, especialmente en sistemas de alto volumen.

Implementación de Cola de Mensajes

  • Ventajas:
    • Acceso granular y contratos únicos: Cada consumidor recibe solo la información específica que necesita, eliminando riesgos de seguridad. Los contratos de mensaje son más pequeños y específicos para cada servicio.
  • Desventajas:
    • Mantenibilidad y acoplamiento: A medida que el número de servicios aumenta, la gestión de múltiples colas se vuelve más compleja, dificultando el mantenimiento. Si un mensaje debe cambiar, es necesario coordinar el cambio en múltiples colas y con múltiples consumidores.

alt text

En el ejemplo del e-commerce, la seguridad podría tener mayor importancia que la extensibilidad. Por ello, la elección de una cola de mensajes podría ser el tradeoff más adecuado, a pesar de sus desventajas en mantenibilidad. La clave es entender que no hay una única solución correcta, sino una decisión que mejor se alinee a los requisitos del sistema.

¿Para qué sirve este análisis?

El análisis de tradeoffs permite a los arquitectos y desarrolladores tomar decisiones informadas, equilibrando requisitos opuestos como la seguridad frente a la extensibilidad, o el rendimiento frente a la mantenibilidad. Es una habilidad fundamental en la arquitectura de software para construir sistemas que no solo funcionen, sino que sean robustos y sostenibles a largo plazo.

Errores comunes y recomendaciones

  • No analizar el contexto: Un error común es aplicar una solución “por defecto” sin considerar las necesidades específicas del proyecto. Lo que funciona para un sistema de streaming en tiempo real podría no ser la mejor opción para un sistema bancario.
  • Ignorar los requisitos no funcionales: Las decisiones de arquitectura de software no solo se basan en la funcionalidad. El rendimiento, la seguridad, la escalabilidad y la mantenibilidad son igual de importantes y deben ser parte del análisis de tradeoffs.
  • Falta de documentación: Es vital documentar las decisiones de tradeoff y las razones detrás de ellas. Esto facilita que nuevos miembros del equipo entiendan la arquitectura y evita que se tomen decisiones redundantes en el futuro.

Post Siguiente

Componentes esenciales de un sistema de software: más allá del código

Post Anterior

El rol del arquitecto y desarrollador: Una guía práctica para la colaboración