Розробник скоротив витрати на обчислення 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 має достатньо часу, щоб розпізнати відсутність активності та зупинити свої обчислювальні ресурси. Дашборд залишається функціональним: користувачі все ще бачать останні дані при ручному оновленні, а епізодичне автоматичне опитування дозволяє вловити нову трансляцію без постійного «шуму» запитів.
Чому варто залишити опитування на стороні клієнта?
- Простота – жодних додаткових serverless-функцій або етапів збірки.
- Очікування користувачів – дашборд уже працює як клієнтський додаток; ручний клік все ще забезпечує миттєве оновлення.
- Відповідність моделі витрат – Neon стягує плату за секунду обчислень, а не за запит, тому зменшення частоти безпосередньо знижує рахунок.
Уроки для serverless-розробників
- Підбирайте частоту опитування відповідно до реального темпу оновлення ваших даних. Якщо набір даних змінюється лише кілька разів на годину, 15-хвилинного інтервалу зазвичай достатньо.
- Часте опитування в serverless-середовищі є прихованим фактором зростання витрат; навіть один додатковий запит на хвилину може заважати базі даних масштабуватися до нуля.
- Невеликі налаштування конфігурації можуть забезпечити значну економію без перегляду архітектури.
Підсумок: зміна однієї константи перетворила базу даних, що працювала безперервно, на справді serverless-компонент, скоротивши витрати на обчислення та зберігши корисність дашборда. Для будь-якої команди, яка використовує Neon або подібні сервіси з оплатою за секунди обчислень, перегляд інтервалів опитування — це швидка перемога, яку варто протестувати вже сьогодні.
