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 — база данных для хранения состояния функций, триггеров, правил и пакетов.
Поток выполнения
- Внешнее событие (например, HTTP-запрос) поступает на Nginx.
- Nginx передаёт запрос Controller, который проверяет аутентификацию и находит соответствующее действие (функцию).
- Controller помещает сообщение в очередь Kafka.
- Invoker получает сообщение из Kafka, загружает код функции из хранилища (например, Docker Registry) и запускает контейнер.
- Функция выполняется, результат возвращается через 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 Functions | AWS Lambda | Azure Functions | Google 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 →