← Escribo

Diagnóstico en Edge Workers: Por qué el Cron Ejecutaba sin Limpiar el Catálogo

Investigación de cuello de botella por subrequests en Cloudflare Workers: cómo el límite de llamadas en bucle detenía silenciosamente la limpieza de 100 variantes en un e-commerce real.

Cloudflare WorkersDebuggingSubrequestsE-commerce
Diagnóstico en Edge Workers: Por qué el Cron Ejecutaba sin Limpiar el Catálogo

Una tienda de cortinas a medida genera una variante de producto por cada configuración personalizada que un cliente crea. Ancho, alto, tela, color, tipo de accionamiento: cada combinación se convierte en un ítem real en el catálogo para poder ingresar al carrito. Esto significa que el catálogo acumula variantes temporales por diseño, y que existe un Worker programado cuya única función es eliminar las variantes que no concluyeron en compra.

La sospecha inicial era simple: los IDs de las variantes estaban muy dispersos en el tiempo, por lo que se presumía que el cron no estaba ejecutando.

La sospecha acertó el síntoma y erró la causa. El cron se ejecutaba puntualmente sin fallar. Y, sin embargo, había 100 variantes vencidas, la más antigua creada 101 días antes.

El patrón que reveló el problema

Antes de modificar código, ejecuté un script de sólo lectura contra la tienda para auditar el catálogo. El resultado mostró un patrón claro:

  • 109 variantes vivas del configurador, 100 de ellas vencidas.
  • Las 100 vencidas pertenecían a productos a partir de la posición 79 del catálogo.
  • Los productos en las primeras 47 posiciones tenían cero variantes vencidas.

Donde el cron alcanzaba a llegar, funcionaba a la perfección. El problema no era de ejecución, sino de alcance.

Las tres causas combinadas

  1. La ventana real era de 72 horas, no de 24 horas como sugería la documentación inicial.
  2. El filtro por nombre abarcaba prácticamente toda la tienda: los términos de búsqueda coincidían con 111 de los 113 productos. Como consultar las variantes de 111 productos requiere 111 subrequests y el plan gratuito de Cloudflare Workers establece un límite de 50, el bucle alcanzaba el tope en el producto 47 y se interrumpía. Siempre en los mismos 47. Los productos que acumulaban variantes no procesadas estaban entre las posiciones 79 y 111.
  3. El cron estaba configurado como semanal (0 3 * * 0) en lugar de diario.

Solución aplicada

Se optimizó la rutina para consultar únicamente los IDs específicos de productos configurables, se ajustó el cron diario y se confirmó la limpieza total de las variantes acumuladas.

La lección principal: auditar con datos reales y métricas precisas antes de asumir que un servicio falló en su ejecución.