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

IBM Cloud Functions

IBM Cloud Functions — это серверная платформа для выполнения функций как услуги (FaaS), предоставляемая компанией IBM на базе проекта с открытым исходным кодом Apache OpenWhisk. Платформа позволяет разработчикам запускать код в ответ на события, не управляя серверной инфраструктурой, и автоматически масштабируется в зависимости от нагрузки.

История

Проект Apache OpenWhisk, лежащий в основе IBM Cloud Functions, был изначально разработан компанией IBM. В феврале 2016 года IBM представила бета-версию сервиса под названием IBM Bluemix OpenWhisk. В 2017 году проект был передан в инкубатор Apache Software Foundation, где получил статус проекта верхнего уровня (Top-Level Project) в ноябре 2019 года. В том же году сервис был переименован в IBM Cloud Functions в рамках ребрендинга облачной платформы IBM Cloud.

Платформа стала частью стратегии IBM по развитию гибридных облачных вычислений и бессерверных архитектур. В 2020 году, после приобретения Red Hat, IBM Cloud Functions была интегрирована с платформой OpenShift, что позволило запускать функции как в публичном облаке IBM, так и в локальных средах.

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

Модель выполнения

IBM Cloud Functions реализует событийно-ориентированную модель. Пользователь загружает код (функцию) в виде одного из поддерживаемых языков или пользовательского образа Docker. При наступлении триггерного события (например, HTTP-запрос, изменение в базе данных, загрузка файла) платформа автоматически создаёт контейнер, выполняет код и возвращает результат. После выполнения контейнер уничтожается, что исключает затраты на простой.

Компоненты системы

Архитектура Apache OpenWhisk включает несколько ключевых компонентов:

  • Nginxточка входа для всех HTTP-запросов, выполняет балансировку нагрузки и аутентификацию.
  • Controller — центральный компонент, отвечающий за маршрутизацию запросов, управление триггерами и правилами.
  • Kafkaочередь сообщений, используемая для асинхронной передачи событий между компонентами.
  • Invoker — компонент, управляющий жизненным циклом контейнеров Docker. Он получает запросы на выполнение, запускает контейнеры и возвращает результаты.
  • CouchDB — база данных для хранения состояния функций, триггеров, правил и пакетов.

Поток выполнения

  1. Внешнее событие (например, HTTP-запрос) поступает на Nginx.
  2. Nginx передаёт запрос Controller, который проверяет аутентификацию и находит соответствующее действие (функцию).
  3. Controller помещает сообщение в очередь Kafka.
  4. Invoker получает сообщение из Kafka, загружает код функции из хранилища (например, Docker Registry) и запускает контейнер.
  5. Функция выполняется, результат возвращается через Invoker и Controller обратно клиенту.

Ключевые характеристики

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

Платформа автоматически масштабирует количество экземпляров функции в зависимости от числа входящих запросов. При отсутствии запросов контейнеры останавливаются, что позволяет экономить ресурсы. Максимальное количество одновременных вызовов ограничено квотой аккаунта.

Тайм-ауты и ограничения

  • Максимальное время выполнения функции: 10 минут (600 секунд) по умолчанию, может быть увеличено до 30 минут.
  • Максимальный размер кода: 50 МБ для ZIP-архива или образа Docker.
  • Максимальный размер полезной нагрузки: 5 МБ для запроса и 5 МБ для ответа.
  • Максимальное количество одновременных вызовов: 1000 на аккаунт (по умолчанию).

Поддерживаемые языки и среды

IBM Cloud Functions поддерживает несколько сред выполнения:

  • Node.js (версии 8, 10, 12, 14, 16, 18)
  • Python (3.6, 3.7, 3.9, 3.10, 3.11)
  • Java (8, 11, 17)
  • Swift (4.2, 5.1)
  • Go (1.19)
  • Ruby (2.5, 2.6, 2.7)
  • PHP (7.3, 7.4, 8.0)
  • .NET Core (3.1, 6.0)
  • Пользовательские образы Docker — любой язык или среда, упакованные в Docker-образ, соответствующий протоколу OpenWhisk.

Основные понятия

Действия (Actions)

Действие — это фрагмент кода, который выполняется на платформе. Действия могут быть:

  • Простые — одна функция на одном из поддерживаемых языков.
  • Последовательныецепочка из нескольких действий, где выход одного действия передаётся на вход следующего.
  • Пользовательские — код, упакованный в Docker-образ.

Триггеры (Triggers)

Триггер — это именованный канал для событий. При наступлении события (например, HTTP-запрос, изменение в базе данных) триггер активируется и может запускать одно или несколько действий через правила.

Правила (Rules)

Правило связывает триггер с действием. Когда триггер активируется, правило вызывает связанное действие, передавая ему данные события.

Пакеты (Packages)

Пакеты — это способ группировки связанных действий и фидов (feeds). Фиды — это предварительно настроенные триггеры для внешних сервисов (например, GitHub, Slack, Cloudant).

Интеграция с сервисами IBM Cloud

IBM Cloud Functions интегрируется с рядом сервисов IBM Cloud, что позволяет создавать автоматизированные рабочие процессы:

  • IBM Cloud Object Storage — запуск функции при загрузке или удалении объекта.
  • IBM Cloudant — запуск функции при изменении документа в базе данных NoSQL.
  • IBM Watson — обработка данных через сервисы искусственного интеллекта.
  • IBM Cloud Databases — реакция на изменения в PostgreSQL, Redis, Elasticsearch и других базах данных.
  • IBM Event Streamsобработка событий из Apache Kafka.

Сравнение с другими FaaS-платформами

ХарактеристикаIBM Cloud FunctionsAWS LambdaAzure FunctionsGoogle Cloud Functions
Макс. время выполнения10 мин (до 30)15 мин10 мин9 мин (HTTP) / 60 мин (фоновые)
Макс. размер кода50 МБ250 МБ (слой)1 ГБ500 МБ
Поддержка DockerДа (нативный)Через Lambda LayersЧерез пользовательские образыЧерез Cloud Run
ЦенообразованиеЗа вызовы, время выполнения, памятьЗа вызовы, время, памятьЗа вызовы, время, памятьЗа вызовы, время, память
Открытый исходный кодДа (Apache OpenWhisk)НетНетНет

Применение

IBM Cloud Functions используется для решения следующих задач:

  • Обработка событий — автоматическая обработка загружаемых файлов, изменение данных в базах данных.
  • Создание API — реализация микросервисов с помощью HTTP-триггеров.
  • Пакетная обработка данных — выполнение задач по расписанию с помощью триггеров Cron.
  • Интеграция сервисов — связывание различных облачных сервисов через события.
  • Обработка изображений и видео — изменение размера, конвертация форматов, анализ содержимого.

Ограничения и критика

  • Холодный старт — при первом вызове после периода бездействия требуется время на запуск контейнера (обычно 1–3 секунды).
  • Ограничения по времени выполнения — функции, требующие более 30 минут, не могут быть выполнены напрямую.
  • Зависимость от экосистемы IBM — глубокая интеграция с сервисами IBM Cloud может усложнить миграцию на другие платформы.
  • Сложность отладки — ограниченные возможности локальной отладки по сравнению с традиционными приложениями.
  • Меньшая популярность — по сравнению с AWS Lambda, Azure Functions и Google Cloud Functions, платформа имеет меньшую долю рынка и сообщество.

Интересные факты

  • Apache OpenWhisk, лежащий в основе сервиса, является одним из немногих FaaS-проектов с открытым исходным кодом, который можно развернуть локально.
  • IBM Cloud Functions поддерживает выполнение функций в нескольких регионах, включая США, Европу и Азиатско-Тихоокеанский регион.
  • Платформа позволяет создавать «последовательные действия» (sequences), где выход одной функции автоматически передаётся на вход другой без необходимости писать дополнительный код.

Источники

  • Официальная документация IBM Cloud Functions
  • Apache OpenWhisk — документация проекта
  • IBM Cloud Functions — руководство пользователя
  • Сравнительный анализ FaaS-платформ (статья на Habr)
  • Документация по архитектуре Apache OpenWhisk

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

На главную BFOmetr →