8:40Vercel
Log in to leave a comment
No posts yet
При работе с серверлесс-функциями вы неизбежно сталкиваетесь с барьером в виде ограничений по времени выполнения. Vercel Workflows решает эту проблему, превращая асинхронные функции в процессы с сохранением состояния. Ключевым моментом здесь является устранение факторов неопределенности, таких как запись в базу данных или функции рандома, внутри функции-оркестратора. Все побочные эффекты должны быть заключены в блоки step.run, чтобы система не запуталась.
Объявите use workflow в функции, которая управляет всей логикой, и занимайтесь в ней только координацией потока. Реальные вызовы API или операции с БД определяйте как независимые шаги. При переходе к следующему этапу передавайте только необходимые данные, чтобы сэкономить на затратах на хранение логов. Такая структура позволяет не начинать работу с самого начала в случае сбоя — выполнение просто возобновится с того места, где оно остановилось.
В распределенных системах из-за сетевых ошибок один и тот же этап может выполниться дважды. В платежных системах это может обернуться катастрофой. Vercel Workflows предоставляет уникальный stepId для каждого этапа. При интеграции с Toss Payments или Stripe использование этого ID в качестве ключа идемпотентности поможет предотвратить случайные повторные платежи.
Внедрите в код паттерн проверки уже обработанных данных перед записью. Назначайте ID, извлеченный с помощью getStepMetadata(), в заголовки запросов к внешним сервисам. Проектируйте систему так, чтобы она немедленно возвращала результат, если транзакция уже была обработана. Правильная настройка этой структуры сокращает ненужные вызовы API и экономит более 20% затрат на инфраструктуру.
Серверлесс-функции Vercel обычно отключаются через 1–15 минут. Однако использование step.sleep позволяет легко справляться с запланированными задачами, которые длятся несколько дней. При выполнении этой функции состояние воркфлоу записывается в хранилище, и функция немедленно завершается. Во время ожидания вычислительные ресурсы не расходуются.
Например, если вам нужно отправить опрос на электронную почту через 3 дня после завершения оплаты, достаточно одной строки: await step.sleep('3 days'). Нет необходимости управлять отдельным crontab или планировщиком, что сокращает время на эксплуатацию примерно на 2 часа в неделю. Расходы на содержание сервера в режиме 24/7 также исчезают.
Повторяющийся процесс «деплой и правка» снижает скорость разработки. Используя возможности Vercel CLI, вы можете тестировать воркфлоу локально, не загружая их в облако. Если вам нужно получать внешние вебхуки, используйте такие инструменты, как ngrok, чтобы открыть локальный хост для внешнего доступа.
Запустите vercel dev и зарегистрируйте URL, созданный ngrok, в настройках вебхуков Stripe. Тогда ваш локальный код будет получать внешние события в режиме реального времени. Возможность заранее проверить сценарии сбоев перед деплоем ускоряет разработку в два раза и избавляет от траты времени на ошибки в настройках переменных окружения.
Если из-за ограничений скорости API или временных сбоев сети возникают бесконечные повторы, вы можете получить огромный счет. Реакция должна зависеть от характера ошибки. Неустранимые ошибки, такие как сбой аутентификации, должны приводить к немедленной остановке, а временные проблемы, такие как сбои сети, требуют повторных попыток через некоторое время.
Применяйте формулу экспоненциальной задержки (exponential backoff), которая постепенно увеличивает интервал между повторами:
Установите maxRetries: 3 в функции step.run, чтобы ограничить максимальное количество попыток. Система восстанавливается автоматически, что повышает доступность сервиса, а избыточные начисления из-за бесконечных циклов блокируются заранее.
Vercel Workflows в рамках плана Pro предоставляет 50 000 шагов выполнения бесплатно. При превышении лимита взимается плата в размере $2.50 за каждые 100 000 шагов. Стоимость хранилища для длительного ожидания крайне низка — $0.00069 за ГБ-час.
| Категория | Включено в Hobby/Pro | Тариф за превышение |
|---|---|---|
| Workflow Steps | 50 000 шагов | $2.50 за 100 000 шагов |
| Workflow Storage | 720 ГБ-часов | $0.00069 за ГБ-час |
| Serverless Function | 1 000 ГБ-часов | $0.60 за ГБ-час |
Это несравненно экономичнее, чем самостоятельная сборка и поддержка сложных очередей сообщений. Сочетание гарантии идемпотентности и экспоненциальной задержки позволяет обеспечить надежность уровня Production без бремени управления инфраструктурой. Для соло-разработчиков, желающих сосредоточиться только на бизнес-логике, это самый разумный выбор.