Содержание

Serverless — это модель, при которой вы загружаете код функции, а облако само запускает её по событию, масштабирует и выставляет счёт только за время выполнения. Она выгодна для неравномерной нагрузки, фоновых задач, обработки файлов и интеграций. Основное веб-приложение с постоянным трафиком обычно дешевле и проще держать в контейнерах на обычных серверах.

Разберём, как устроен serverless, для каких задач он подходит, как считать стоимость и какие у него подводные камни.

Что такое serverless?

Serverless — это облачные сервисы, где вы не управляете серверами: не выбираете их размер, не обновляете систему и не настраиваете масштабирование. Серверы, конечно, есть, но ими занимается провайдер, а вы платите за фактически выполненную работу.

К serverless относят:

  • облачные функции — код, который запускается по HTTP-запросу, расписанию или событию;
  • бессерверные контейнеры — ваш контейнер, который запускается только при запросах;
  • управляемые базы и очереди с оплатой за операции, а не за сервер;
  • объектные хранилища и сервисы обработки событий.

Для каких задач подходит serverless?

Serverless подходит для задач, которые запускаются по событию, выполняются быстро и имеют неравномерную нагрузку: днём тысячи вызовов, ночью ноль. В этих случаях вы не платите за простаивающий сервер, а масштабирование происходит автоматически.

Задача Подходит ли serverless Почему
Обработка загруженных изображений Да Запуск по событию, короткое выполнение
Вебхуки от платёжных систем и CRM Да Неравномерный поток событий
Задачи по расписанию Да Не нужен постоянно работающий сервер
Лендинг с формой заявки Да Редкие запросы
Основное API с постоянной нагрузкой Чаще нет Контейнеры дешевле при стабильном трафике
Долгие вычисления и WebSocket Нет Ограничения по времени и соединениям

Вид сверху на облака Фото: Unsplash

Как считать стоимость serverless?

Стоимость serverless считают по числу вызовов, времени выполнения и выделенной памяти. При малом и неравномерном трафике это почти бесплатно, а при постоянной высокой нагрузке счёт может оказаться в разы больше, чем за пару обычных серверов.

Как оценить:

  1. Посчитайте количество вызовов в месяц и среднее время выполнения.
  2. Умножьте на тариф за вызов и за гигабайт-секунду памяти.
  3. Добавьте стоимость исходящего трафика, логов, шлюза API и управляемых баз.
  4. Сравните с ценой контейнеров или виртуальных машин для той же нагрузки.
  5. Посчитайте сценарий роста в 10 раз — именно там serverless часто перестаёт быть выгодным.

Про выбор между своим сервером и облаком — в статье VPS, облако или managed-сервисы.

Какие подводные камни у serverless?

Главные подводные камни — холодный старт, ограничения среды выполнения, сложность отладки и привязка к провайдеру. Их нужно учитывать до выбора архитектуры, а не после запуска.

  • холодный старт — первый вызов после простоя может занимать сотни миллисекунд или секунды;
  • ограничения — максимальное время выполнения, размер пакета, память и временный диск;
  • соединения с базой — тысячи параллельных функций быстро исчерпывают лимит подключений, нужен пул;
  • отладка — цепочку функций сложно воспроизвести локально, нужны хорошие логи и трассировки;
  • привязка к провайдеру — триггеры, права и сервисы у каждого облака свои.

О логах и трассировке подробнее — в статье мониторинг и логирование.

Serverless или контейнеры?

Для большинства продуктов разумен гибрид: основное приложение работает в контейнерах, а вокруг него — облачные функции для фоновых задач, обработки файлов и интеграций. Так вы получаете предсказуемую стоимость ядра и гибкость там, где нагрузка скачет.

Выбирайте контейнеры, если:

  • трафик стабильный и предсказуемый;
  • нужны долгие соединения, WebSocket или тяжёлые вычисления;
  • важно запускать проект у любого провайдера или на своём сервере.

Выбирайте serverless, если:

  • нагрузка пиковая или редкая;
  • задачи короткие и запускаются по событиям;
  • команде не хочется заниматься серверами вовсе.

Про контейнеры и оркестрацию — статьи Docker для разработки и продакшена и нужен ли Kubernetes.

Коротко

  • Serverless — облако само запускает и масштабирует код, вы платите за выполнение.
  • Он выгоден для событий, фоновых задач и неравномерной нагрузки.
  • При постоянном высоком трафике контейнеры обычно дешевле.
  • Учитывайте холодный старт, ограничения среды, соединения с базой и привязку к провайдеру.
  • Частый оптимум — ядро в контейнерах и функции для периферийных задач.

Частые вопросы

  • Можно ли сделать весь проект на serverless?

    Можно, и для небольших проектов с неравномерной нагрузкой это бывает выгодно. Но при постоянной высокой нагрузке, долгих запросах и сложной логике обычные контейнеры часто дешевле и проще в отладке.

  • Есть ли serverless у российских облаков?

    Да, крупные российские облачные провайдеры предлагают облачные функции, бессерверные контейнеры и базы данных с оплатой за использование. Набор возможностей отличается, его стоит сравнить под задачу.

  • Как отлаживать облачные функции?

    Локально — через эмуляторы провайдера и обычные модульные тесты бизнес-логики. В облаке — через структурированные логи и трассировку: без них разбираться в цепочке функций очень тяжело.