Serverless-функции без HTTP-таймаута: сравнение Vercel, Lambda и Inquir
У каждой платформы — свой лимит. Vercel Functions: 10–60 с. Lambda: до 15 мин. Inquir пайплайны: нет HTTP-окна. Разберём, когда лимит важен и как его обойти.
Last updated: 2026-04-20
Answer first
Direct answer
Serverless-функции без HTTP-таймаута: сравнение Vercel, Lambda и Inquir. HTTP-функция принимает запрос, вызывает `global.durable.startNew()` и возвращает jobId. Оркестрация выполняет шаги без HTTP-окна — столько, сколько нужно.
When it fits
- Задача занимает больше 10 секунд
- Провайдер имеет жёсткий таймаут (Vercel, CF Workers)
Tradeoffs
- Более длинный таймаут — не решение для задач, которые должны занимать минуты или часы. Это просто немного больший потолок.
- Синхронное ожидание результата блокирует соединение и ресурсы; при пике нагрузки это создаёт очередь ожидающих запросов.
Нагрузка и где ломается
Как таймаут HTTP ломает долгие задачи
- Vercel Serverless Functions: 60s (Pro), 300s (Enterprise)
- AWS Lambda: 900s maximum
- Cloudflare Workers: 30s CPU time
- Supabase Edge Functions: 60s
Шлюз закрывает соединение по истечении лимита. Задача может продолжаться, но клиент уже не получит ответ — а провайдер может решить, что функция «зависла».
Компромиссы
Почему увеличение таймаута не помогает
Более длинный таймаут — не решение для задач, которые должны занимать минуты или часы. Это просто немного больший потолок.
Синхронное ожидание результата блокирует соединение и ресурсы; при пике нагрузки это создаёт очередь ожидающих запросов.
Как помогает Inquir
Как работают пайплайны без HTTP-ограничений
HTTP-функция принимает запрос, вызывает `global.durable.startNew()` и возвращает jobId. Оркестрация выполняет шаги без HTTP-окна — столько, сколько нужно.
Результат — polling по jobId или вебхук по завершении. Ни одна из сторон не держит соединение открытым.
Что получаете
Сравнение таймаутов платформ
Vercel Functions
Hobby: 10 с. Pro: 60 с. Enterprise: 300 с. Жёсткий лимит, не настраивается в коде.
AWS Lambda
До 15 минут. Для HTTP за API Gateway: 29 с. Для async invoke: 15 мин.
Cloudflare Workers
CPU: 30 мс (Bundled) / без лимита (Unbound). Жёсткое ограничение на CPU-время.
Inquir Pipelines
Нет HTTP-окна для пайплайнов. Шаги работают вне Request/Response-цикла.
Что делать дальше
Как убрать таймаут из долгой задачи
Вынести тяжёлую работу в оркестрацию
HTTP-функция — только валидация и `global.durable.startNew()`. Тяжёлая работа — в шагах.
Вернуть jobId клиенту
Клиент получает `{ jobId }` немедленно; дальше опрашивает статус или ждёт вебхук.
Настроить повторы шагов
Если шаг упал — повторяется без пересчёта предыдущих. Результат — в истории.
Пример кода
No-timeout CSV processing pipeline
HTTP accepts the upload URL and returns 202. Pipeline step reads, transforms, and stores—taking as long as needed with step-level retries.
export async function handler(event) { const { fileUrl, jobId } = JSON.parse(event.body || '{}'); if (!fileUrl) return { statusCode: 400, body: JSON.stringify({ error: 'fileUrl required' }) }; await global.durable.startNew('process-csv', undefined, { fileUrl, jobId }); return { statusCode: 202, body: JSON.stringify({ jobId, status: 'processing' }) }; }
export async function handler(event) { const { fileUrl, jobId } = event.payload ?? {}; const rows = await downloadAndParseCSV(fileUrl); // may take minutes for large files let processed = 0; for (const batch of chunk(rows, 1000)) { await db.upsertBatch(batch); processed += batch.length; } await notifyUser(jobId, { processed, total: rows.length }); return { jobId, processed, total: rows.length }; }
Когда подходит
Когда нужен этот паттерн
Когда это уместно
- Задача занимает больше 10 секунд
- Провайдер имеет жёсткий таймаут (Vercel, CF Workers)
Когда лучше не трогать
- Синхронный ответ критичен и задача укладывается в 10 с
FAQ
Вопросы и ответы
Есть ли таймаут у самих шагов пайплайна?
Да — у каждого шага есть таймаут выполнения. Но это не HTTP-таймаут шлюза; шаги могут занимать минуты.
Как передать прогресс клиенту?
Polling по jobId через отдельный маршрут или вебхук на URL клиента в конце пайплайна.