Серверлесс (Serverless)
Модель, в которой код запускается облаком по событию, а серверы, масштабирование и простой берет на себя провайдер; оплата — за фактические вызовы.
Серверлесс (serverless, «бессерверные вычисления») — модель, в которой разработчик пишет только код функции, а облачный провайдер сам решает, где и на чем ее запустить. Серверы при этом, конечно, существуют, но команде не нужно их арендовать, настраивать, обновлять и масштабировать. Функция запускается по событию — HTTP-запросу, загрузке файла, сообщению, расписанию — и оплачивается только за время работы.
Модель стала массовой после запуска AWS Lambda в 2014 году. В России аналогичные сервисы есть, например, у Yandex Cloud (Cloud Functions) и других облачных провайдеров.
Пример
# Python
def handler(event, context):
order = event["body"]
send_receipt(order)
return {"statusCode": 200, "body": "ok"}
Функция получает данные оплаченного заказа и отправляет клиенту чек. Если за минуту придет тысяча заказов, облако само запустит столько копий функции, сколько нужно. Если заказов нет, ничего не работает и не стоит денег.
Плюсы
- Никакой инфраструктуры — ни операционной системы, ни обновлений, ни мощности «на вырост».
- Автоматическое масштабирование — от нуля до тысяч одновременных вызовов.
- Оплата за использование — выгодно при неравномерной нагрузке и редких задачах.
- Быстрый запуск небольших сервисов без отдельного сервера.
Минусы
- Холодный старт. Если функцию давно не вызывали, первый вызов ждет, пока облако подготовит среду, — от долей секунды до нескольких секунд.
- Ограничения. Время работы одного вызова, объем памяти и размер кода ограничены; функции не хранят состояние между вызовами.
- Привязка к провайдеру. Триггеры, права и сопутствующие сервисы у каждого облака свои, переезд требует переделок.
- Стоимость на большой постоянной нагрузке может оказаться выше, чем у обычных серверов или контейнеров.
- Отладка и мониторинг распределенной системы из множества функций сложнее.
Где подходит
- Обработчики уведомлений (webhooks) от платежных и внешних сервисов.
- Обработка файлов: уменьшить загруженное изображение, распознать документ.
- Задачи по расписанию: выгрузки, напоминания, очистка данных.
- Чат-боты и небольшие API с неравномерной нагрузкой.
Для систем с постоянной высокой нагрузкой, долгими операциями и строгими требованиями к задержкам обычно выбирают контейнеры в Kubernetes. Серверлесс хорошо дополняет такую архитектуру, а не заменяет ее; часто функции стоят рядом с микросервисами и выполняют вспомогательные задачи.