Що таке serverless? Серверлес-обчислення простими словами
Serverless — це спосіб запускати код, у якому ви не налаштовуєте і не керуєте жодними серверами самостійно. Ви передаєте свій код хмарному провайдеру, а він запускає його лише тоді, коли щось його викликає — веб-запит, завантажений файл, сповіщення про платіж — а потім зупиняє. Зазвичай ви платите за час, протягом якого ваш код фактично працює, а не за машину, що стоїть без діла.
Чому serverless важливий, коли ви створюєте щось за допомогою ШІ
Коли ви створюєте застосунок за допомогою ШІ і дивитеся на варіанти хостингу або код, ви натрапите на «serverless-функції», «edge-функції» або «хмарні функції». Багато хостингових платформ їх пропонують, і деякі конструктори на основі ШІ розгортають бекенди саме так. Розуміння цієї моделі допомагає з трьома практичними питаннями:
- Вартість. Чи коштуватиме ваш застосунок грошей, коли ним ніхто не користується?
- Швидкість. Чому перший запит після тихого періоду повільніший?
- Ліміти. Чому довге завдання — створення великого звіту, обробка відео — вичерпало час?
Також корисно знати, чим serverless не є: це не відсутність бекенду. У вас усе одно є серверний код; просто хтось інший керує машинами. Основи див. у що таке сервер.
Аналогія з повсякденного життя
Власний традиційний сервер — як володіння автомобілем. Він завжди поруч і готовий до роботи миттєво, але ви платите за нього — страховка, паркування, обслуговування — незалежно від того, їздите ви чи ні.
Serverless — як виклик таксі. Ви платите лише за поїздки, які робите, і якщо сто людей одночасно потребують поїздки, приїде сто таксі. Але може бути коротке очікування, поки машина під'їде (холодний старт), у кожної поїздки є максимальна тривалість, а водій не пам'ятає вас з минулої поїздки (функції без стану, stateless).
Як працюють serverless-функції
У найпоширенішій формі, яка називається functions as a service (функції як послуга):
- Ви пишете функцію — невеликий фрагмент коду, що обробляє один тип події, наприклад «обробити POST на
/api/bookings». - Ви розгортаєте її. Провайдер зберігає її і пов'язує з тригером: URL, розкладом, новим файлом у сховищі, повідомленням у черзі.
- Надходить подія. Провайдер запускає копію вашої функції (або повторно використовує теплу) і повертає результат.
- Вона масштабується сама. Якщо одночасно надійде тисяча запитів, провайдер запустить багато копій паралельно, до лімітів вашого облікового запису.
- Вона простоює. Коли трафік припиняється, копії зупиняються. Якщо нічого не працює, за обчислення ви не платите.
Маленька serverless-функція мовою JavaScript може виглядати так:
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
Немає коду, щоб запустити сервер, відкрити порт або тримати процес запущеним. Платформа все це бере на себе.
«Serverless» також вживають ширше для інших керованих сервісів, які масштабуються автоматично і тарифікуються за використання — наприклад, serverless-бази даних, які призупиняються в простої.
Ключові терміни
| Термін | Значення |
|---|---|
| Функція (FaaS) | Невелика одиниця коду, яку провайдер запускає за запитом. |
| Тригер / подія | Те, що запускає функцію — HTTP-запит, завантаження файлу, таймер, повідомлення в черзі. |
| Холодний старт | Затримка, коли перед обробкою запиту має стартувати нова копія функції. |
| Тепла | Копія, яка вже працює і може відповісти миттєво. |
| Без стану (stateless) | Функція не зберігає пам'ять між запусками. Усе, що має зберігатися, кладеться в базу даних або сховище. |
| Таймаут | Максимальний час одного запуску. Наприклад, максимум AWS Lambda — 15 хвилин; багато платформ мають значно менше за замовчуванням. |
| Edge-функція | Функція, що працює в багатьох локаціях поблизу користувачів, часто з жорсткішими лімітами. |
| Масштабування до нуля (scale to zero) | Нічого не працює і за обчислення не платиться, коли трафіку немає. |
Приклад: невеликий сайт бронювання
Сайт бронювання студії йоги щонеділі ввечері отримує сплеск відвідувань, коли публікують новий розклад, а решту тижня — дуже мало.
- На сервері, що працює постійно, студія платить за машину 24/7, розраховану на пік неділі ввечері, яка в інший час здебільшого простоює.
- З serverless-функціями
GET /api/classesіPOST /api/bookings— це функції. Недільний наплив автоматично запускає багато копій; у тихий вівторок зранку майже нічого не працює, і рахунок близький до нуля.
Компроміси теж проявляються. Перша людина, яка відкриває сайт у вівторок зранку, може чекати трохи довше через холодний старт. База даних має обробляти багато короткочасних з'єднань від багатьох копій функцій, що може вимагати пулу з'єднань. А якщо студія згодом захоче завдання «згенерувати щорічний PDF відвідуваності для всіх», воно може перевищити ліміт часу функції і потребувати запуску деінде.
Коли serverless підходить — а коли ні
| Добре підходить | Менш підходить |
|---|---|
| Трафік низький, сплесковий або непередбачуваний | Постійний великий трафік, де сервер, що працює постійно, може бути дешевшим |
| Короткі завдання запит/відповідь: API, обробники форм, вебхуки | Довгі завдання: велика обробка відео, великі імпорти даних |
| Невеликі команди, які не хочуть керувати серверами | Застосунки, що тримають відкриті з'єднання (деякі чати або мультиплеєр), якщо платформа цього не підтримує |
| Обробка подій: «коли файл завантажено, створити мініатюру» | Застосунки, яким потрібно багато пам'яті між запитами |
Поширені хибні уявлення
- «Serverless означає відсутність бекенду». Це означає відсутність серверів для керування. Ви все одно пишете і захищаєте бекенд-код.
- «Serverless завжди дешевший». Дешевий при малому обсязі, але оплата за запит може швидко зрости при великому і постійному обсязі.
- «Serverless масштабується безмежно». У платформ є ліміти паралельності, і ваша база даних може стати вузьким місцем значно раніше за функції.
- «Файли, збережені у функції, будуть там наступного разу». Локальне сховище тимчасове. Використовуйте базу даних або файлове сховище.
- «Масштабування до нуля — це те саме, що serverless». Пов'язані, але не ідентичні. Деякі платформи запускають ваш застосунок як звичайний сервер, який засинає в простої і прокидається з наступним запитом — схожа економія і схожа затримка першого запиту, але без таймаутів на запит, як у функцій.
Що питати у вашого конструктора ШІ
- «Цей бекенд працюватиме як serverless-функції чи як сервер, що працює постійно або засинає? Що це означає для вартості?»
- «Чи можуть деякі завдання тривати довше за ліміт часу платформи? Якщо так, як їх обробляти?»
- «Зберігай усе, що має бути збережено, у базі даних або файловому сховищі, а не в пам'яті чи локальних файлах.»
- «Як керувати з'єднаннями з базою, якщо одночасно працює багато копій?»
- «Яка затримка першого запиту після того, як застосунок простоював?»
Як Mythex хостить застосунки
Mythex не описує свій хостинг як serverless-функції. Коли ви публікуєте, ваш застосунок працює як звичайний вебзастосунок або контейнер, яким керує Mythex — нічого налаштовувати не потрібно. Це масштабування до нуля: опубліковані застосунки і їхні бази даних засинають у простої і прокидаються з наступним відвідуванням; засинаючий застосунок не витрачає грошей на обчислення, а додаткові машини запускаються лише при великому трафіку (Pro дозволяє до 3 на сервіс). Прикріплена база Postgres також засинає після 5 хвилин простою і тарифікується за час, протягом якого була активна. Тож ви отримуєте значну частину переваги «плати за використане», з такою самою затримкою першого запиту після тихого періоду. Див. ліміти хостингу у документації та наші посібники про веб-хостинг і як зменшити витрати на хостинг.
Запитання
Що означає serverless простими словами?
Serverless означає, що ви передаєте свій код хмарному провайдеру, а він запускає його лише тоді, коли це потрібно — наприклад, коли надходить запит — без того, щоб ви налаштовували або обслуговували сервери. Зазвичай ви платите за час, протягом якого код фактично працює, а не за машину, що постійно увімкнена.
Чи справді в serverless немає серверів?
Сервери є; просто ви ними не керуєте. Провайдер запускає ваш код на своїх машинах, стартує його, коли надходять запити, масштабує під навантаженням і зупиняє, коли він простоює.
Що таке холодний старт?
Холодний старт — це додаткова затримка, коли serverless-функція запускається після простою, бо провайдер спершу має стартувати нову копію. Вона може бути від ледь помітної до однієї секунди і більше, залежно від платформи, мови та розміру коду.
Чи дешевший serverless за звичайний сервер?
Для застосунків з малим або нерівномірним трафіком часто так, бо в простої ви платите майже нічого. Для застосунків із великим постійним трафіком сервер, що працює постійно, може обійтися дешевше. Це залежить від вашого патерну використання і цін провайдера.
Які є приклади serverless-платформ?
Відомі приклади: AWS Lambda, Google Cloud Run functions, Azure Functions, Cloudflare Workers, а також функції, які пропонують хостингові платформи на кшталт Vercel і Netlify.