FaaS
FaaS (Function as a Service, «функция как услуга») — это модель облачных вычислений, в рамках которой провайдер предоставляет платформу для выполнения отдельных функций (кусков кода) в ответ на события, без необходимости управления серверной инфраструктурой. FaaS является ключевым компонентом бессерверных (serverless) вычислений, позволяя разработчикам сосредоточиться на написании бизнес-логики, а не на администрировании операционных систем, контейнеров или виртуальных машин.
История
Концепция FaaS возникла как развитие более широкой парадигмы бессерверных вычислений, которая начала формироваться в конце 2000-х годов. Первым коммерчески успешным сервисом FaaS считается AWS Lambda, запущенный Amazon Web Services в ноябре 2014 года. Его появление было вызвано стремлением упростить разработку микросервисов и снизить эксплуатационные расходы.
В 2016 году Google представил Google Cloud Functions, а Microsoft — Azure Functions. В 2017 году IBM запустила IBM Cloud Functions на базе проекта с открытым исходным кодом Apache OpenWhisk. В 2019 году компания Cloudflare представила Cloudflare Workers, использующий технологию WebAssembly для выполнения кода на границе сети (edge computing). В России аналогичные сервисы начали появляться с 2019 года: Yandex Cloud Functions (разработчик — ООО «Яндекс.Облако») и Cloud Functions от VK Cloud (ранее Mail.ru Cloud Solutions).
К 2023 году FaaS стал стандартным компонентом предложений всех крупных облачных провайдеров, а также появились открытые платформы, такие как OpenFaaS, Knative и Fission, позволяющие разворачивать FaaS-окружения на собственных серверах.
Архитектура и принцип работы
FaaS основан на событийно-ориентированной архитектуре. Основные компоненты системы:
- Функция — изолированный блок кода, написанный на одном из поддерживаемых языков программирования (Python, Node.js, Go, Java, C# и др.). Функция принимает входные данные (обычно в формате JSON) и возвращает результат.
- Триггер — событие, которое запускает выполнение функции. Это может быть HTTP-запрос, загрузка файла в хранилище, запись в базу данных, сообщение из очереди или таймер.
- Платформа выполнения — среда, которая управляет жизненным циклом функции: выделяет ресурсы, загружает код, запускает выполнение, обрабатывает ошибки и освобождает ресурсы после завершения.
- Хранилище состояний — внешние сервисы (базы данных, кэши, очереди), которые функция использует для хранения данных между вызовами, так как сама функция по умолчанию является статичной.
Процесс выполнения:
- Происходит событие (например, HTTP-запрос).
- Платформа FaaS проверяет, есть ли уже запущенный экземпляр функции (холодный или горячий старт).
- Если экземпляра нет, платформа создаёт его (холодный старт), загружая код и инициализируя среду.
- Функция выполняется, получая входные данные и возвращая результат.
- После завершения выполнения платформа может сохранить экземпляр на некоторое время для повторного использования (горячий старт) или сразу уничтожить его.
Холодный и горячий старт
- Холодный старт — ситуация, когда функция запускается впервые после периода бездействия. Время холодного старта может составлять от 100 миллисекунд до нескольких секунд в зависимости от размера кода, языка программирования и провайдера.
- Горячий старт — повторное использование уже инициализированного экземпляра функции. Время выполнения сокращается до миллисекунд.
Классификация
FaaS можно классифицировать по нескольким признакам:
По типу развёртывания
- Публичные облачные FaaS — сервисы, предоставляемые облачными провайдерами (AWS Lambda, Azure Functions, Google Cloud Functions, Yandex Cloud Functions). Пользователь платит только за фактическое время выполнения и количество вызовов.
- Приватные (on-premise) FaaS — платформы, развёрнутые на собственной инфраструктуре организации (OpenFaaS, Knative, Fission). Позволяют сохранить контроль над данными и соответствовать требованиям безопасности.
- Гибридные FaaS — комбинация публичных и приватных решений, часто используемая в крупных корпорациях.
По способу выполнения
- Синхронные — функция возвращает результат немедленно после выполнения. Используется для обработки HTTP-запросов.
- Асинхронные — функция запускается в фоне, результат может быть получен через очередь или callback. Применяется для обработки больших объёмов данных или длительных задач.
По месту выполнения
- Централизованные — функции выполняются в дата-центрах провайдера.
- Edge FaaS — функции выполняются на границе сети (например, Cloudflare Workers, AWS Lambda@Edge). Снижают задержку для пользователей, находящихся далеко от основного дата-центра.
Характеристики
- Автомасштабирование — платформа автоматически создаёт и уничтожает экземпляры функций в зависимости от нагрузки. Пользователь не управляет масштабированием вручную.
- Ограничение времени выполнения — большинство FaaS-платформ ограничивают время выполнения одной функции (обычно от 1 до 15 минут). Для длительных задач требуется использование других сервисов (например, AWS Step Functions).
- Ограничение памяти — выделяемая память на одну функцию обычно варьируется от 128 МБ до 10 ГБ.
- Статичность — функции не имеют собственного состояния. Для хранения данных между вызовами необходимо использовать внешние хранилища (базы данных, кэши).
- Биллинг по использованию — оплата взимается за количество вызовов, время выполнения (с округлением до 100 мс) и объём выделенной памяти.
Применение
FaaS широко используется в следующих сценариях:
- Обработка событий — автоматическая обработка загрузок файлов, записей в базы данных, сообщений из очередей. Например, изменение размера изображений при загрузке в облачное хранилище.
- Создание API и бэкендов — реализация RESTful API с помощью функций, вызываемых через HTTP-триггеры. Подходит для микросервисной архитектуры.
- Потоковая обработка данных — анализ логов, мониторинг, ETL-процессы (извлечение, преобразование, загрузка). Функции могут обрабатывать данные в реальном времени.
- Планировщики задач — выполнение периодических операций (например, очистка базы данных, отправка уведомлений) по расписанию.
- Чат-боты и вебхуки — обработка входящих сообщений от мессенджеров или внешних сервисов.
- Edge-вычисления — выполнение кода на границе сети для снижения задержки (например, персонализация контента, кэширование, A/B-тестирование).
Преимущества и недостатки
Преимущества
- Отсутствие управления инфраструктурой — разработчик не занимается настройкой серверов, контейнеров или операционных систем.
- Автоматическое масштабирование — система сама адаптируется к нагрузке, от нуля до тысяч одновременных вызовов.
- Оплата по факту использования — затраты отсутствуют в периоды простоя, что экономически эффективно для приложений с переменной нагрузкой.
- Быстрое развёртывание — код можно развернуть за несколько минут, не настраивая окружение.
- Изоляция функций — каждая функция выполняется в отдельном контейнере, что повышает безопасность.
Недостатки
- Холодный старт — задержка при первом вызове функции после бездействия может быть критичной для приложений реального времени.
- Ограничения по времени и памяти — не подходит для длительных или ресурсоёмких задач.
- Сложность отладки — локальное тестирование может отличаться от поведения в облачной среде.
- Привязка к провайдеру (vendor lock-in) — использование специфичных сервисов (например, AWS DynamoDB) может затруднить миграцию.
- Управление состоянием — необходимость использования внешних хранилищ усложняет архитектуру.
Примеры провайдеров
| Провайдер | Сервис | Год запуска | Особенности |
|---|---|---|---|
| Amazon Web Services | AWS Lambda | 2014 | Первый коммерческий FaaS; поддержка Python, Node.js, Java, Go, C#, Ruby, PowerShell; интеграция с большинством сервисов AWS |
| Microsoft Azure | Azure Functions | 2016 | Поддержка C#, Java, JavaScript, Python, PowerShell; интеграция с Azure Logic Apps; возможность использования в on-premise среде |
| Google Cloud Platform | Google Cloud Functions | 2016 | Поддержка Node.js, Python, Go, Java, .NET, Ruby, PHP; интеграция с Firebase; поддержка Cloud Run |
| IBM Cloud | IBM Cloud Functions | 2017 | Основан на Apache OpenWhisk; поддержка Node.js, Python, Swift, Java, Go; возможность развёртывания на собственных серверах |
| Cloudflare | Cloudflare Workers | 2019 | Выполнение на границе сети (edge); поддержка JavaScript, Rust, C, C++; использование WebAssembly; низкая задержка |
| Yandex Cloud | Yandex Cloud Functions | 2019 | Поддержка Python, Node.js, Go, PHP, Java, .NET; интеграция с сервисами Yandex Cloud; соответствие законодательству РФ |
| VK Cloud | Cloud Functions | 2020 | Поддержка Python, Node.js, Go; интеграция с сервисами VK Cloud; возможность работы с Kubernetes |
Сравнение с другими моделями облачных вычислений
- IaaS (Infrastructure as a Service) — пользователь управляет виртуальными машинами, операционной системой, сетью. FaaS полностью абстрагирует инфраструктуру.
- PaaS (Platform as a Service) — пользователь управляет приложением, но не серверами. FaaS идёт дальше, абстрагируя даже среду выполнения приложения.
- CaaS (Container as a Service) — пользователь управляет контейнерами, но не серверами. FaaS автоматизирует запуск и остановку контейнеров.
Критика
Основные критические замечания в адрес FaaS связаны с проблемами холодного старта, которые могут приводить к задержкам в работе пользовательских интерфейсов. Также отмечается сложность мониторинга и отладки распределённых систем, состоящих из множества функций. Некоторые эксперты указывают на риск vendor lock-in, особенно при использовании проприетарных сервисов провайдера. Кроме того, модели биллинга могут быть непрозрачными, что приводит к неожиданно высоким счетам при неправильной настройке триггеров или ошибках в коде.
Интересные факты
- В 2021 году AWS Lambda обрабатывал более 100 миллиардов вызовов в месяц.
- Cloudflare Workers использует технологию Isolates (изолированные потоки V8), что позволяет запускать тысячи функций на одном физическом ядре.
- В 2022 году компания Vercel представила Edge Functions, которые выполняются на границе сети с использованием WebAssembly, что позволяет обрабатывать запросы за миллисекунды.
- Открытая платформа OpenFaaS позволяет запускать FaaS на любом Kubernetes-кластере, включая локальные серверы.
Источники
- AWS Lambda Documentation. Amazon Web Services.
- Azure Functions Documentation. Microsoft.
- Google Cloud Functions Documentation. Google Cloud.
- Cloudflare Workers Documentation. Cloudflare.
- Yandex Cloud Functions Documentation. Yandex Cloud.
- VK Cloud Functions Documentation. VK Cloud.
- OpenFaaS Documentation. OpenFaaS Project.
- Knative Documentation. Knative Project.
- «Serverless Architectures on AWS» — Peter Sbarski, 2017.
- «Programming AWS Lambda» — John Chapin, 2020.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →