Saltar a contenido

Decisiones de arquitectura

Estas son las decisiones de diseño que dan forma a la plataforma. Cada una documenta un problema real, la opción elegida, por qué se descartaron las demás y qué se acepta a cambio. El objetivo es dejar constancia del criterio de ingeniería: no solo qué se usa, sino por qué.

El sistema está calibrado para un régimen de trabajo concreto (del orden de 1500 lecturas por segundo, unos 5 GB al día) con una arquitectura justificada para soportar diez veces esa carga sin reescrituras. Ese principio (construir para hoy, dejar el camino trazado para mañana) recorre casi todas las decisiones.

Decisión Resumen
ADR-0001 Almacenamiento de series temporales: TimescaleDB Una única base Postgres con extensión de series temporales en lugar de un motor columnar separado.
ADR-0002 Protocolo de ingesta: HTTP por lotes Ingesta por HTTP con validación síncrona rica, más un puente MQTT opcional para clientes reales.
ADR-0003 Capa de streaming: Apache Kafka Log durable particionado con fan-out a múltiples consumidores frente a colas o Redis Streams.
ADR-0004 Orquestación de flujos batch: Apache Airflow Orquestador estándar de la industria para los trabajos programados, con UI, reintentos y backfill.
ADR-0005 Procesamiento de streams: Faust Stream processing nativo en Python sobre Kafka, sin introducir una pila JVM.
ADR-0006 Detección de anomalías: Isolation Forest Modelo no supervisado como principal, con un autoencoder como variante comparada por evidencia.
ADR-0007 Predicción de valores futuros: baseline → XGBoost → LSTM Progresión de tres modelos comparados con validación temporal rigurosa.
ADR-0008 Seguimiento de experimentos y registro de modelos: MLflow Plataforma MLOps autohospedada y open source para todo el ciclo de vida del modelo.
ADR-0009 Detección de deriva: Evidently AI Monitorización de deriva de datos y de modelo en batch, open source, integrada con el registro.
ADR-0010 Arquitectura: multi-servicio por dominio Un servicio por área técnica, ni monolito ni microservicios puros.
ADR-0011 Nube (fase 1): traslado directo a Kubernetes gestionado Llevar el clúster entero a la nube sin tocar manifiestos ni código.
ADR-0012 Nube (fase 2): almacén analítico tipo lakehouse Capa fría barata y consultable con el clúster apagado, separada de la operacional.
ADR-0013 Fuente de datos: gemelo digital del invernadero Un simulador con estado, física y fallos frente a datos aleatorios sin sentido.
ADR-0014 Logs: backend de objeto para la agregación Migrar el almacén de logs de disco local a almacenamiento de objetos duradero.
ADR-0015 Recogida de telemetría: agente unificado Sustituir el recolector de logs deprecado por un agente único de logs, métricas y trazas.