← Todos los casos

Retail · supermercados en dos países · 2020 — 2021

Que el stock del sitio coincida con el de la tienda

Cinco microservicios conectados por Pub/Sub que llevan el stock desde el merchandising hasta el e‑commerce, en dos países.

El problema

Si el sitio de un supermercado dice que hay un producto y no hay, el problema llega hasta la puerta del cliente. En este caso, el stock viajaba desde el sistema de merchandising hasta el e‑commerce a través de un middleware.

Merchandisingon-premiseRecepciónPub/SubGCPGuardadoSurtidoConsultaAgrupación y envíoE-commerce
Del merchandising al e-commerce, en pasos que escalan por separado.

Lo que hice

Construí la integración nueva desde cero con un compañero, a quien le transmití la arquitectura: cinco microservicios en Node.js, uno on-premise y cuatro en GCP, conectados por Pub/Sub.

El primero recibe cada cambio de stock y lo publica como evento. Los demás lo guardan descartando los datos viejos —⁠en un flujo asíncrono los mensajes no llegan en orden⁠—, lo agrupan por país, tienda y tipo antes de enviarlo a la plataforma de e‑commerce, y responden consultas por producto y tienda.

Acompañé la entrega completa: QA, la documentación del sistema y el traspaso al equipo de soporte.

Qué pasó

Reemplazó a la integración anterior y quedó en producción en los dos países.

Durante el desarrollo, el equipo de QA la sometió a pruebas de estrés con Artillery: inyectó más de 900.000 eventos en diez minutos, a unos 1.100 por segundo. El servicio de entrada llegó a procesar 1.300 transacciones por segundo y respondió bien al 100 % de ellas.

La prueba también mostró por qué convenía separar las piezas. Guardar ese volumen tomó unos 40 minutos, limitado por la base de datos del ambiente de pruebas, y mientras tanto los eventos esperaron en Pub/Sub: la recepción siguió respondiendo al mismo ritmo y no se perdió ninguno.

Lo que me llevé

Entregar no termina en el pase a producción: sigue en QA, en soporte y en estar atenta a lo que se rompe.

Node.js · Koa · MongoDB · GCP Pub/Sub · Kubernetes