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

Функция как услуга

FaaS (Function as a Service, «Функция как услуга») — это модель облачных вычислений, в которой поставщик облачных услуг предоставляет платформу для выполнения изолированных фрагментов кода (функций) в ответ на определённые события, без необходимости управления серверной инфраструктурой со стороны разработчика. FaaS является ключевым компонентом более широкой парадигмы бессерверных вычислений (serverless computing), хотя сам термин «бессерверный» не означает полное отсутствие серверов, а лишь их абстрагирование от пользователя.

История

Концепция выполнения кода по запросу без выделенного сервера существовала и ранее, однако в современном виде FaaS оформилась в середине 2010-х годов. Первым крупным коммерческим сервисом стала AWS Lambda, запущенная Amazon Web Services в ноябре 2014 года. Изначально Lambda поддерживала только Node.js, но впоследствии добавила поддержку Python, Java, C#, Go, Ruby и других языков.

В 2016 году корпорация Google представила Google Cloud Functions, а MicrosoftAzure Functions. В 2017 году платформа IBM Cloud Functions была построена на базе открытого проекта Apache OpenWhisk. В России облачные провайдеры, такие как Яндекс.Облако (сервис Cloud Functions, запущен в 2019 году) и VK Cloud Solutions, также внедрили поддержку FaaS.

К 2020-м годам FaaS стала стандартным элементом портфолио всех крупных облачных провайдеров, а также появились открытые реализации, позволяющие разворачивать FaaS-платформы на собственной инфраструктуре (например, OpenFaaS, Knative, Fission).

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

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

Архитектура FaaS включает три ключевых элемента:

  1. Функция — единица кода, написанная на поддерживаемом языке программирования. Функция обычно выполняет одну атомарную задачу (например, обработка HTTP-запроса, изменение записи в базе данных, преобразование изображения).
  2. Триггер (событие) — событие, которое инициирует выполнение функции. Типичные триггеры: HTTP-запрос (REST API), изменение в хранилище объектов (S3, Blob Storage), сообщение из очереди (Kafka, RabbitMQ), запись в базу данных, таймер (cron-расписание).
  3. Платформа выполнения (runtime) — среда, которая управляет жизненным циклом функции: загрузка кода, выделение ресурсов (процессор, память), выполнение, масштабирование и остановка.

Жизненный цикл выполнения

  1. Холодный старт (cold start) — первое выполнение функции после длительного бездействия или при первом запросе. Платформа загружает код, инициализирует среду выполнения (runtime) и запускает экземпляр функции. Этот процесс может занимать от нескольких сотен миллисекунд до нескольких секунд.
  2. Горячий старт (warm start) — последующие вызовы той же функции. Платформа поддерживает запущенный экземпляр в течение некоторого времени (обычно 5–15 минут), и новый запрос обрабатывается мгновенно, без повторной инициализации.
  3. Завершение — после завершения выполнения или по истечении тайм-аута (обычно от 1 до 15 минут в зависимости от провайдера) экземпляр функции уничтожается. Все локальное состояние (память, временные файлы) теряется.

Модель ценообразования

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

При отсутствии вызовов (простой) плата не взимается.

Классификация и виды

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

По способу развёртывания

По языку выполнения

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

Применение

FaaS нашла широкое применение в различных сценариях:

Веб-приложения и API

Обработка данных

Автоматизация и интеграция

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

Микросервисы

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

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

Недостатки и ограничения

Сравнение с традиционными подходами

ХарактеристикаFaaSВиртуальная машина (IaaS)Контейнеры (CaaS)
Управление ОСНе требуетсяТребуетсяТребуется (образ контейнера)
МасштабированиеАвтоматическое, до нуляРучное или автоматическоеРучное или автоматическое
ОплатаЗа вызовы и время выполненияЗа время работы ВМЗа время работы контейнера
Время запускаМиллисекунды (горячий старт)МинутыСекунды
Макс. время выполнения5–15 минутНе ограниченоНе ограничено
Постоянное состояниеНет (эфемерно)Да (диск)Да (тома)

Известные реализации

Коммерческие (публичные облака)

Открытые и on-premises

Критика и перспективы

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

Перспективы развития включают:

Источники

  1. AWS Lambda Documentation. Amazon Web Services.
  2. Azure Functions Documentation. Microsoft.
  3. Google Cloud Functions Documentation. Google Cloud.
  4. Яндекс Cloud Functions. Документация. Яндекс.Облако.
  5. VK Cloud Solutions. Документация по Cloud Functions.
  6. OpenFaaS Documentation. OpenFaaS Ltd.
  7. Knative Documentation. Knative Authors.
  8. Jonas Bonér. "Reactive Microservices Architecture". O'Reilly Media, 2016.
  9. Mike Roberts. "Serverless Architectures". Martin Fowler's Blog, 2016.

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

На главную BFOmetr →