Caso de estudio · Quabu Solutions

Bodega Digital: software distribuido para operaciones industriales en tiempo real.

Una plataforma conectada con la operación de una bodega, diseñada para coordinar procesos, usuarios y dispositivos físicos mediante servicios distribuidos y comunicación en tiempo real.

ene 2024 — ago 20262 años 8 mesesArquitecto de soluciones de software
Rol
Arquitecto de soluciones · diseño de arquitectura, dominios y servicios
Contexto
Quabu Solutions · Arquitecto de soluciones de software
Dominio
Logística y automatización de almacenes
Tecnologías
EDADDDTDDKafkaKubernetesDockerWebSocket

Resumen ejecutivo

Bodega Digital nació para conectar la operación física de un almacén con el software que la coordina. El sistema debía unir personas, aplicaciones y dispositivos industriales —robots, PLC, LEDs, picking, cámaras y sonido— en un mismo flujo de trabajo, con trazabilidad y capacidad de evolucionar almacén a almacén.

La solución se organizó alrededor de dominios y servicios con responsabilidades claras, comunicación orientada a eventos y canales en tiempo real para reflejar el estado de las operaciones. Mi trabajo combinó arquitectura, modelado de dominios, desarrollo de servicios, integración con dispositivos y definición de los flujos de comunicación.

Contexto industrial

En una bodega automatizada, mover un pallet no es una operación aislada: implica una tarea, un dispositivo disponible, un operador que necesita saber qué hacer y un registro de lo que ha ocurrido. El software tiene que coordinar esos actores sin convertirse en un cuello de botella y sin perder de vista quién puede hacer qué.

El punto de partida no era una hoja en blanco: cada almacén tiene su mapa, sus versiones de robot y sus reglas de negocio. El sistema debía absorber esa variación sin multiplicar el código ni depender de un fabricante concreto.

El problema

El reto no consistía únicamente en construir una aplicación, sino en coordinar distintos actores, dispositivos y flujos operativos dentro de un sistema que debía ser trazable, mantenible y capaz de evolucionar.

  • Coordinar tareas entre familias de dispositivos muy distintas, cada una con su propio protocolo y su propio ciclo de vida.
  • Permitir que la configuración de un almacén —mapa, robots, versiones— cambie sin reescribir el dominio.
  • Reflejar el estado de la operación en tiempo real para que las personas puedan actuar sobre lo que está pasando.
  • Mantener límites claros entre lo que decide el negocio y lo que decide el hardware.

Restricciones

  • Hardware heterogéneo. Carretillas, PLC, LEDs, picking y cámaras no comparten modelo, versión ni protocolo.
  • Validación sobre hardware real. Los QA gates del pipeline se ejecutaban sobre dispositivos físicos, no solo sobre mocks.
  • Despliegue en cloud bajo VPN. El software vive en cloud y se conecta a la instalación industrial a través de una VPN.
  • Fabricantes y documentación. La comunicación técnica y la documentación con fabricantes chinos se hacía en inglés.
  • Trazabilidad y roles. Cada operador debía ver y ejecutar solo lo que su rol permitía.

Mi rol

Mi trabajo combinó el diseño de la arquitectura, el modelado de dominios, el desarrollo de servicios, la integración con dispositivos, la definición de los flujos de comunicación y el acompañamiento de las decisiones técnicas. Formé parte de un equipo: lo que sigue distingue lo que diseñé y dirigí de lo que fue trabajo colectivo.

  • Diseñé e implementé un sistema orientado a eventos sobre DDD, TDD y microservicios, con un monolito agrupado en frontend, backend, core y un subconjunto de dispositivos.
  • Definí el core de agentes que ordena, prioriza y reparte el trabajo entre los dispositivos disponibles.
  • Separé cada familia de dispositivo en su propio microservicio, con adaptadores por modelo, versión y protocolo.
  • Definí el frontend reactivo por WebSocket y el control de acceso por rol y tipo de operador.
  • Acompañé el despliegue en Docker sobre cloud bajo VPN, con CI/CD y QA gates sobre hardware físico real.

Arquitectura

La solución se organizó alrededor de dominios y servicios con responsabilidades claras, comunicación orientada a eventos y canales en tiempo real. El frontend y la API hablan con un core que conoce las tareas; el core no conoce los protocolos de cada dispositivo, solo sus capacidades.

Arquitectura de Bodega DigitalUn frontend reactivo por rol se conecta a una API, que delega en un core de agentes —dictator, ranker y distributor—. El core publica y consume eventos en un bus. Cada familia de dispositivo (carretillas, PLC, LEDs, picking y cámaras) tiene su propio microservicio con adaptadores por modelo, versión y protocolo, y conversa con el hardware real de la bodega.Frontend por rolWebSocket · RBAC · admin y operadorla interfaz se adapta al tipo de operadorAPI y backendcasos de uso · puertos y adaptadoresautenticación y autorizaciónOperación y personastareas, prioridades y estadocada rol ve lo que puede ejecutarCore de agentes · tareas atómicasdictator ordena · ranker prioriza · distributor delega entre dispositivos disponiblesabstracción por casos de uso: del dispositivo concreto a solo la familia y la acciónBus de eventos · comunicación asíncrona entre serviciosCarretillasmicroservicioadaptador pormodelo y versiónPLCmicroservicioseñales y estadosde la instalaciónLEDs y sonidomicroservicioguía física aloperadorPickingmicroserviciotareas depreparaciónCámarasmicroserviciolectura yverificaciónHardware real de la bodega · robots · PLC · LEDs · picking · cámaras
Vista simplificada: el frontend y la API hablan con el core, el core coordina por eventos y cada familia de dispositivo mantiene su propio servicio y sus adaptadores. El despliegue corre en Docker sobre cloud, bajo VPN, con CI/CD y QA gates sobre hardware físico real.

En texto: el frontend se conecta a la API; la API delega en el core de agentes —dictator, ranker y distributor—; el core publica y consume eventos en el bus; cada familia de dispositivo tiene su microservicio con adaptadores por modelo, versión y protocolo; y esos servicios conversan con el hardware real de la bodega.

Dominios y servicios

DDD y TDD se usaron para absorber las reglas de negocio, los mapas y las versiones de robot distintas de cada almacén. La abstracción se hizo por casos de uso, puertos y adaptadores: cambiar una API o un dispositivo no arrastra al dominio.

El core trabaja con tareas de distinto nivel de detalle, desde la tarea que apunta a un dispositivo concreto hasta la que solo expresa la familia y la acción. Esa granularidad permite que el sistema siga coordinando cuando un modelo de robot no está disponible o cuando un almacén incorpora una versión nueva.

Los agentes reparten el trabajo: dictator ordena,ranker prioriza y distributor delega. El objetivo es maximizar la disponibilidad de los dispositivos y minimizar los movimientos necesarios para completar las tareas.

Eventos y comunicación

La comunicación entre servicios es asíncrona y orientada a eventos. El bus de eventos del sistema permite que el core publique lo que ha decidido y que cada servicio reaccione sin que el productor conozca a sus consumidores. Añadir una familia de dispositivos o una nueva capacidad no obliga a tocar el core.

Esa separación también acota el fallo: un servicio de dispositivos que deja de responder no bloquea la coordinación del resto, aunque el sistema deba decidir qué hacer con las tareas que dependían de él.

Integración con hardware

Cada familia de dispositivo —carretilla, PLC, LED, picking, cámara— es su propio microservicio, con adaptadores según modelo, versión y protocolo. El dominio expresa la intención; el adaptador se encarga de traducirla al protocolo concreto.

Ese límite fue la decisión que más veces se pagó sola: un fabricante nuevo o una versión distinta de robot se incorporaba como un adaptador, no como un cambio en las reglas de negocio. También permitió documentar y comunicar las integraciones en inglés con los fabricantes sin mezclar su vocabulario con el del dominio.

Tiempo real y roles

El frontend es reactivo y se comunica por WebSocket: la interfaz refleja el estado de la operación sin que el operador tenga que refrescar. Sobre ese canal se aplica RBAC, de forma que la interfaz se adapta al rol —admin u operador— y al tipo de operador.

La consecuencia práctica es que el operador ve la siguiente acción que le corresponde, con el contexto de lo que está pasando en la bodega, y no una pantalla genérica con todas las posibilidades.

CI/CD y despliegue

La plataforma se despliega con Docker en cloud, bajo VPN hacia la instalación. El pipeline incluye CI/CD y QA gates deterministas sobre hardware físico real: la validación no se quedaba en el entorno de integración, llegaba a los dispositivos que luego operan en la bodega.

Decisiones técnicas

  • Core de agentes en vez de una orquestación rígida. Permite priorizar y repartir trabajo según disponibilidad, a cambio de asumir estado e idempotencia en las tareas.
  • Un microservicio por familia de dispositivos. Aísla protocolos y versiones, a cambio de más servicios que desplegar y observar.
  • Tareas con granularidad variable. El mismo modelo sirve para un dispositivo concreto y para una familia entera, a cambio de un contrato de tarea más rico.
  • DDD y TDD para el dominio. Absorben reglas que cambian por almacén, a cambio de un esfuerzo inicial de modelado que se recupera en cada variante.
  • QA sobre hardware real. Detecta lo que ningún mock detecta, a cambio de un pipeline más lento y dependiente de dispositivos.

Resultados

El sistema permitió conectar software y operación industrial, mejorar la trazabilidad de los procesos y automatizar interacciones que antes requerían coordinación manual. Los resultados que puedo afirmar son observables, no métricas inventadas:

  • Las tareas quedan registradas y asociadas a su dispositivo y a su operador.
  • La interfaz refleja el estado de la operación en tiempo real y se adapta al rol de quien la usa.
  • Incorporar un modelo o una versión de dispositivo no exige rehacer el dominio.
  • El despliegue y la validación están automatizados, incluida la comprobación sobre hardware real.

Aprendizajes

  • En sistemas industriales, el hardware marca el ritmo: la arquitectura tiene que asumir que los dispositivos fallan, cambian de versión y no siempre están disponibles.
  • Los contratos explícitos entre dominio y dispositivo ahorran más tiempo que cualquier optimización prematura.
  • Probar sobre hardware real cambia la conversación con el equipo: los problemas aparecen antes y con nombre propio.
  • La documentación y el vocabulario compartido con fabricantes son parte de la ingeniería, no un trámite.

Artículos relacionados

Siguiente paso

Si estás diseñando una plataforma que conecta software con operaciones físicas, o necesitas ordenar una arquitectura que ya existe, puedo ayudarte a delimitar los dominios y las integraciones.

Easter egg · el porqué

Cuatro motores y sus manías

Si tuviera que resumir mi perfil en una frase, diría que soy el resultado de crecer entre un padre ingeniero emprendedor y una madre profesora periodista. De ahí vienen mis cuatro grandes motores… y también mis manías.

De la parte de ingeniería heredé la capacidad estructurada para resolver problemas complejos y, cómo no, un punto de perfeccionismo técnico. Del periodismo, una curiosidad casi obsesiva por entender el porqué de las cosas y explorar a fondo cada detalle. Del emprendimiento, la orientación al impacto y al riesgo asumido. Y de la docencia, la capacidad de explicar arquitectura compleja a perfiles no técnicos y la empatía para implicarme al 100% con los equipos.

Pasa el cursor o toca una tarjeta para ver la otra cara.

Qué es cada color

  • Verde · Ingeniería
  • Rosa · Periodismo
  • Azul · Emprendimiento
  • Naranja · Docencia

Para mí, la arquitectura de soluciones va exactamente de eso: equilibrar rigor técnico, curiosidad, comunicación clara y visión de negocio.