Открыть сервис

Функции-как-сервис

Функции-как-сервис (англ. Functions as a Service, FaaS) — это модель облачных вычислений, в которой поставщик облачных услуг предоставляет платформу для выполнения кода в ответ на события, полностью абстрагируя от пользователя инфраструктуру, операционную систему и среду выполнения. Пользователь загружает отдельные функции (фрагменты кода), которые запускаются по триггеру (например, HTTP-запрос, загрузка файла, изменение в базе данных) и автоматически масштабируются в зависимости от нагрузки. В отличие от традиционных моделей (IaaS, PaaS), при использовании FaaS оплата взимается только за фактическое время выполнения кода и количество вызовов, а не за аренду виртуальных машин или контейнеров, простаивающих в ожидании запросов. FaaS является ключевой реализацией парадигмы бессерверных вычислений (Serverless).

История

Предпосылки возникновения

До появления FaaS разработчики были вынуждены управлять серверами (физическими или виртуальными) для развёртывания веб-приложений. С развитием облачных технологий (Amazon Web Services, Microsoft Azure, Google Cloud) появились более высокоуровневые абстракции — Platform as a Service (PaaS), которые автоматизировали развёртывание и масштабирование приложений, но всё ещё требовали управления средой выполнения (например, контейнерами). В начале 2010-х годов с ростом популярности микросервисной архитектуры и событийно-ориентированного программирования возникла потребность в ещё более гранулированной модели, где код можно было бы запускать без постоянного выделения ресурсов.

Появление и развитие

Первой коммерческой реализацией FaaS считается AWS Lambda, запущенная Amazon Web Services в ноябре 2014 года. Сервис позволял выполнять код на Node.js, Python и Java в ответ на события из других сервисов AWS (S3, DynamoDB, API Gateway). Успех Lambda стимулировал конкурентов: в 2016 году Google Cloud представила Google Cloud Functions, MicrosoftAzure Functions, а IBM — IBM Cloud Functions (на базе Apache OpenWhisk). В 2017 году появились открытые платформы, такие как OpenFaaS и Knative, позволяющие развёртывать FaaS на собственных серверах или в Kubernetes.

К 2020-м годам FaaS стал стандартом для построения микросервисов, обработки событий, создания API и автоматизации задач. В России облачные провайдеры (Яндекс.Облако, VK Cloud, SberCloud) также внедрили сервисы FaaS (например, Yandex Cloud Functions).

Архитектура и принцип работы

Основные компоненты

  • Функция — минимальная единица развёртывания: фрагмент кода (на Python, JavaScript, Go, Java, C#, Ruby и др.), который принимает входные данные (событие) и возвращает результат.
  • Триггер — событие, инициирующее выполнение функции. Примеры: HTTP-запрос (через API Gateway), изменение в базе данных, загрузка файла в хранилище, сообщение из очереди (Kafka, RabbitMQ), таймер (cron).
  • Платформа исполнениясреда выполнения, управляемая провайдером. Она автоматически создаёт экземпляры функции (контейнеры), масштабирует их, управляет жизненным циклом.
  • Балансировщик нагрузки — распределяет входящие запросы между экземплярами.
  • Мониторинг и логирование — встроенные средства для отслеживания вызовов, ошибок, времени выполнения.

Жизненный цикл функции

  1. Загрузка — пользователь загружает код функции через консоль, CLI или API.
  2. Холодный запуск — при первом вызове или после длительного простоя платформа создаёт новый контейнер, загружает код, инициализирует зависимости (это занимает от 100 мс до нескольких секунд).
  3. Горячий запуск — если функция вызывается часто, контейнер остаётся активным, и последующие вызовы обрабатываются мгновенно.
  4. Выполнение — функция обрабатывает событие, возвращает результат (или записывает его в очередь/базу данных).
  5. Завершение — после выполнения контейнер может быть уничтожен или оставлен в «тёплом» состоянии на некоторое время (обычно 5–15 минут).

Масштабирование

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

Классификация

По типу триггера

  • HTTP-функции — вызываются через HTTP-запросы (GET, POST, PUT, DELETE). Используются для создания REST API, вебхуков.
  • Событийные функции — реагируют на события из облачных сервисов (например, загрузка файла в S3, изменение записи в DynamoDB).
  • Функции по расписанию — запускаются по таймеру (cron). Применяются для периодических задач (резервное копирование, очистка данных, генерация отчётов).
  • Функции из очередей — обрабатывают сообщения из очередей (Kafka, RabbitMQ, SQS).

По открытости

  • Проприетарные — привязаны к конкретному облачному провайдеру (AWS Lambda, Azure Functions, Google Cloud Functions, Yandex Cloud Functions).
  • Открытые (Open Source) — могут быть развёрнуты на собственных серверах или в Kubernetes (OpenFaaS, Knative, Apache OpenWhisk, Fission).

По языку программирования

Большинство платформ поддерживают несколько языков: Python, JavaScript (Node.js), Go, Java, C#, Ruby, PHP, Rust. Некоторые провайдеры также поддерживают пользовательские среды выполнения (custom runtime).

Преимущества и недостатки

Преимущества

  • Отсутствие управления инфраструктурой — разработчик не заботится о серверах, операционных системах, обновлениях.
  • Автоматическое масштабирование — функция масштабируется от 0 до тысяч экземпляров в зависимости от нагрузки.
  • Оплата по факту использования — вы платите только за время выполнения кода (в миллисекундах) и количество вызовов. Нет платы за простой.
  • Быстрое развёртывание — код загружается и становится доступным за секунды.
  • Событийно-ориентированная архитектура — легко интегрируется с другими облачными сервисами (базы данных, хранилища, очереди).

Недостатки

  • Холодный запуск — задержка при первом вызове или после простоя (особенно для языков с медленной инициализацией, таких как Java и C#).
  • Ограничения по времени выполнения — большинство провайдеров устанавливают максимальное время выполнения функции (обычно 5–15 минут). Долгие задачи (например, обработка больших файлов) требуют другого подхода.
  • Ограничения по памяти и ресурсам — максимальный объём памяти (обычно 1–10 ГБ) и временного дискового пространства (500 МБ – 10 ГБ).
  • Привязка к провайдеру — использование проприетарных сервисов (например, AWS Lambda) может затруднить миграцию на другую платформу.
  • Сложность отладки — тестирование и отладка распределённых функций сложнее, чем монолитных приложений.
  • Стоимость при высоких нагрузках — при постоянной высокой нагрузке FaaS может оказаться дороже, чем аренда виртуальных машин.

Применение

Веб-API и микросервисы

FaaS используется для создания лёгких REST API, бэкендов для мобильных приложений и веб-сайтов. Каждая функция может реализовывать отдельный эндпоинт (например, /users, /orders).

Обработка событий и потоков данных

  • Обработка загруженных изображений (сжатие, изменение размера, распознавание).
  • Обработка сообщений из очередей (валидация, трансформация, запись в базу данных).
  • Анализ логов и метрик в реальном времени.

Периодические задачи

  • Резервное копирование баз данных.
  • Генерация отчётов и рассылка уведомлений.
  • Очистка временных файлов и устаревших записей.

Автоматизация DevOps

  • Запуск тестов при коммите в репозиторий.
  • Автоматическое создание и удаление окружений.
  • Обработка вебхуков от CI/CD-систем.

Интернет вещей (IoT)

Обработка данных с датчиков, управление устройствами, агрегация телеметрии.

Сравнение с другими моделями

ХарактеристикаFaaSPaaSIaaS
Управление инфраструктуройНетЧастично (среда выполнения)Полное
МасштабированиеАвтоматическое, до 0Автоматическое, но не до 0Ручное или автоматическое
ОплатаЗа вызовы и время выполненияЗа аренду платформы (часто почасово)За ресурсы (виртуальные машины, диски)
Холодный запускДаНетНет
Максимальное время выполненияОграничено (5–15 мин)Не ограниченоНе ограничено

Примеры популярных платформ

  • AWS Lambda (Amazon) — первая и наиболее зрелая платформа FaaS. Поддерживает множество языков и интеграций с сервисами AWS.
  • Azure Functions (Microsoft) — тесная интеграция с экосистемой Azure, поддержка .NET, PowerShell, TypeScript.
  • Google Cloud Functions (Google) — оптимизирована для работы с Firebase и BigQuery.
  • Yandex Cloud Functions (Яндекс) — российская платформа, поддерживает Python, Node.js, Go, PHP, Java, .NET. Интегрируется с Yandex Object Storage, YDB, YMQ.
  • OpenFaaS — открытая платформа, развёртывается в Docker и Kubernetes. Поддерживает любые языки через пользовательские контейнеры.
  • Knative — проект на базе Kubernetes, предоставляющий FaaS-подобные возможности (автомасштабирование, триггеры).

Критика

Основные критические замечания в адрес FaaS связаны с проблемой холодного запуска, которая может приводить к задержкам в пользовательском опыте. Для критичных к времени ответа приложений (например, финансовые транзакции) это может быть неприемлемо. Также отмечается сложность управления состоянием (stateful) в бессерверных функциях, так как они по умолчанию статичны. Некоторые эксперты указывают на риск vendor lock-in (привязки к провайдеру) и сложность переноса функций между облаками. В ответ на это сообщество разрабатывает открытые стандарты, такие как Serverless Framework и CloudEvents.

Источники

  • AWS Lambda Documentation. Amazon Web Services.
  • Azure Functions Overview. Microsoft Docs.
  • Google Cloud Functions Documentation. Google Cloud.
  • Yandex Cloud Functions. Документация Яндекс.Облака.
  • Serverless Computing: Current Trends and Open Problems. ResearchGate, 2020.
  • OpenFaaS Documentation. OpenFaaS Project.
  • Knative Documentation. Knative Project.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →