Serverless
Что это
Serverless означает, что вы пишете отдельные функции, а облачный провайдер запускает их только тогда, когда что-то их вызывает — HTTP-запрос, загрузка файла, запланированный таймер. Серверы под капотом всё равно есть, но вы их никогда не видите и не управляете ими. Вы платите только за время, которое ваш код действительно работает, часто с точностью до миллисекунды.
Сильные стороны
- Нет серверов, которые нужно выделять, патчить или поддерживать запущенными.
- Автоматически масштабируется от нуля до тысяч одновременных запусков.
- Оплата по факту использования; простаивающий код ничего не стоит.
- Чисто интегрируется с облачными событиями (очереди, хранилище, базы данных).
- Хорошо подходит для всплесковой или непредсказуемой нагрузки.
Компромиссы
- Холодный старт: функция, которая давно не запускалась, может потребовать дополнительного времени на пробуждение.
- Ограничения времени выполнения (часто несколько минут) исключают долгие задачи.
- Затраты могут удивить при очень высоком, постоянном объёме по сравнению с обычным сервером.
- Локальное тестирование и отладка сложнее, чем у обычного приложения.
- Привязка к вендору — модель событий и API у каждого провайдера различаются.
Когда использовать
Выбирайте serverless для API, вебхуков, запланированных задач и событийно-ориентированных задач, где нагрузка неравномерна и вы предпочли бы не нянчиться с инфраструктурой. Он блестяще подходит для связующего кода между облачными сервисами.
Подходит для vibe coding
Serverless хорошо сочетается с разработкой под управлением ИИ, потому что единица работы — это одна самодостаточная функция, которую агенту легко сгенерировать, протестировать и развернуть. Фреймворки вроде AWS SAM, Serverless Framework и Vercel позволяют ИИ задать функцию, её триггер и права в одном конфигурационном файле. Совет: попросите агента явно задать разумный тайм-аут и размер памяти, а также свести зависимости к минимуму — меньше пакетов означает меньшие бандлы и более быстрые холодные старты.
# serverless.yml — функция AWS Lambda
service: my-api
provider:
name: aws
runtime: nodejs20.x
timeout: 10
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /hello
method: get
# Развернуть стек
npx serverless deploy