Condiciones de Carrera a la Resiliencia: Reservas a Prueba de Fallos

Arquitectura resiliente para reservas de inventario: atomicidad con Lua en Redis, PostgreSQL como fuente de verdad, BullMQ y procesamiento idempotente.

24 ago 2025 • 5 min de lectura • Equipo Q2BSTUDIO

Inteligencia-Artificial-

Introducción

¿Qué ocurre cuando dos usuarios intentan reservar el último producto exactamente al mismo tiempo? Muchos sistemas fallan vendiendo el mismo artículo dos veces y provocando cancelaciones, reembolsos y clientes enfadados. Este problema no es teórico, es una falla fundamental en el manejo de operaciones concurrentes y requiere un enfoque cuidadoso para garantizar consistencia y resiliencia.

El viaje desde lo ingenuo hasta lo resistente

Empecé con una implementación simple: comprobar stock en la base de datos y crear la reserva. Con Node.js y llamadas secuenciales esto funciona para pocos usuarios, pero cuando llegan dos peticiones simultáneas aparece la condición de carrera. Request A y Request B leen 1 unidad en stock, ambos crean una reserva y el stock llega a 0 y luego a -1. La solución requiere convertir la sección crítica en una operación atómica.

Herramientas elegidas

Para construir un sistema fiable opté por una pila concreta y por razones claras: PostgreSQL como fuente de verdad por su ACID y consistencia; Redis no solo como caché sino como servidor de estructuras de datos de alta velocidad para operaciones atómicas; Node.js con Express para APIs no bloqueantes; y BullMQ como cola robusta para manejar el trabajo en segundo plano y permitir reintentos automáticos.

Atomicidad con Lua en Redis

Las transacciones simples pueden quedar cortas por el ida y vuelta entre servidor y cliente. En lugar de usar WATCH, MULTI y EXEC, encapsulé la lógica de comprobar y decrementar stock en un script Lua ejecutado dentro de Redis. Redis garantiza la ejecución atómica de scripts Lua, por lo que no existe la ventana entre check y update. Con esta técnica eliminamos por completo la condición de carrera para reservas simultáneas.

Persistencia y TTL para carritos abandonados

Una vez asegurado el inventario en Redis, la reserva se persiste en PostgreSQL y se crea una llave con TTL en Redis para manejar tiempos de expiración de carritos. ¿Qué pasa cuando ese temporizador expira? Evité Pub/Sub por ser fire and forget y opté por un worker que consulta proactivamente cada 30 segundos la base de datos en busca de reservas expiradas. Así el sistema es autocurativo: si el worker estuvo caído, al reiniciarse encontrará y limpiará las reservas pendientes, garantizando eventual consistency.

Reducir la charla en la red

El checkout inicial era muy conversador, con múltiples llamadas a Redis por cada item en el carrito. Para carritos grandes esto generaba decenas de round trips. La solución fue delegar la validación completa del carrito a un único script Lua experto que valida todo de forma atómica y devuelve el resultado en una sola llamada, reduciendo latencia y costes de red.

Desacoplar con colas para tolerancia a fallos

Para proteger la compra frente a fallos en la base de datos o reinicios de servidor, el API solo encola una tarea en BullMQ. El usuario recibe respuesta instantánea y un worker asíncrono procesa la operación lenta contra PostgreSQL. Esta arquitectura aporta respuestas rápidas, reintentos automáticos y evita pérdidas de pedidos durante caídas.

Idempotencia y máquina de estados

Para soportar reintentos seguros el worker debe ser idempotente. Implementé una máquina de estados en la tabla de reservas: pending - processing - completed. Al iniciar un job el worker marca la reserva como processing. Si un job retry llega y la reserva ya está completed, el worker detecta que no hay trabajo pendiente y evita decrementar stock de nuevo. Así el procesamiento puede reintentarse muchas veces sin efectos duplicados.

Manejo humano de fallos y limpieza automática

Si un trabajo falla tras varios reintentos automáticos, no podemos dejarlo en el limbo. La cola de fallos funciona como lista de tareas para un operador humano que puede revisar el error y optar por retry o cancel. Además implementé un limpiador cron que periódicamente expira trabajos en la cola de fallos que lleven demasiado tiempo, cancela reservas y devuelve stock, evitando pérdida permanente de inventario.

Arquitectura final

La solución completa queda así: capa API rápida y stateless que usa Redis para operaciones atómicas; capa de colas con BullMQ para procesamiento en background; workers idempotentes que garantizan consistencia; PostgreSQL como fuente de verdad; panel administrativo para supervisión humana; y procesos de limpieza automática. Este diseño prioriza resiliencia, escalabilidad y mantenimiento.

Lecciones aprendidas

Atomicidad es imprescindible para operaciones concurrentes. Eventual consistency supera a la inconsistencia en tiempo real cuando la fiabilidad es prioritaria. Desacoplar responsabilidades crea resistencia ante fallos. Diseñar idempotencia desde el inicio permite recuperaciones seguras. Y la supervisión humana complementa la automatización para casos límite.

Sobre Q2BSTUDIO

En Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida, con experiencia en inteligencia artificial, ia para empresas y agentes IA. Ofrecemos soluciones integrales de ciberseguridad, servicios cloud aws y azure, y servicios inteligencia de negocio con implementaciones prácticas usando power bi. Diseñamos arquitecturas resilientes como la descrita, combinando bases de datos robustas, cache y scripting en Redis, colas de trabajo como BullMQ y prácticas de idempotencia para garantizar que las operaciones críticas nunca se pierdan.

Cómo podemos ayudar

Si necesita una solución a medida para reserva de inventario, gestión de pedidos, integración de inteligencia artificial o dashboards de inteligencia de negocio con power bi, Q2BSTUDIO puede diseñar e implementar la arquitectura completa. Ofrecemos servicios de software a medida, aplicaciones a medida, implementación de agentes IA, consultoría en ciberseguridad y migraciones a servicios cloud aws y azure para que su plataforma sea segura, escalable y eficiente.

Recursos y contacto

Puede consultar un ejemplo de proyecto y código de referencia en GitHub https://github.com/TheBigWealth89/product_reservation y contactar a Q2BSTUDIO para evaluar su caso y recibir una propuesta personalizada en soluciones de software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

Inteligencia artificial

Agentes de IA, chatbots y asistentes inteligentes que automatizan tareas y atienden a tus clientes 24/7 para mejorar la eficiencia de tu negocio.

Más info

Desarrollo de software

Aplicaciones web, móviles y de escritorio, intranets, e-commerce, SaaS y plataformas de gestión diseñadas para las necesidades concretas de tu empresa.

Más info

Servicios cloud

Migración, infraestructura, hosting gestionado, alta disponibilidad y seguridad en Microsoft Azure y Amazon Web Services para que tu negocio escale sin límites.

Más info

Ciberseguridad y pentesting

Auditorías de seguridad, test de intrusión (pentesting) y protección de aplicaciones, datos e infraestructura on-premise y cloud, con hacking ético y cumplimiento normativo.

Más info

Business Intelligence

Cuadros de mando y análisis de datos con Power BI: integramos tus fuentes, diseñamos dashboards y KPIs y convertimos tus datos en decisiones.

Más info

Automatización de procesos

Automatizamos tareas repetitivas y conectamos tus aplicaciones con n8n, Power Automate, Make y RPA, eliminando trabajo manual y aumentando la productividad.

Más info

Formación para empresas

Formamos a tus equipos en tecnología con criterio: desarrollo web, bases de datos, Git, buenas prácticas y seguridad, automatización con n8n, inteligencia artificial para empresas y creación de soluciones de IA con Azure AI Foundry.

Más info

Auditoría de código

Auditamos el código que creas tú, tu equipo o una IA: te decimos qué está bien y qué mejorar, lo securizamos y lo dejamos listo para producción, web o app.

Más info

Generación de imágenes con IA

Creamos por ti las imágenes que necesita tu negocio con inteligencia artificial: producto, redes, publicidad, ilustración y avatares. Tú nos dices qué quieres y te lo entregamos listo para usar.

Más info

Generación de vídeos con IA

Creamos por ti vídeos con inteligencia artificial: promocionales, para redes, presentadores virtuales, doblaje y animaciones. Nos cuentas la idea y te lo entregamos montado y listo para publicar.

Más info

Avatares conversacionales con IA

Creamos avatares conversacionales con IA —humanos digitales con cara y voz— que atienden a tus clientes y equipos con el conocimiento de tu empresa, en tu web, monitores interactivos, WhatsApp o Teams.

Más info

Marketing Online e IA

Google Ads, Meta Ads, LinkedIn Ads y posicionamiento en motores de IA (GEO/AEO): captamos clientes y hacemos que tu marca aparezca donde te buscan, también en ChatGPT, Gemini y Perplexity.

Más info

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.