Arquitectura (visión general)
Qué tipo de arquitectura es INDUXA, con qué tecnologías está hecha y cómo escala.
INDUXA es una sola plataforma para cuatro productos: Industrial, Agro IoT, Desk y la app Agro Campo. No son cuatro sistemas. Es el mismo despliegue, la misma base de datos y el mismo flujo de datos. La separación entre empresas la hace la base de datos con seguridad por filas (RLS): cada empresa ve solo lo suyo.
Qué tipo de arquitectura es
| Rasgo | En INDUXA |
|---|---|
| Multiempresa (SaaS) | Un despliegue atiende a todas las empresas; RLS separa sus datos. El mismo paquete se instala en el servidor de un cliente, con su licencia. |
| Orientada a eventos | Los equipos publican mensajes (MQTT o HTTPS) y todo pasa por Apache Kafka. Cada parte lee de Kafka por su cuenta: si una se detiene, las demás siguen y nada se pierde. |
| Kappa | Un solo camino de datos: el flujo. No hay una segunda capa por lotes que recalcule todo, como en Lambda. Ver Flujo de datos. |
| Por capas de datos | Cruda (bronce) → limpia por tag (plata) → agregada para el negocio (oro). |
| Monolito modular | La API de negocio es una sola aplicación (NestJS) dividida en módulos comunes y uno por producto. |
| Con borde (edge) | Gateways propios en el campo y en la planta, y un agente en cada PC: guardan en cola cuando no hay señal. |
Ecosistema de tecnologías
Así se ven las piezas por capa, al estilo del diagrama del ecosistema Hadoop:
| Capa | Tecnologías | Para qué |
|---|---|---|
| Borde | Gateway en Python (Raspberry Pi o PC), nodos ESP32 con LoRa, agente Desk en .NET, app Android (Expo) | Leer equipos y PLC, y enviar los datos con cola sin señal |
| Entrada | EMQX (MQTT), ingesta HTTPS, conectores, MediaMTX (video) | Recibir datos y autenticar cada equipo |
| Mensajería | Apache Kafka | Guardar unos días todo lo que llega y repartirlo |
| Procesamiento | Telemetría en Node.js | Normalizar, guardar, evaluar reglas, avisar, calcular |
| Almacenamiento | PostgreSQL 16 + TimescaleDB + PostGIS; Amazon S3 o SeaweedFS | Negocio, series de tiempo, mapas y archivos |
| Negocio | API en NestJS (TypeScript) | Todo lo que se consulta o cambia, con permisos y bitácora |
| Consola | Next.js, ECharts, Leaflet | Pantallas, gráficos, PDF y mapas |
| Inteligencia | ONNX (predicciones), Claude de Anthropic (Chat IA y diagnóstico por foto) | Anomalías, pronósticos y consultas en lenguaje natural |
| Seguridad | Authentik, CrowdSec, RLS en Postgres | Inicio de sesión, bloqueo de IPs atacantes y aislamiento por empresa |
| Orquestación | k3s (Kubernetes ligero), Traefik | Contenedores, entrada HTTPS y actualizaciones por paquete |
¿Es escalable? ¿Corre en clúster?
Sí, por diseño, pero hoy corre en un solo servidor. Todo va en k3s, que es Kubernetes: para crecer se suman servidores (nodos) y se aumentan réplicas, sin cambiar el código.
| Pieza | Hoy | Cómo crece |
|---|---|---|
| Consola y API | 1 réplica | Sin estado: se agregan réplicas detrás de Traefik |
| Telemetría | 1 réplica con todos los roles | Cada rol (puente, normalizador, escritor, reglas, avisos, cálculos) puede ir en su propio despliegue. Kafka reparte el trabajo por particiones entre réplicas del mismo rol |
| Kafka | 1 nodo | Clúster de 3 nodos con réplicas de cada tópico |
| EMQX | 1 nodo | EMQX se agrupa en clúster de forma nativa |
| PostgreSQL | 1 servidor | Réplicas de lectura para históricos y reportes; el plan de conservación y la compresión de TimescaleDB controlan el tamaño |
| Hub de acceso remoto | 1 réplica | Las sesiones viven en memoria: necesita afinidad para crecer |
Para el volumen actual, un servidor alcanza con holgura. El clúster se arma cuando el número de equipos o de empresas lo pida.
Sigue leyendo
- Arquitectura de aplicación: las piezas de software y cómo se comunican.
- Flujo de datos: Kappa, capas bronce, plata y oro, y el camino por Kafka.
- Entradas de datos: el detalle de cada forma en que llegan datos a INDUXA.
Exportación lista para descargar Webhook
Se envía cuando una exportación pedida por la API queda lista. En datos van el tipo, el formato, las filas, el tamaño, el vencimiento del enlace y la ruta de descarga. Firma, reintentos y verificación: ver la guía de Webhooks.
Arquitectura de aplicación
Las piezas de software de INDUXA y cómo se comunican.