Log in to leave a comment
No posts yet
Al trabajar con funciones serverless, tarde o temprano te topas con la barrera del límite de tiempo de ejecución. Vercel Workflows resuelve este problema transformando funciones asíncronas en procesos que mantienen el estado. La clave aquí es eliminar elementos inciertos, como escrituras en bases de datos o funciones aleatorias, de la función orquestadora. Todos los efectos secundarios deben estar contenidos obligatoriamente dentro de bloques step.run para evitar que el sistema se desincronice.
Declara use workflow en la función que controla toda la lógica y gestión de flujo. Define las llamadas a API reales o las operaciones de base de datos como pasos independientes. Al pasar al siguiente nivel, selecciona solo los datos necesarios para ahorrar en costos de almacenamiento de logs. Con esta estructura, si una tarea falla a mitad del camino, no es necesario empezar desde cero; basta con reanudar desde el punto donde se detuvo.
En sistemas distribuidos, los errores de red pueden causar que un mismo paso se ejecute dos veces. En un sistema de pagos, esto sería un desastre. Vercel Workflows proporciona un stepId único para cada paso. Al integrar servicios como Toss Payments o Stripe, puedes usar este ID como clave de idempotencia para prevenir accidentes de cobros duplicados.
Implementa un patrón en tu código que verifique si ya se ha procesado un registro antes de escribir los datos. Puedes asignar el ID extraído con getStepMetadata() a las cabeceras de las peticiones de servicios externos. Diseña el sistema para que retorne inmediatamente si la transacción ya ha sido procesada. Con solo establecer bien esta estructura, reducirás llamadas innecesarias a la API y ahorrarás más del 20% en costos de infraestructura.
Las funciones serverless de Vercel suelen apagarse entre 1 y 15 minutos. Sin embargo, con step.sleep, puedes manejar tareas programadas que duren días. Cuando se ejecuta esta función, el estado del workflow se registra en el almacenamiento y la función termina inmediatamente. No se consumen costos de computación durante la espera.
Por ejemplo, si necesitas enviar un correo de encuesta tres días después de completar un pago, basta con una línea: await step.sleep('3 days'). Al no tener que gestionar crontabs o programadores externos, el tiempo de operación se reduce unas 2 horas por semana. También desaparece el costo de mantener un servidor encendido las 24 horas.
El ciclo de desplegar y corregir ralentiza el ritmo de desarrollo. Aprovechando las funcionalidades de Vercel CLI, puedes realizar pruebas en local sin necesidad de subir nada a la nube. Si necesitas recibir webhooks externos, usa herramientas como ngrok para exponer tu localhost al exterior.
Al ejecutar vercel dev y registrar la URL generada por ngrok en la configuración de webhooks de Stripe, tu código local recibirá eventos externos en tiempo real. Esto permite validar escenarios de fallo antes del despliegue, duplicando la velocidad de desarrollo y reduciendo el tiempo perdido por errores en las variables de entorno.
Si ocurren reintentos infinitos debido a límites de velocidad de API o fallos temporales de red, los costos pueden dispararse. Es necesario diferenciar la respuesta según la naturaleza del error. Los errores permanentes, como fallos de autenticación, deben detenerse de inmediato, mientras que los problemas temporales de red deben reintentarse tras un tiempo.
Aplica una fórmula de retroceso exponencial (exponential backoff) para aumentar gradualmente el intervalo de reintento:
Configura maxRetries: 3 en la función step.run para limitar el número máximo de intentos. El sistema se recuperará automáticamente, aumentando la disponibilidad del servicio y bloqueando de antemano facturaciones excesivas por bucles infinitos.
Vercel Workflows ofrece 50,000 pasos de ejecución incluidos en el plan Pro. Superado ese límite, el costo es de aproximadamente $2.50 por cada 100,000 pasos. El costo de almacenamiento por esperas prolongadas es muy económico, situándose en $0.00069 por GB-Hora.
| Categoría | Incluido en Hobby/Pro | Tarifa por exceso |
|---|---|---|
| Workflow Steps | 50,000 pasos | $2.50 por 100,000 pasos |
| Workflow Storage | 720 GB-Horas | $0.00069 por GB-Hora |
| Serverless Function | 1,000 GB-Horas | $0.60 por GB-Hora |
Comparado con el esfuerzo de construir y gestionar una cola de mensajes compleja por cuenta propia, es abrumadoramente económico. Combinando correctamente la garantía de idempotencia y el retroceso exponencial, puedes asegurar una confiabilidad de nivel de producción sin la carga de gestionar la infraestructura. Para un desarrollador independiente que desea enfocarse solo en la lógica de negocio, no hay opción más razonable que esta.