Серверлесс (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. Серверлесс хорошо дополняет такую архитектуру, а не заменяет ее; часто функции стоят рядом с микросервисами и выполняют вспомогательные задачи.