Функция как услуга
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, а Microsoft — Azure Functions. В 2017 году платформа IBM Cloud Functions была построена на базе открытого проекта Apache OpenWhisk. В России облачные провайдеры, такие как Яндекс.Облако (сервис Cloud Functions, запущен в 2019 году) и VK Cloud Solutions, также внедрили поддержку FaaS.
К 2020-м годам FaaS стала стандартным элементом портфолио всех крупных облачных провайдеров, а также появились открытые реализации, позволяющие разворачивать FaaS-платформы на собственной инфраструктуре (например, OpenFaaS, Knative, Fission).
Архитектура и принцип работы
Основные компоненты
Архитектура FaaS включает три ключевых элемента:
- Функция — единица кода, написанная на поддерживаемом языке программирования. Функция обычно выполняет одну атомарную задачу (например, обработка HTTP-запроса, изменение записи в базе данных, преобразование изображения).
- Триггер (событие) — событие, которое инициирует выполнение функции. Типичные триггеры: HTTP-запрос (REST API), изменение в хранилище объектов (S3, Blob Storage), сообщение из очереди (Kafka, RabbitMQ), запись в базу данных, таймер (cron-расписание).
- Платформа выполнения (runtime) — среда, которая управляет жизненным циклом функции: загрузка кода, выделение ресурсов (процессор, память), выполнение, масштабирование и остановка.
Жизненный цикл выполнения
- Холодный старт (cold start) — первое выполнение функции после длительного бездействия или при первом запросе. Платформа загружает код, инициализирует среду выполнения (runtime) и запускает экземпляр функции. Этот процесс может занимать от нескольких сотен миллисекунд до нескольких секунд.
- Горячий старт (warm start) — последующие вызовы той же функции. Платформа поддерживает запущенный экземпляр в течение некоторого времени (обычно 5–15 минут), и новый запрос обрабатывается мгновенно, без повторной инициализации.
- Завершение — после завершения выполнения или по истечении тайм-аута (обычно от 1 до 15 минут в зависимости от провайдера) экземпляр функции уничтожается. Все локальное состояние (память, временные файлы) теряется.
Модель ценообразования
В отличие от традиционных облачных моделей, где оплачивается время работы виртуальной машины или контейнера (даже в простое), в FaaS оплата производится по факту использования:
- Количество вызовов — фиксированная плата за миллион запросов.
- Время выполнения — плата за миллисекунды, в течение которых функция выполнялась, умноженная на объём выделенной памяти (например, 0.00001667 USD за 1 ГБ-секунду).
- Выделенная память — объём оперативной памяти, выделенный функции (от 128 МБ до 10 ГБ в зависимости от провайдера).
При отсутствии вызовов (простой) плата не взимается.
Классификация и виды
По типу триггера
- Событийно-ориентированные — запускаются при наступлении события в облачной инфраструктуре (загрузка файла, изменение базы данных, поступление сообщения в очередь).
- HTTP-ориентированные — запускаются при получении HTTP-запроса (GET, POST, PUT, DELETE). Часто используются для создания микросервисов и API.
- По расписанию — запускаются в определённое время по cron-расписанию (например, ежедневная отправка отчётов).
По способу развёртывания
- Публичные облачные FaaS — сервисы, предоставляемые публичными облачными провайдерами (AWS Lambda, Azure Functions, Google Cloud Functions, Яндекс.Cloud Functions). Пользователь не управляет инфраструктурой.
- Частные (on-premises) FaaS — платформы, развёрнутые на собственных серверах организации с использованием открытых проектов (OpenFaaS, Knative, Fission). Дают полный контроль над данными и инфраструктурой.
- Гибридные и мультиоблачные решения — комбинация публичных и частных FaaS, позволяющая распределять нагрузку между разными средами.
По языку выполнения
Большинство провайдеров поддерживают несколько языков: Node.js (JavaScript/TypeScript), Python, Java, Go, .NET (C#), Ruby, PHP, Rust. Некоторые платформы (например, AWS Lambda) также позволяют использовать кастомные runtime-среды.
Применение
FaaS нашла широкое применение в различных сценариях:
Веб-приложения и API
- Создание лёгких REST API для мобильных и веб-приложений. Каждая функция обрабатывает отдельный эндпоинт (например,
/users,/orders). - Обработка форм обратной связи, аутентификация и авторизация.
Обработка данных
- Преобразование изображений и видео (изменение размера, конвертация форматов) при загрузке в облачное хранилище.
- Потоковая обработка логов и событий в реальном времени.
- ETL-процессы (извлечение, трансформация, загрузка) для аналитики.
Автоматизация и интеграция
- Выполнение задач по расписанию (очистка временных файлов, отправка уведомлений, генерация отчётов).
- Интеграция с внешними сервисами через вебхуки (например, уведомления в Slack или Telegram при изменении статуса заказа).
- Автоматическая реакция на события в облачной инфраструктуре (например, автоматическое масштабирование или создание резервных копий).
IoT (Интернет вещей)
- Обработка данных с датчиков и устройств, поступающих в облако.
- Выполнение команд на основе показаний датчиков (например, включение/выключение освещения).
Микросервисы
FaaS часто используется как основа для создания архитектуры микросервисов, где каждая функция представляет собой минимальный, независимо развёртываемый сервис.
Преимущества
- Отсутствие управления инфраструктурой — разработчик не занимается настройкой серверов, операционными системами, обновлениями и мониторингом.
- Автоматическое масштабирование — платформа автоматически создаёт и уничтожает экземпляры функций в зависимости от нагрузки, от нуля до тысяч параллельных вызовов.
- Оплата по факту — затраты прямо пропорциональны реальному использованию, что экономически эффективно для приложений с переменной или низкой нагрузкой.
- Быстрая разработка и развёртывание — функция может быть написана и развёрнута за минуты, что ускоряет итерации и время выхода на рынок.
- Изоляция выполнения — каждая функция выполняется в собственном изолированном контейнере, что повышает безопасность и предотвращает влияние ошибок одного кода на другой.
Недостатки и ограничения
- Холодный старт — задержка при первом вызове функции может быть критичной для приложений, требующих низкой задержки (например, для реального времени).
- Ограничение по времени выполнения — большинство провайдеров устанавливают максимальное время выполнения функции (обычно 5–15 минут). Долгие задачи (например, обработка больших файлов) не подходят.
- Ограничение по памяти и ресурсам — выделенная память и процессорное время ограничены (максимум 10 ГБ RAM, 6 vCPU в AWS Lambda).
- Отсутствие постоянного состояния — функция не имеет локального хранилища; для хранения данных необходимо использовать внешние сервисы (базы данных, объектные хранилища).
- Сложность отладки и мониторинга — распределённая и эфемерная природа функций затрудняет локальную отладку и трассировку запросов.
- Привязка к провайдеру (vendor lock-in) — код, написанный для одной платформы (например, AWS Lambda), может потребовать значительной переработки для переноса на другую платформу.
- Сложность для сложных приложений — для приложений с большим количеством взаимосвязанных функций управление становится сложным (проблемы с координацией, транзакциями, версионированием).
Сравнение с традиционными подходами
| Характеристика | FaaS | Виртуальная машина (IaaS) | Контейнеры (CaaS) |
|---|---|---|---|
| Управление ОС | Не требуется | Требуется | Требуется (образ контейнера) |
| Масштабирование | Автоматическое, до нуля | Ручное или автоматическое | Ручное или автоматическое |
| Оплата | За вызовы и время выполнения | За время работы ВМ | За время работы контейнера |
| Время запуска | Миллисекунды (горячий старт) | Минуты | Секунды |
| Макс. время выполнения | 5–15 минут | Не ограничено | Не ограничено |
| Постоянное состояние | Нет (эфемерно) | Да (диск) | Да (тома) |
Известные реализации
Коммерческие (публичные облака)
- AWS Lambda (Amazon Web Services) — первый и самый популярный FaaS-сервис. Поддерживает множество языков, интеграцию с большинством сервисов AWS.
- Azure Functions (Microsoft Azure) — интеграция с экосистемой Azure, поддержка планов потребления и премиум-планов.
- Google Cloud Functions (Google Cloud) — тесная интеграция с Firebase и Google Cloud Platform.
- IBM Cloud Functions (IBM) — основан на Apache OpenWhisk.
- Яндекс Cloud Functions (Яндекс) — сервис на платформе Яндекс.Облако, поддерживает Node.js, Python, Go, PHP, Java, .NET.
- VK Cloud Functions (VK) — сервис на платформе VK Cloud Solutions.
Открытые и on-premises
- OpenFaaS — популярная открытая платформа, работающая поверх Docker и Kubernetes.
- Knative (под эгидой Google) — платформа на базе Kubernetes, предоставляющая компоненты для создания бессерверных приложений.
- Fission — платформа на Kubernetes с поддержкой множества языков и быстрым холодным стартом.
- Apache OpenWhisk — открытая платформа для распределённых событийно-ориентированных вычислений.
Критика и перспективы
Основная критика FaaS связана с проблемами холодного старта, сложностью управления состоянием и привязкой к провайдеру. Для приложений с постоянной высокой нагрузкой традиционные контейнеры или виртуальные машины могут быть более экономичными.
Перспективы развития включают:
- Уменьшение времени холодного старта за счёт предварительного разогрева функций.
- Появление стандартов для переносимости функций между облаками (например, CloudEvents, Serverless Framework).
- Интеграция с искусственным интеллектом и машинным обучением для автоматической оптимизации ресурсов.
- Развитие edge-вычислений, где FaaS-функции выполняются на границе сети (ближе к пользователю) для снижения задержки.
Источники
- AWS Lambda Documentation. Amazon Web Services.
- Azure Functions Documentation. Microsoft.
- Google Cloud Functions Documentation. Google Cloud.
- Яндекс Cloud Functions. Документация. Яндекс.Облако.
- VK Cloud Solutions. Документация по Cloud Functions.
- OpenFaaS Documentation. OpenFaaS Ltd.
- Knative Documentation. Knative Authors.
- Jonas Bonér. "Reactive Microservices Architecture". O'Reilly Media, 2016.
- Mike Roberts. "Serverless Architectures". Martin Fowler's Blog, 2016.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →