INDUXA · Docs
Arquitectura

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

RasgoEn 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 eventosLos 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.
KappaUn 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 datosCruda (bronce) → limpia por tag (plata) → agregada para el negocio (oro).
Monolito modularLa 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:

Orquestación, entrada y monitoreo
k3s
k3s
Kubernetes ligero
Imágenes
Imágenes
un paquete por versión
Traefik
Traefik
entrada HTTPS
Salud del sistema
Administración
Seguridad
Authentik
Authentik
inicio de sesión
CrowdSec
CrowdSec
bloquea IPs
RLS
RLS
datos por empresa
Consola y visualización
Next.js
Next.js
consola
ECharts
ECharts
gráficos y PDF
Leaflet
Leaflet
mapas
Inteligencia
ONNX
ONNX
predicciones
Claude
Claude
Chat IA
API de negocio
NestJS
NestJS
API
TypeScript
TypeScript
Integración
API REST
claves por empresa
Webhooks
alertas
Exportaciones
Excel · CSV
MQTT
MQTT
Node-RED, Ignition, n8n
Procesamiento en flujo · telemetría
Node.js
Node.js
puente · normalizador · escritor · reglas · notificador · cálculos
Mensajería
Apache Kafka
Apache Kafka
tópicos por tipo
Entrada de equipos
EMQX
EMQX
MQTT sobre TLS
Ingesta HTTPS
Video
MediaMTX
cámaras en vivo
Almacenamiento
PostgreSQL 16
PostgreSQL 16
negocio
TimescaleDB
TimescaleDB
series de tiempo
PostGIS
mapas y geocercas
Amazon S3
Amazon S3
archivos
SeaweedFS
SeaweedFS
S3 en el cliente
Borde: equipos de INDUXA
Gateway
Gateway
Python · Agro e industrial
Nodos ESP32
Nodos ESP32
LoRa 433 MHz
Modbus · OPC UA
Modbus · OPC UA
lectura de PLC
Agente Desk
Agente Desk
.NET en cada PC
Agro Campo
Agro Campo
Android · Expo
Las piezas de INDUXA por capa, de abajo (el equipo en el campo o la planta) hacia arriba (la consola).
CapaTecnologíasPara qué
BordeGateway 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
EntradaEMQX (MQTT), ingesta HTTPS, conectores, MediaMTX (video)Recibir datos y autenticar cada equipo
MensajeríaApache KafkaGuardar unos días todo lo que llega y repartirlo
ProcesamientoTelemetría en Node.jsNormalizar, guardar, evaluar reglas, avisar, calcular
AlmacenamientoPostgreSQL 16 + TimescaleDB + PostGIS; Amazon S3 o SeaweedFSNegocio, series de tiempo, mapas y archivos
NegocioAPI en NestJS (TypeScript)Todo lo que se consulta o cambia, con permisos y bitácora
ConsolaNext.js, ECharts, LeafletPantallas, gráficos, PDF y mapas
InteligenciaONNX (predicciones), Claude de Anthropic (Chat IA y diagnóstico por foto)Anomalías, pronósticos y consultas en lenguaje natural
SeguridadAuthentik, CrowdSec, RLS en PostgresInicio de sesión, bloqueo de IPs atacantes y aislamiento por empresa
Orquestaciónk3s (Kubernetes ligero), TraefikContenedores, 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.

Hoy: un servidor
Servidor k3s
consola ×1API ×1telemetría ×1Kafka ×1EMQX ×1Postgreshub ×1
Cada pieza corre una vez. Alcanza para los clientes actuales y se instala igual en el servidor de un cliente.
Cuando crece: clúster
Nodo 1
consolaAPInormalizadorKafkaEMQX
Nodo 2
consolaAPIescritorKafkaEMQX
Nodo 3
APIreglasnotificadorKafkaEMQX
Datos
Postgres + réplica de lecturaS3 / SeaweedFS
Las piezas sin estado (consola, API, roles de la telemetría) se multiplican; Kafka y EMQX se agrupan en clúster.
PiezaHoyCómo crece
Consola y API1 réplicaSin estado: se agregan réplicas detrás de Traefik
Telemetría1 réplica con todos los rolesCada 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
Kafka1 nodoClúster de 3 nodos con réplicas de cada tópico
EMQX1 nodoEMQX se agrupa en clúster de forma nativa
PostgreSQL1 servidorRé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 remoto1 réplicaLas 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

On this page