ADR: Backend monolitico FastAPI
- Estado: Aceptado
- Fecha: 2025-02-11
Contexto
- Se requiere exponer APIs REST para el panel web y ejecutar jobs batch.
- El equipo domina Python y ya cuenta con servicios escritos en FastAPI + SQLAlchemy.
- El dominio comparte modelos y pipelines (estrategias, news, brainstroms, goal snapshots) que necesitan transacciones consistentes.
Decision
- Mantener un backend monolitico construido en FastAPI 0.120 y Python 3.13.
- Centralizar cron jobs (news, pipelines, training, goal monitor) como modulos del mismo proyecto para reutilizar settings y ORM.
- Postergar migraciones a microservicios hasta que metricas de carga o independencia de dominios lo justifiquen.
Alternativas consideradas
- Microservicios separados (news, IA, analytics): descartado por sobrecosto operativo (multiples despliegues, colas, observabilidad duplicada).
- Serverless Functions para jobs: dependencias nativas (numpy, scikit-learn) complican empaquetado; cron en servidores actuales es suficiente.
- Framework diferente (Django, Node.js): menor encaje con el codigo existente y tooling (Pydantic, SQLAlchemy, Typer scripts).
Consecuencias
- Desarrollo rapido y minimo overhead para compartir modelos y settings.
- Menos latencia entre endpoints y jobs batch (mismo proceso/base de codigo).
- Tightly coupled: despliegues afectan a todo el backend.
- Monitoreo debe cubrir jobs y API en un unico servicio (riesgo de "punto unico de fallo").
Seguimiento
- Revisar trimestralmente metricas de CPU/RAM y tiempos de jobs; si superan SLAs, evaluar extraer pipelines a workers dedicados.
- Documentar nuevos modulos criticos mediante ADRs adicionales (ej. adopcion de colas, particion de base de datos).