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

Apache OpenWhisk

Apache OpenWhisk — это платформа с открытым исходным кодом для бессерверных вычислений (serverless computing), которая позволяет выполнять код в ответ на события, автоматически управляя инфраструктурой, масштабированием и ресурсами. Относится к классу распределённых систем и функций-как-сервис (FaaS). Ключевые характеристики: поддержка множества языков программирования, событийно-ориентированная архитектура, возможность интеграции с различными внешними сервисами и системами.

История

Проект Apache OpenWhisk был изначально разработан компанией IBM и представлен в 2016 году как основа для облачного сервиса IBM Cloud Functions. В том же году IBM передала код проекта в инкубатор Apache Software Foundation. В 2018 году проект получил статус «Top-Level Project» (TLP) в Apache Software Foundation, что подтвердило его зрелость и стабильность. Развитие OpenWhisk продолжается сообществом разработчиков и компаниями, включая IBM, Adobe, Red Hat и другие организации.

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

OpenWhisk построена на событийно-ориентированной модели. Система состоит из нескольких ключевых компонентов, взаимодействующих через REST API.

Основные компоненты

  • Controller — главный управляющий компонент, обрабатывающий входящие запросы, управляющий аутентификацией и авторизацией, а также координирующий выполнение действий.
  • Invoker — компонент, отвечающий за непосредственное выполнение кода действий (actions) в изолированных контейнерах. Invoker управляет жизненным циклом контейнеров и их масштабированием.
  • Kafka — система обмена сообщениями, используемая для асинхронной передачи событий и задач между компонентами. Гарантирует надёжность доставки и упорядочивание сообщений.
  • CouchDB — база данных, используемая для хранения состояния системы, конфигураций, определений действий, триггеров, правил и пакетов. В некоторых реализациях может использоваться Cloudant.
  • Nginxобратный прокси-сервер, обеспечивающий балансировку нагрузки и терминацию HTTPS-соединений.

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

  1. Событие (event) поступает в систему через REST API или от внешнего источника (например, HTTP-запрос, сообщение из очереди, изменение в базе данных).
  2. Триггер (trigger) — именованная сущность, представляющая канал для событий. При активации триггера система проверяет, какие правила (rules) связаны с этим триггером.
  3. Правило (rule) связывает триггер с одним или несколькими действиями (actions). Если правило активно, при срабатывании триггера запускается соответствующее действие.
  4. Действие (action) — это фрагмент кода (функция), написанный на одном из поддерживаемых языков. Код выполняется в изолированном контейнере (Docker). Результат выполнения возвращается инициатору или передаётся в следующее действие.
  5. Последовательности (sequences) позволяют объединять несколько действий в цепочку, где выход одного действия становится входом для следующего.

Классификация и виды

OpenWhisk поддерживает несколько типов сущностей и операций:

Действия (Actions)

  • Чёрные ящики (blackbox) — действия, упакованные в произвольный Docker-образ. Разработчик может использовать любой язык или инструмент, поддерживаемый Docker.
  • Предопределённые среды — действия на языках, для которых предоставлены готовые образы выполнения: Node.js, Python, Swift, Java, Go, Ruby, PHP, .NET Core, а также скрипты Bash.
  • Последовательности — комбинация нескольких действий, выполняемых последовательно.

Триггеры (Triggers)

  • Системные триггеры — встроенные триггеры, реагирующие на события внутри OpenWhisk (например, активация действия, изменение конфигурации).
  • Пользовательские триггеры — создаются разработчиком для реакции на внешние события (например, HTTP-запрос, сообщение из Kafka, изменение в базе данных).

Пакеты (Packages)

  • Системные пакеты — предустановленные пакеты, содержащие готовые действия и триггеры для интеграции с популярными сервисами: GitHub, Slack, Watson, Cloudant, Kafka, Object Storage и другими.
  • Пользовательские пакеты — создаются разработчиками для группировки связанных действий, триггеров и правил.

Правила (Rules)

  • Простые правила — связывают один триггер с одним действием.
  • Составные правила — могут связывать триггер с последовательностью действий или несколькими действиями.

Применение и значение

OpenWhisk используется для построения микросервисных архитектур, обработки событий в реальном времени, создания API-бэкендов, автоматизации задач и интеграции облачных сервисов. Основные области применения:

  • Обработка данныхфильтрация, трансформация и агрегация данных в реальном времени (например, логи, метрики, потоки IoT).
  • Автоматизация DevOps — запуск тестов, деплой приложений, мониторинг инфраструктуры при наступлении событий (коммит в репозиторий, создание issue).
  • Создание веб-приложений — реализация серверной логики без управления серверами, обработка HTTP-запросов, аутентификация, генерация контента.
  • Интеграция сервисов — связывание различных облачных и локальных сервисов через события (например, загрузка файла в Object Storage → обработка изображения → отправка уведомления).
  • Образовательные и исследовательские проекты — изучение бессерверных архитектур, прототипирование, хакатоны.

Примеры использования

  • Adobe I/O Runtime — коммерческая реализация OpenWhisk, используемая для создания расширений и интеграций в экосистеме Adobe.
  • IBM Cloud Functionsоблачный сервис на базе OpenWhisk, предоставляемый IBM.
  • Red Hat OpenShift Serverless — интеграция OpenWhisk с платформой контейнеризации OpenShift для развёртывания бессерверных приложений.
  • Локальное развёртывание — OpenWhisk может быть установлен на собственных серверах или в частном облаке с помощью Docker Compose, Kubernetes или OpenShift.

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

  • OpenWhisk поддерживает выполнение кода на более чем 10 языках программирования, включая не только популярные, но и специфические (например, Swift, Bash).
  • Время холодного старта (запуск контейнера с кодом) в OpenWhisk составляет в среднем 200–500 миллисекунд, что сравнимо с другими FaaS-платформами.
  • Проект использует Apache Kafka для асинхронной обработки событий, что обеспечивает высокую пропускную способность и отказоустойчивость.
  • OpenWhisk может быть развёрнут как на одном сервере (для разработки), так и в кластере из сотен узлов (для production-нагрузок).

Критика

Основные недостатки OpenWhisk:

  • Сложность настройки — для развёртывания и администрирования требуется знание Docker, Kafka, CouchDB и других компонентов.
  • Ограниченная документация — по сравнению с коммерческими платформами (AWS Lambda, Google Cloud Functions) документация OpenWhisk менее подробная и структурированная.
  • Производительность — при высоких нагрузках возможны задержки из-за холодного старта контейнеров, особенно для редко используемых действий.
  • Экосистема — меньшее количество готовых интеграций и сторонних библиотек по сравнению с проприетарными решениями.

Источники

  • Apache OpenWhisk. Официальная документация проекта. Apache Software Foundation.
  • IBM Cloud Functions Documentation. IBM.
  • «Serverless Architectures with Apache OpenWhisk». O’Reilly Media.
  • «Apache OpenWhisk: A Practical Guide». Packt Publishing.
  • Статьи и материалы сообщества Apache OpenWhisk на GitHub и в блогах разработчиков.

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

На главную BFOmetr →