Saltar a contenido

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#

  1. Microservicios separados (news, IA, analytics): descartado por sobrecosto operativo (multiples despliegues, colas, observabilidad duplicada).
  2. Serverless Functions para jobs: dependencias nativas (numpy, scikit-learn) complican empaquetado; cron en servidores actuales es suficiente.
  3. 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).