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

FaaS

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

История

Концепция FaaS возникла как развитие более широкой парадигмы бессерверных вычислений, которая начала формироваться в конце 2000-х годов. Первым коммерчески успешным сервисом FaaS считается AWS Lambda, запущенный Amazon Web Services в ноябре 2014 года. Его появление было вызвано стремлением упростить разработку микросервисов и снизить эксплуатационные расходы.

В 2016 году Google представил Google Cloud Functions, а MicrosoftAzure 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-запрос, загрузка файла в хранилище, запись в базу данных, сообщение из очереди или таймер.
  • Платформа выполнения — среда, которая управляет жизненным циклом функции: выделяет ресурсы, загружает код, запускает выполнение, обрабатывает ошибки и освобождает ресурсы после завершения.
  • Хранилище состояний — внешние сервисы (базы данных, кэши, очереди), которые функция использует для хранения данных между вызовами, так как сама функция по умолчанию является статичной.

Процесс выполнения:

  1. Происходит событие (например, HTTP-запрос).
  2. Платформа FaaS проверяет, есть ли уже запущенный экземпляр функции (холодный или горячий старт).
  3. Если экземпляра нет, платформа создаёт его (холодный старт), загружая код и инициализируя среду.
  4. Функция выполняется, получая входные данные и возвращая результат.
  5. После завершения выполнения платформа может сохранить экземпляр на некоторое время для повторного использования (горячий старт) или сразу уничтожить его.

Холодный и горячий старт

  • Холодный старт — ситуация, когда функция запускается впервые после периода бездействия. Время холодного старта может составлять от 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 ServicesAWS Lambda2014Первый коммерческий FaaS; поддержка Python, Node.js, Java, Go, C#, Ruby, PowerShell; интеграция с большинством сервисов AWS
Microsoft AzureAzure Functions2016Поддержка C#, Java, JavaScript, Python, PowerShell; интеграция с Azure Logic Apps; возможность использования в on-premise среде
Google Cloud PlatformGoogle Cloud Functions2016Поддержка Node.js, Python, Go, Java, .NET, Ruby, PHP; интеграция с Firebase; поддержка Cloud Run
IBM CloudIBM Cloud Functions2017Основан на Apache OpenWhisk; поддержка Node.js, Python, Swift, Java, Go; возможность развёртывания на собственных серверах
CloudflareCloudflare Workers2019Выполнение на границе сети (edge); поддержка JavaScript, Rust, C, C++; использование WebAssembly; низкая задержка
Yandex CloudYandex Cloud Functions2019Поддержка Python, Node.js, Go, PHP, Java, .NET; интеграция с сервисами Yandex Cloud; соответствие законодательству РФ
VK CloudCloud Functions2020Поддержка 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 →