Prog Academy
RU UA
DevOps и облака

Что такое serverless?

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

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

Ограничения тоже есть: лимит времени выполнения, «холодный старт» при первом вызове после простоя, отсутствие состояния между запусками и привязка к конкретному облаку. Для постоянно нагруженного сервиса обычный контейнер выходит дешевле и предсказуемее.

Где применяется

Модель хорошо ложится на задачи с неравномерной нагрузкой: обработчики вебхуков, отправка уведомлений, обработка загруженных файлов, плановые задания, небольшие API. Код загружается функцией — AWS Lambda, Azure Functions, Google Cloud Functions — и запускается по событию.

Экономика здесь другая, чем у обычного сервера. Сервис, который вызывают несколько тысяч раз в месяц, стоит центы, потому что в простое оплаты нет. Зато при постоянной высокой нагрузке модель становится дороже выделенного сервера, и это первое, что проверяют перед выбором.

Пример

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

export const handler = async (event) => {
  const { orderId } = JSON.parse(event.body);

  await sendConfirmationEmail(orderId);

  return {
    statusCode: 200,
    body: JSON.stringify({ ok: true }),
  };
};
Функция без сервера: провайдер сам запускает её на каждый вызов и масштабирует под нагрузку.

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

Серверов действительно нет?

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

Что такое холодный старт?

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

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

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

Привязывает ли serverless к одному провайдеру?

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

Связанные термины