1 Febrero 2023 🎱

  • Registro de decisiones arquitectónicas: anotación de las ventajas e inconvenientes de una arquitectura de software
  • Todas las arquitecturas son diseños, pero no todas las decisiones de diseño son arquitecturas
  • Cualquier solucion en AS es un trade-off (compromiso)

Leyes de la arquitectura del software

  • Todas las soluciones tienen desventajas

  • El porqué codificar algo es más importante que el cómo codificarlo

  • Las restricciones te evitan tomar decisiones de diseño, pues te vienen impuestas

Tipos de sistemas

  • greenfield en dominios nuevos: algo nuevo

  • greenfield en dominios maduros: algo nuevo en una empresa ya existente

  • brownfield: software ya existente que se ha de modificar

  • Objetivo de la arquitectura del software: comentar la solución de diseño al equipo

  • El código no explica el software

  • La documentación ha de:

    • reflejar la realidad
    • ser comprensible por las distintas personas interesadas (stakeholders)
    • adaptarse a cambios
  • Stakeholder: personas interesadas en el software


8 Febrero 2023 🛣️

  • Arquitecto de software es un rol, no un rango
  • Expectativas de un arquitecto:
    • Tomar decisiones arquitectónicas
    • Analizar continuamente la arquitectura
    • Estar al día de las tendencias actuales
    • Asegurar cumplimiento decisiones existentes
    • Experiencia diversa
    • Conocimiento del dominio de negocio
    • Poseer habilidades interpersonales
    • Comprender y navegar en política empresarial

Maniobra inversa de Conway

Ley de Brook

  • Añadir más personas a un equipo que va retrasado hace que se retrase más todavía

Identificando stakeholders

Atributos de calidad

  • Son las características de la arquitectura junto con los requisitos no-funcionales

  • Tipos de requisitos:

  • Los funcionales se suelen cumplir.

  • Los no funcionales (velocidad, accesibilidad, disponibilidad) es lo difícil.

  • Los atributos de calidad han de comprobarse en los escenarios de calidad.

  • Árbol de atributos de calidad: usar mindmap

4 métricas clave (métricas DORA)

Origen: Informe State of DevOps de DORA (equipo DevOps Research and Assessment Miden rendimiento de la entrega de software

  1. Lead time to change (tiempo de espera para cambios) Tiempo desde que se hace commit hasta que código va a producción
  2. Frecuencia de despliegue Frecuencia con la que se despliega código en producción
  3. Tiempo medio de restauración (MTTR) Cuánto tiempo se tarda en restaurar un servicio tras un incidente
  4. Tasa de fallos tras cambios Porcentaje de cambios en producción que resultan en fallos https://www.devops-research.com/quickcheck.html

22 Febrero 2023 🍐

ADD: Attribute-driven design

  • No se usa en las empresas porque es difícil de seguir

  • Es importante hacer un registro de decisiones arquitectónicas

  • Riesgo: algo malo que puede o no ocurrir

  • Se suelen crear tablas de riesgo (tablas de matriz de riesgo)

  • Los problemas que no se arreglan pueden generar una deuda técnica (technical debt)

Técnicas de arquitectura del software

Herramientas de un arquitecto del software

  • Tácticas: estrategia a seguir para resolver un atributo de calidad
  • Estilos arquitectónicos: definen la forma general del sistema
  • Patrón arquitectónico: solución general y reutilizable a algún problema recurrente que aparece en un contexto. Hay 3 tipos:
    • Estructurales
    • Runtime (comportamiento)
    • Despliegue
  • Patrón vs Estilo:
    • Los estilos, en general, son independientes entre sí
    • Un patrón puede relacionarse con otros patrones
  • Arquitecturas de referencia
  • Componentes desarrollados externamente (stack tecnológico): tecnologías que suelen ir muy bien de la mano

Taxonomía del software, patrones, estilos y tácticas

  • Cada vez más el software se está volviendo un servicio en lugar de ser un producto.
  • Tenemos que afrontar que el software va a cambiar
  • Tenemos que ser capaces de atomatizar la contrucción
  • Modelo en V
  • Big Design Up Front: dedicarse únicamente a diseñar es una mala práctica
  • Hay que intentar que las pruebas sean automáticas
  • Principios FIRST:
    • Fast
    • Independent
    • RepeatableSelf-checking
    • Timely

1 Marzo 2023 🗳️

  • Módulo: algo que identificamos a la hora de construír

  • Componente: algo que se puede identificar en tiempo de ejecución

  • Principio de Responsabilidad Única: un módulo debe tener una única responsabilidad

  • Un módulo debería ser abierto para extender pero cerrado para modiicar su propio código


8 Marzo 2023 🌹

Flujos de datos

TipoVentajasInconvenientes
Secuencial - BatchPoco acoplamiento entre componentes, reconfigurabilidad y depuraciónSin interfaz, requiere intervención externa, sin concurrencia y alta latencia
Pipes & FiltersComprensión global, reconfiguración, evolución y extensibilidad, testabilidad y rendimientoPosibles retardos, difícil pasar estructuras de datos complejas, sin interactividad, backpressure(se reciben más datos de los que se pueden procesar)
Pipes & Filters-Interfaz uniformeFacilita el desarrollo independiente de filtros, más fácil de comprender, fácil reconfiguraciónEmperora el rendimiento si los datos deben transformarse
Master-slaveComputacuón paralela, tolerancia a fallosDificultad de coordinación entre los nodos slaves, dependencia del Master, dependencia de configuración física
MVCMúltiples vistas del mismo modelo, sincronización de vistas, separación de incumbencias, facilidad para crear nuevas vistas y controladores, potencial para creación de marcos genéricosMayor complejidad en desarrollos de GUIS, Acoplación entre Modelos y Vistas, Controlador/Vista depende de la nterfaz del modelo, Dificultades con herramientas GUI
PACSeparación de responsabilidades, soporte para cambios y extensiones, multitareaComplejidad del sistema, del componente de control y rendimiento
Datos compartidosComponentes independientes, facilita comunicación entre componentes, consistencia de datosPunto de fallo único, posible cuello de botella, Sincronización en acceso a memoria compartida
BlackboardExperimentación, reusabilidad, tolerancia a fallosDepuración, rendimiento, alto coste de desarrollo
Sistemas basados en reglasMantenibilidad, separación de responsabilidades, reutilizaciónDepuración, rendimiento, creación y mantenimiento de las reglas
Call-returnSencillo de implementarEjecución concurrente, entornos distribuidos
Cliente-ServidorServidores pueden estar distribuidos, separación de funcionalidad cliente/sevidor, funcionalidad general disponible para todos los clientesCada servidor puede ser un punto de fallo, rendimiento impredecible, seguridad
Servidor replicadoMejora tiempos de respuesta, menor latencia, tolerancia a fallosmantenimiento de consistencia, sincronización
Cliente-Servidor con cachéMenor carga en la red, menor tiempo de respuestaComplejidad de configuración, no apropiado en ciertos dominios
Basado en eventosdesacoplamiento, atemporalidad, asincronicidadSolución no secuencial, consistencia del sistema, dificultad de depuración
Publish-subscribecalidad de comunicación, bajo acoplamiento, escalabilidadse añade nivel de indirección, implementación compleja
Modelos de actoresparalelismo, transparencia y escalabilidad, modelos de actores no localesenvío de mensajes, coordinación entre actores, sistemas no consistentes por definición
CQRSescalabilidad, facilita descomposición de equiposoperaciones híbridas(consulta/comando), complejidad, sincronización
Event-Sourcingtolerancia a fallos, trazabilidad, reconstrucción, escalabilidadnovedad desarrollo, consistencia de datos, actualización software, gestión de recursos
Pluginsextensibilidad, personalizaciónconsistencia, rendimiento, seguridad, gestión de plugins y dependencias
Microkernelportabilidad, flexibilidad y extensibilidad, seguridad y fiabilidadrendimiento, complejidad del diseño, punto de fallo único
Reflectionflexibilidadimplementación, rendimiento, seguridad
Intérpretes y DSLsflexiilidad, usabilidad, adaptabilidaddiseño del lenguaje, complejidad de implementación, rendimiento, seguridad
Código móvilflexibilidad y adaptación a diferentes entornoscomplejidad de la implementación, seguridad
Código bajo demandamejora experiencia de usuario, extensibilidad, adaptación a entorno del clienteseguridad, coherencia
Evaluación remotaAprovechar capacidades de terceras partesseguridad, configuración
Agentes móvilesreducción del tráfico en la red, paralelismo implícito, tolerancia a fallos de red, conceptualmente sencillos, adaptación a cambios en el entornocomplejidad de la configuración, seguridad