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-соединений.
Процесс выполнения
- Событие (event) поступает в систему через REST API или от внешнего источника (например, HTTP-запрос, сообщение из очереди, изменение в базе данных).
- Триггер (trigger) — именованная сущность, представляющая канал для событий. При активации триггера система проверяет, какие правила (rules) связаны с этим триггером.
- Правило (rule) связывает триггер с одним или несколькими действиями (actions). Если правило активно, при срабатывании триггера запускается соответствующее действие.
- Действие (action) — это фрагмент кода (функция), написанный на одном из поддерживаемых языков. Код выполняется в изолированном контейнере (Docker). Результат выполнения возвращается инициатору или передаётся в следующее действие.
- Последовательности (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 →