Vercel улучшил обработку необработанных ошибок Node.js в Fluid Compute: что изменилось
Vercel анонсировал важное обновление для своей бессерверной платформы Fluid Compute, которое касается обработки необработанных ошибок в среде Node.js. Ранее необработанные исключения (uncaught exceptions) и необработанные отклонённые промисы (unhandled rejections) могли привести к аварийному заверше

Vercel анонсировал важное обновление для своей бессерверной платформы Fluid Compute, которое касается обработки необработанных ошибок в среде Node.js. Ранее необработанные исключения (uncaught exceptions) и необработанные отклонённые промисы (unhandled rejections) могли привести к аварийному завершению всего процесса, затрагивая все запросы, выполняющиеся на одном инстансе. Теперь Fluid Compute перехватывает такие ошибки, логирует их, даёт возможность завершиться текущим запросам и корректно завершает процесс. Это нововведение повышает надёжность приложений, работающих в режиме совместного использования инстансов, и снижает риск каскадных сбоев.
Как работает новая обработка ошибок в Fluid Compute
Нововведение решает проблему изоляции запросов в среде Fluid Compute, которая является гибридом между традиционными серверными функциями и долгоживущими процессами. В классических бессерверных функциях каждый запрос выполняется в отдельном контейнере, поэтому необработанная ошибка не влияет на другие запросы. В Fluid Compute несколько запросов могут выполняться одновременно на одном инстансе для повышения эффективности. Если один из них вызывает необработанную ошибку, это могло привести к падению всего процесса и прерыванию остальных запросов.
Теперь при возникновении необработанного исключения или отклонённого промиса Fluid Compute перехватывает событие, записывает ошибку в логи, ожидает завершения всех выполняющихся запросов (inflight requests) и только после этого завершает процесс. Это поведение напоминает изоляцию традиционных бессерверных вызовов, но сохраняет преимущества совместного использования инстанса.
Чем отличается обработка ошибок в Fluid Compute от стандартного поведения Node.js?
В стандартной среде Node.js необработанные исключения приводят к немедленному завершению процесса, а необработанные отклонённые промисы генерируют предупреждение, но не завершают процесс (начиная с Node.js 15). Fluid Compute унифицирует обработку обоих типов ошибок: процесс не завершается мгновенно, а дожидается завершения текущих запросов. Это даёт разработчикам возможность обработать ошибку в коде приложения или хотя бы корректно завершить работу с клиентами.
Технические детали реализации
Механизм основан на прослушивании событий process.on('uncaughtException') и process.on('unhandledRejection'). Вместо стандартного поведения Vercel добавляет свою логику: ошибка логируется через встроенный механизм логирования платформы, после чего запускается таймер ожидания завершения текущих запросов. Если запросы не завершаются в течение определённого времени (по умолчанию 30 секунд), процесс всё равно завершается принудительно. Это предотвращает зависание инстанса.
Важно отметить, что разработчики по-прежнему могут установить собственные обработчики этих событий в коде приложения. Если пользовательский обработчик вызвал process.exit(), то процесс завершится немедленно. В противном случае вступает в силу поведение Fluid Compute.
Какие преимущества даёт новая обработка ошибок для разработчиков?
Обновление в первую очередь полезно разработчикам, использующим Fluid Compute для приложений с несколькими одновременными запросами. Это типично для API-серверов, GraphQL-эндпоинтов и приложений реального времени. Раньше необработанная ошибка в одном запросе могла привести к сбросу соединений для других пользователей. Теперь такие инциденты станут менее критичными.
Для проектов, уже использующих Fluid Compute, обновление происходит автоматически — никаких действий со стороны разработчика не требуется. Vercel рекомендует включить Fluid Compute для существующих проектов, если это ещё не сделано, и изучить документацию по обработке ошибок.
Что будет дальше
Vercel продолжает развивать Fluid Compute как платформу, сочетающую производительность долгоживущих процессов с изоляцией бессерверных функций. В будущем можно ожидать более тонкой настройки поведения при ошибках, возможно, появления конфигурации таймаутов ожидания завершения запросов. Также вероятно расширение поддержки других языков и рантаймов, помимо Node.js.
Как включить Fluid Compute в существующем проекте на Vercel?
Для включения Fluid Compute в проекте на Vercel необходимо перейти в настройки проекта на панели управления, найти раздел "Fluid Compute" и активировать его. После этого все функции будут использовать новый режим совместного использования инстансов. Рекомендуется протестировать приложение в стейджинге перед включением в продакшене, чтобы убедиться в совместимости с обработкой ошибок.
Итог
Улучшенная обработка необработанных ошибок делает Fluid Compute более надёжным и предсказуемым для production-нагрузок. Разработчики могут быть уверены, что единичная ошибка в коде не приведёт к каскадному отказу всего инстанса. Это важный шаг к тому, чтобы Fluid Compute стал полноценной альтернативой традиционным серверным архитектурам.