Разработчик сократил расходы на вычисления в serverless-базе данных Neon, увеличив интервал опроса (polling) на стороне клиента с 30 секунд до 15 минут. Более длительная пауза позволяет базе данных простаивать достаточно долго, чтобы она могла масштабироваться до нуля, что исключает расход вычислительных кредитов, которые поглощал бы постоянный опрос каждые 30 секунд.

Neon выставляет счета за каждую секунду работы своего вычислительного движка. В типичной serverless-архитектуре любой запрос — каким бы крошечным он ни был — не дает движку «уснуть». Дашборд на ТВ, созданный автором, опрашивал базу данных каждые полминуты, хотя отображаемые данные менялись только при ручной синхронизации пользователем или начале новой трансляции. Такой паттерн не позволял вычислительному пулу Neon достичь состояния «нуля», при котором прекращается тарификация, что приводило к регулярным скачкам расходов в панели управления Vercel.

Почему исходный интервал опроса имел значение

  • Дашборд был чисто клиентским React-компонентом, поэтому каждый экземпляр браузера обращался к Neon напрямую.
  • Ценообразование Neon привязывает стоимость к активному времени вычислений, а не к количеству запросов, поэтому один запрос каждые 30 секунд поддерживал базовую плату.
  • Мониторинг Vercel, проведенный автором, показал корреляцию между трафиком и использованием ресурсов Neon, подтвердив, что опрос не давал базе данных «уснуть».

Неудачные попытки решения

Быстрый debounce (задержка запроса после последнего взаимодействия пользователя) не помог, так как таймер все равно срабатывал каждые 30 секунд. Я также пробовал использовать Vercel Edge Functions, но это слишком усложнило архитектуру.

Простое решение

Единственным изменением в коде была замена константы, определяющей интервал обновления:

  • С 30 секунд5 минут
  • Затем с 5 минут15 минут

При 15-минутном интервале у Neon достаточно времени, чтобы распознать отсутствие активности и остановить свои вычислительные ресурсы. Дашборд остается функциональным: пользователи по-прежнему видят актуальные данные при ручном обновлении, а редкий автоматический опрос позволяет подхватить новую трансляцию без постоянного «шума» запросов.

Почему стоит оставить опрос на стороне клиента?

  1. Простота — не требуется дополнительных serverless-функций или этапов сборки.
  2. Ожидания пользователей — дашборд уже работает как клиентское приложение; ручной клик по-прежнему обеспечивает мгновенное обновление.
  3. Соответствие модели оплаты — Neon берет плату за секунды вычислений, а не за запросы, поэтому снижение частоты напрямую уменьшает счет.

Уроки для serverless-разработчиков

  • Сопоставляйте частоту опроса с реальной периодичностью обновления ваших данных. Если набор данных меняется всего несколько раз в час, 15-минутного интервала часто бывает достаточно.
  • Частый опрос в serverless-среде — это скрытый фактор роста расходов; всего один лишний запрос в минуту может помешать базе данных масштабироваться до нуля.
  • Небольшие изменения конфигурации могут принести значительную экономию без необходимости переработки архитектуры.

Итог: изменение всего одной константы превратило постоянно активную базу данных в по-настоящему serverless-компонент, сократив расходы на вычисления и сохранив полезность дашборда. Любой команде, использующей Neon или подобные сервисы с посекундной тарификацией, стоит пересмотреть интервалы опроса — это быстрый способ получить выгоду, который стоит протестировать уже сегодня.