Experimentos de arquitectura - JuanHerreraP/Proyecto-MISO-Solventa-Grupo-11 GitHub Wiki
Experimento 1 - Latencia del perfilamiento mediante Cache-Aside
Descripción del experimento
Elemento
Descripción
Título del experimento
Validación de latencia del perfilamiento mediante Cache-Aside
Propósito del experimento
Validar si la utilización de una caché de perfiles permite disminuir el impacto de las consultas a Open Finance y Open Data sobre el tiempo total de perfilamiento. El punto de sensibilidad corresponde al uso de la información almacenada en Redis antes de realizar una consulta a los proveedores externos.
Resultados esperados
El sistema debe generar el perfil de riesgo individualizado y el precio personalizado cumpliendo el escenario EC02: p95 ≤ 400 ms y p99 ≤ 800 ms. Se comparará el comportamiento cuando el perfil se encuentra disponible en caché frente al escenario en el que es necesario consultar las fuentes externas.
Recursos requeridos
Servicio de Perfilamiento y servicio de Cotización desarrollados con FastAPI, ElastiCache Redis, adaptadores de Open Finance y Open Data, servicios externos simulados, ambiente AWS y k6 para generación de carga y medición de tiempos de respuesta.
Elementos de arquitectura involucrados
ASR: EC02 - Latencia.
Vistas involucradas: Vista funcional general y Vista de despliegue.
Elementos: Perfilamiento de Riesgo, Cotización y Precio, ElastiCache Redis y adaptadores de Open Finance/Open Data.
Punto de sensibilidad: consulta y reutilización del perfil almacenado en caché antes de realizar las llamadas a proveedores externos.
Esfuerzo estimado
24 horas-hombre como estimación inicial propuesta, distribuidas entre los cuatro integrantes.
Hipótesis de diseño
Elemento
Hipótesis de diseño
Punto de sensibilidad
Uso del perfil almacenado en ElastiCache Redis antes de realizar nuevas consultas a Open Finance y Open Data.
Hipótesis de diseño
Si Solventa utiliza el patrón Cache-Aside con ElastiCache Redis para reutilizar perfiles de riesgo vigentes, entonces el proceso de perfilamiento podrá cumplir EC02, manteniendo p95 ≤ 400 ms y p99 ≤ 800 ms, al disminuir las consultas que dependen directamente de los proveedores externos.
Historia de arquitectura asociada
EC02 - Latencia: perfilamiento y personalización dentro del recorrido de compra del seguro de vida hipotecario.
Nivel de incertidumbre
Alto. La arquitectura contempla el uso de caché para reducir la dependencia de los proveedores externos, pero aún no se cuenta con resultados experimentales que demuestren que esta decisión permite alcanzar los percentiles definidos en EC02.
El servicio de Perfilamiento consulta primero ElastiCache Redis. Si encuentra un perfil vigente, utiliza esta información. Si no existe, consulta Open Finance/Open Data mediante sus adaptadores y posteriormente almacena el resultado en la caché.
Tácticas de Arquitectura asociadas al experimento
Táctica de Arquitectura asociada al experimento
Descripción
Maintain multiple copies of data or computations
Táctica de performance orientada a mantener copias de datos o cálculos para disminuir contención y tiempo de respuesta. En Solventa se concreta mediante la copia temporal del perfil de riesgo almacenada en ElastiCache Redis, evitando repetir una consulta externa cuando existe información vigente.
Listado de componentes involucrados en el experimento
Microservicio / Componente
Propósito y comportamiento esperado
Tecnología asociada
Perfilamiento de Riesgo
Generar el perfil de riesgo del cliente. Debe consultar primero la información disponible en caché y recurrir a las fuentes externas cuando sea necesario.
Python + FastAPI / ECS Fargate
Cotización y Precio
Utilizar el perfil de riesgo para generar el precio personalizado de la oferta.
Python + FastAPI / ECS Fargate
Adaptador Open Finance
Traducir las solicitudes del dominio al contrato del proveedor de Open Finance cuando sea necesaria una consulta externa.
AWS Lambda
Adaptador Open Data
Traducir las solicitudes del dominio al contrato de las fuentes de Open Data cuando sea necesaria una consulta externa.
AWS Lambda
Listado de conectores involucrados en el experimento
Conector
Comportamiento deseado en el experimento
Tecnología asociada
Solicitud de perfilamiento
Recibir la solicitud y retornar el resultado dentro de los tiempos establecidos por EC02.
HTTP/HTTPS - API REST
Perfilamiento - Caché
Consultar si existe un perfil vigente y recuperar la información cuando corresponda.
ElastiCache Redis
Perfilamiento - Adaptadores externos
Realizar la consulta externa únicamente cuando la información requerida no se encuentre disponible en caché.
Comunicación hacia adaptadores AWS Lambda
Adaptador - Proveedor externo simulado
Permitir simular respuestas de Open Finance y Open Data con tiempos de respuesta controlados para observar su impacto sobre el perfilamiento.
HTTP/HTTPS - Mock/Stub
Tecnología asociada con el experimento
Tecnología asociada con el experimento
Justificación
Lenguajes de programación
Python, definido para los servicios backend de Solventa.
Plataforma de despliegue
AWS ECS Fargate para los servicios de dominio y AWS Lambda para los adaptadores externos, de acuerdo con la vista de despliegue.
Bases de datos / almacenamiento
PostgreSQL y ElastiCache Redis, utilizado por la arquitectura como caché de perfiles y cotizaciones.
Herramientas de análisis
k6, definido en la estrategia de pruebas para validar los escenarios de latencia y escalabilidad EC01-EC04.
Librerías
redis (redis-py) para implementar la comunicación del servicio de Perfilamiento con ElastiCache Redis; httpx para las llamadas HTTP hacia los adaptadores/proveedores simulados; pytest y pytest-asyncio para automatizar los escenarios de cache hit, cache miss, expiración y respuesta de proveedores externos.
Frameworks de desarrollo
FastAPI, framework definido para los servicios backend de Solventa.
Interpretación de resultados
Resultado obtenido
Interpretación
p95 ≤ 400 ms y p99 ≤ 800 ms
La evidencia obtenida soporta la hipótesis de que el uso de Cache-Aside permite cumplir EC02 bajo las condiciones evaluadas.
p95 > 400 ms o p99 > 800 ms
La hipótesis no queda validada bajo las condiciones del experimento y será necesario revisar la decisión de diseño o su configuración.
El requisito se cumple únicamente cuando existe información en caché
El experimento evidencia que la estrategia es efectiva para cache hits, pero también muestra una sensibilidad importante frente a los cache misses y las consultas a los proveedores externos. Esta condición deberá documentarse como resultado del experimento.
Distribución de actividades por integrante
Integrante
Tareas a realizar
Esfuerzo estimado
Ana María Solano
Preparar los escenarios del experimento y el script de carga en k6; consolidar las métricas p95 y p99.
6 h*
Juan Esteban Herrera
Preparar el servicio de Perfilamiento y el flujo de consulta hacia ElastiCache Redis.
6 h*
Harold Virguez
Preparar los servicios simulados de Open Finance/Open Data y los escenarios con diferentes tiempos de respuesta.
6 h*
Fernando Parra
Preparar el ambiente de ejecución y consolidar las métricas obtenidas durante las pruebas.
6 h*
Total
24 h*
*Estimación inicial
Experimento 2 - Escalabilidad del servicio de cotización
Descripción del experimento
Elemento
Descripción
Título del experimento
Validación del autoescalado del servicio de Cotización y Precio
Propósito del experimento
Validar si el despliegue del servicio de Cotización y Precio en ECS Fargate con autoescalado permite incrementar su capacidad frente a una campaña masiva de un socio. El punto de sensibilidad corresponde a la cantidad de recursos y réplicas disponibles para atender el incremento de solicitudes.
Resultados esperados
Cumplir EC03: escalar de 500 a 50.000 cotizaciones por minuto, conservando el p95 de latencia y logrando que el autoescalado agregue capacidad en ≤ 60 segundos.
Recursos requeridos
Servicio de Cotización y Precio desarrollado con FastAPI, API Gateway, Application Load Balancer, ECS Fargate, ECS Auto Scaling, ambiente AWS y k6 para generación de carga.
Elementos de arquitectura involucrados
ASR: EC03 - Escalabilidad.
Vista involucrada: Vista de despliegue.
Elementos: API Gateway, Application Load Balancer, Distribución y Socios, Cotización y Precio y ECS Fargate con autoescalado.
Punto de sensibilidad: cantidad y capacidad de las réplicas disponibles para procesar solicitudes de cotización frente a un incremento súbito de carga.
Esfuerzo estimado
24 horas-hombre como estimación inicial propuesta, distribuidas entre los cuatro integrantes.
Hipótesis de diseño
Elemento
Hipótesis de diseño
Punto de sensibilidad
Cantidad de recursos y réplicas del servicio de Cotización y Precio disponibles ante el crecimiento súbito del tráfico.
Hipótesis de diseño
Si el servicio de Cotización y Precio se ejecuta como un servicio sin estado sobre ECS Fargate y puede aumentar horizontalmente el número de réplicas disponibles, entonces Solventa podrá incrementar su capacidad de 500 a 50.000 cotizaciones/minuto, conservando el p95 de latencia y agregando capacidad en ≤ 60 segundos.
Historia de arquitectura asociada
EC03 - Escalabilidad: un socio de distribución lanza una promoción que incrementa 100 veces el tráfico de cotizaciones.
Nivel de incertidumbre
Alto. La arquitectura define ECS Fargate con autoescalado, pero es necesario comprobar experimentalmente si el incremento de capacidad ocurre dentro de los 60 segundos exigidos y si el p95 se conserva durante el pico.
Los servicios de Solventa se ejecutan mediante ECS Fargate y pueden mantener múltiples réplicas. ECS Auto Scaling aumenta o disminuye la cantidad de réplicas según la carga, mientras el Application Load Balancer distribuye las solicitudes entre las instancias disponibles.
Tácticas de Arquitectura asociadas al experimento
Táctica de Arquitectura asociada al experimento
Descripción
Introduce concurrency
Permite procesar múltiples solicitudes en paralelo, reduciendo el tiempo bloqueado cuando varias solicitudes compiten por capacidad de procesamiento. En el experimento se concreta mediante múltiples tareas de ECS Fargate procesando solicitudes simultáneamente.
Maintain multiple copies of data or computations
La táctica permite mantener múltiples copias de una computación para disminuir contención sobre un único recurso. En Solventa se materializa mediante varias réplicas del servicio de Cotización y Precio ejecutándose en ECS Fargate.
Increase available resources
Consiste en aumentar los recursos disponibles para atender la demanda. En el experimento se aplica mediante ECS Auto Scaling, que incrementa la cantidad de tareas disponibles ante el crecimiento del tráfico.
Listado de componentes involucrados en el experimento
Microservicio / Componente
Propósito y comportamiento esperado
Tecnología asociada
Distribución y Socios
Atender las solicitudes originadas por los socios de distribución y dirigirlas hacia los servicios de dominio requeridos.
Python + FastAPI / ECS Fargate
Cotización y Precio
Procesar las solicitudes de cotización y permitir que su capacidad aumente horizontalmente mediante múltiples réplicas.
Python + FastAPI / ECS Fargate
Listado de conectores involucrados en el experimento
Conector
Comportamiento deseado en el experimento
Tecnología asociada
Socio - API Gateway
Recibir el incremento de solicitudes generado durante el experimento.
HTTPS / AWS API Gateway
API Gateway - Application Load Balancer
Enrutar las solicitudes recibidas hacia la capa de cómputo de Solventa.
AWS API Gateway / ALB
Application Load Balancer - ECS Fargate
Distribuir las solicitudes entre las réplicas disponibles del servicio.
AWS Application Load Balancer
Métricas - ECS Auto Scaling
Permitir que la política de escalamiento aumente el número de tareas disponibles cuando la carga lo requiera.
AWS ECS Auto Scaling / métricas de AWS
Tecnología asociada con el experimento
Tecnología asociada con el experimento
Justificación
Lenguajes de programación
Python, definido para los servicios backend de Solventa.
Plataforma de despliegue
AWS ECS Fargate, plataforma de cómputo con autoescalado.
Bases de datos
PostgreSQL
Herramientas de análisis
k6, definido para las pruebas de carga de EC01-EC04. Las métricas de AWS permitirán observar la cantidad de tareas y el comportamiento del escalamiento.
Librerías
No se requiere una librería adicional específica definida actualmente en la arquitectura para realizar el experimento de autoescalado.
Frameworks de desarrollo
FastAPI, framework utilizado para los servicios backend.
Interpretación de resultados
Resultado obtenido
Interpretación
50.000 cotizaciones/min, p95 conservado y capacidad agregada en ≤ 60 s
La evidencia obtenida soporta la hipótesis y permite considerar satisfecha la respuesta esperada de EC03 bajo las condiciones del experimento.
Se alcanzan 50.000 cotizaciones/min, pero se degrada el p95
La capacidad aumenta, pero la hipótesis no se valida completamente porque EC03 exige conservar el p95.
El autoescalado requiere más de 60 s
La hipótesis no se valida respecto al tiempo de reacción definido en EC03.
No se alcanza la carga objetivo
La capacidad o configuración utilizada no es suficiente para satisfacer EC03 y deberá revisarse la decisión o configuración arquitectónica.
Distribución de actividades por integrante
Integrante
Tareas a realizar
Esfuerzo estimado
Ana María Solano
Preparar el escenario de carga en k6 y configurar el incremento desde la carga inicial hasta la carga objetivo.
6 h*
Juan Esteban Herrera
Preparar el servicio de Cotización y Precio y verificar su ejecución mediante múltiples réplicas.
6 h*
Harold Virguez
Preparar la configuración de ECS Fargate y ECS Auto Scaling requerida para ejecutar el experimento.
6 h*
Fernando Parra
Ejecutar el experimento, consolidar tiempos de escalamiento, p95, throughput y resultados.
6 h*
Total
24 h*
*Estimación inicial.
Experimento 3 - Facilidad de modificación mediante Puertos y Adaptadores
Descripción del experimento
Elemento
Descripción
Título del experimento
Validación del aislamiento de cambios de proveedor mediante Puertos y Adaptadores
Propósito del experimento
Validar si la utilización de Puertos y Adaptadores permite sustituir un proveedor KYC sin propagar cambios hacia el servicio de Identidad y los demás componentes consumidores. El punto de sensibilidad corresponde al contrato definido entre el dominio y el adaptador externo.
Resultados esperados
El proveedor KYC debe poder sustituirse modificando o incorporando únicamente el adaptador correspondiente y su configuración, manteniendo cero cambios en los componentes consumidores, de acuerdo con el criterio disponible de EC06.
Recursos requeridos
Servicio de Identidad, KYC y Consentimiento, puerto IdentityVerificationProvider, adaptador KYC, dos proveedores KYC simulados con contratos diferentes, Pytest y GitHub Actions para ejecutar las pruebas de regresión.
Elementos de arquitectura involucrados
ASR: EC06 - Facilidad de modificación.
Vistas involucradas: Vista funcional general y Vista de despliegue.
Elementos: Identidad, KYC y Consentimiento; IdentityVerificationProvider; Adaptador KYC y proveedor KYC.
Punto de sensibilidad: estabilidad de la interfaz interna utilizada por el dominio frente al cambio de proveedor externo.
Esfuerzo estimado
24 horas-hombre como estimación inicial propuesta, distribuidas entre los cuatro integrantes.
Hipótesis de diseño
Elemento
Hipótesis de diseño
Punto de sensibilidad
Contrato del puerto IdentityVerificationProvider entre el servicio de Identidad y la implementación específica del proveedor KYC.
Hipótesis de diseño
Si la integración de KYC se implementa mediante el patrón Puertos y Adaptadores, manteniendo una interfaz interna estable entre el dominio y los proveedores externos, entonces será posible sustituir un proveedor KYC sin modificar los componentes consumidores del dominio.
Historia de arquitectura asociada
EC06 - Facilidad de modificación: cambio del proveedor KYC o de pagos por uno nuevo.
Nivel de incertidumbre
Alto. La arquitectura establece interfaces y adaptadores para desacoplar los proveedores externos, pero debe comprobarse que el contrato diseñado realmente evita la propagación de cambios cuando el proveedor utiliza un contrato diferente.
Los servicios del dominio utilizan puertos internos que expresan las operaciones requeridas por Solventa. Los adaptadores implementan estos contratos y traducen entre el modelo interno y las particularidades de cada proveedor externo.
Tácticas de Arquitectura asociadas al experimento
Táctica de Arquitectura asociada al experimento
Descripción
Hide information
Las particularidades del proveedor KYC, como contratos, formatos, URL y mecanismos específicos de integración, permanecen ocultas dentro del adaptador y no son conocidas por el servicio consumidor.
Maintain existing interfaces
El servicio de Identidad continúa utilizando el mismo puerto IdentityVerificationProvider aunque cambie la implementación encargada de comunicarse con el proveedor externo. Esto busca evitar que el cambio se propague hacia los consumidores.
Use an intermediary
El adaptador funciona como intermediario entre el servicio de dominio y el proveedor KYC, traduciendo el contrato externo al contrato interno de Solventa y absorbiendo las diferencias entre proveedores.
Listado de componentes involucrados en el experimento
Microservicio / Componente
Propósito y comportamiento esperado
Tecnología asociada
Identidad, KYC y Consentimiento
Solicitar la verificación de identidad mediante el puerto interno. Su implementación no debe cambiar al sustituir el proveedor KYC.
Python + FastAPI / ECS Fargate
Adaptador KYC
Implementar el puerto de verificación de identidad y traducir entre el modelo interno de Solventa y el contrato particular del proveedor externo.
AWS Lambda
Proveedor KYC simulado A
Representar el proveedor inicialmente utilizado durante el experimento.
Mock/Stub
Proveedor KYC simulado B
Representar un segundo proveedor con un contrato externo diferente para comprobar si el cambio permanece aislado en el adaptador.
Mock/Stub
Listado de conectores involucrados en el experimento
Conector
Comportamiento deseado en el experimento
Tecnología asociada
Identidad - Puerto KYC
Mantener un contrato estable independientemente del proveedor externo configurado.
IdentityVerificationProvider
Puerto - Adaptador KYC
Delegar la verificación hacia la implementación correspondiente sin exponer detalles del proveedor al dominio.
Interfaz interna / implementación del adaptador
Adaptador - Proveedor KYC
Traducir la solicitud y respuesta según el contrato particular de cada proveedor.
HTTP/HTTPS
Pruebas - Servicio de Identidad
Ejecutar el mismo conjunto de pruebas antes y después del reemplazo del proveedor para detectar propagación de cambios o regresiones.
Pytest / GitHub Actions
Tecnología asociada con el experimento
Tecnología asociada con el experimento
Justificación
Lenguajes de programación
Python, lenguaje definido para los servicios backend y adaptadores de Solventa.
Plataforma de despliegue
AWS ECS Fargate para los servicios de dominio y AWS Lambda para los adaptadores externos, según la vista de despliegue.
Bases de datos
PostgreSQL.
Herramientas de análisis
Pytest para verificar el comportamiento del servicio antes y después de sustituir el proveedor y GitHub Actions para ejecutar la regresión automatizada.
Librerías
pytest para las pruebas de regresión, httpx para la comunicación HTTP con los proveedores KYC simulados y pytest-mock para simular las dependencias externas durante el experimento.
Frameworks de desarrollo
FastAPI para los servicios backend. Los contratos de las APIs se documentan mediante OpenAPI.
Interpretación de resultados
Resultado obtenido
Interpretación
El proveedor se sustituye modificando únicamente el adaptador y existen cero cambios en los consumidores
La evidencia obtenida soporta la hipótesis de diseño y el criterio evaluado de EC06.
Es necesario modificar el servicio de Identidad u otro consumidor
La hipótesis queda refutada porque el cambio del proveedor se propagó fuera del adaptador.
Es necesario modificar el puerto IdentityVerificationProvider
El contrato interno presenta acoplamiento con las particularidades del proveedor y debe revisarse antes de considerar validada la hipótesis.
El cambio queda aislado en el adaptador, pero aparecen fallos en la regresión
La localización estructural del cambio funciona, pero la sustitución no mantiene completamente el comportamiento esperado. Se requiere analizar los contratos y transformaciones involucrados.
Distribución de actividades por integrante
Integrante
Tareas a realizar
Esfuerzo estimado
Ana María Solano
Definir y automatizar los casos que permitan comprobar que el consumidor mantiene el mismo comportamiento antes y después del cambio de proveedor.
6 h*
Juan Esteban Herrera
Preparar el puerto IdentityVerificationProvider y el adaptador correspondiente al primer proveedor.
6 h*
Harold Virguez
Preparar el segundo proveedor simulado y su adaptador manteniendo el contrato interno definido.
6 h*
Fernando Parra
Ejecutar la regresión, revisar los componentes modificados y consolidar la evidencia del experimento.
6 h*
Total
24 h*
*Estimación inicial.
Resumen de experimentos
Experimento
ASR
Patrón principal
Tácticas de arquitectura evaluadas
Latencia del perfilamiento
EC02
Cache-Aside
Maintain multiple copies of data or computations
Escalabilidad de cotización
EC03
Redundancia Multi-AZ y Autoescalado
Introduce concurrency; Maintain multiple copies of data or computations; Increase available resources
Cambio de proveedor KYC
EC06
Puertos y Adaptadores
Hide information; Maintain existing interfaces; Use an intermediary
Referencias Tácticas de Arquitectura
Software Architecture in Practice. 4th Edition. Len Bass, Paul Clements, Rick Kazman. SEI Series in Software Engineering. Adisson- Wesley. 2022. ISBN-13: 978-0-13-688609-9