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

OpenWhisk

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

История

Проект OpenWhisk был анонсирован IBM в феврале 2016 года как часть облачной платформы IBM Cloud. В ноябре того же года IBM передала исходный код проекта в инкубатор Apache Software Foundation, что позволило сообществу разработчиков участвовать в его развитии. В 2019 году OpenWhisk вышел из инкубатора и стал полноценным проектом Apache (Apache OpenWhisk). С этого момента платформа развивается как независимый открытый проект, поддерживаемый сообществом.

Основной целью создания OpenWhisk было предоставление альтернативы проприетарным бессерверным платформам, таким как AWS Lambda от Amazon или Azure Functions от Microsoft, с возможностью развёртывания на собственных серверах или в частных облаках.

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

OpenWhisk построена на архитектуре, ориентированной на события (event-driven architecture). Ключевыми компонентами системы являются:

  • Функции (Actions) — фрагменты кода, написанные на одном из поддерживаемых языков программирования (JavaScript, Python, Swift, Java, Go, Ruby, PHP и другие). Функции выполняются в изолированных контейнерах (Docker) и могут быть вызваны синхронно или асинхронно.
  • Триггеры (Triggers) — механизмы, которые связывают определённые события с функциями. Например, запись в базу данных, HTTP-запрос или поступление сообщения в очередь могут служить триггерами.
  • Правила (Rules) — связывают триггеры с функциями, определяя, какая функция должна быть выполнена при наступлении события.
  • Пакеты (Packages) — наборы готовых функций, триггеров и правил, которые можно использовать повторно. Пакеты могут быть как встроенными (например, для работы с базами данных, очередями сообщений, HTTP-запросами), так и созданными пользователями.
  • Потоки (Sequences) — возможность объединять несколько функций в цепочку, где выход одной функции становится входом для следующей.

Процесс выполнения выглядит следующим образом: при наступлении события (например, HTTP-запрос к API) срабатывает триггер, который через правило запускает соответствующую функцию. Платформа автоматически выделяет вычислительные ресурсы для выполнения функции, а после завершения работы освобождает их. Время выполнения функции ограничено (по умолчанию до 60 секунд, но может быть увеличено).

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

OpenWhisk можно классифицировать по нескольким признакам:

  • По способу развёртывания:
  • Облачная версия (IBM Cloud Functions) — управляемый сервис, предоставляемый IBM на базе OpenWhisk. Пользователь не управляет инфраструктурой.
  • Локальная версия (Self-hosted) — установка OpenWhisk на собственных серверах или в частном облаке с использованием Kubernetes, Docker Compose или других инструментов оркестрации.
  • По типу поддерживаемых языков:
  • Основные языки: JavaScript (Node.js), Python, Swift, Java, Go, Ruby, PHP.
  • Дополнительные языки: через Docker-контейнеры можно запускать функции на любом языке, для которого есть образ.
  • По типу событий:
  • HTTP-события — вызов функции через REST API.
  • События баз данных — изменение данных в Cloudant, CouchDB, MongoDB и других.
  • События очередей сообщений — поступление сообщений в Apache Kafka, RabbitMQ, IBM MQ.
  • События таймера — выполнение функции по расписанию (cron).

Характеристики и возможности

  • Масштабируемость: OpenWhisk автоматически масштабирует количество выполняемых функций в зависимости от нагрузки. При отсутствии событий ресурсы не потребляются.
  • Изоляция: каждая функция выполняется в отдельном контейнере Docker, что обеспечивает изоляцию между функциями разных пользователей.
  • Поддержка нескольких языков: разработчики могут писать функции на разных языках в рамках одного проекта.
  • Интеграция с внешними системами: через пакеты и триггеры OpenWhisk может взаимодействовать с базами данных, очередями сообщений, системами мониторинга и другими сервисами.
  • Открытый исходный код: код платформы доступен на GitHub под лицензией Apache 2.0, что позволяет изучать, модифицировать и распространять его.
  • Управление через CLI и API: для работы с платформой предоставляется командная строка (wsk) и REST API.

Применение

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

  • Обработка данных в реальном времени: анализ логов, мониторинг систем, обработка потоков данных с датчиков (IoT).
  • Создание API и микросервисов: развёртывание REST-эндпоинтов, которые выполняют функции при HTTP-запросах.
  • Автоматизация задач: выполнение действий по расписанию (например, резервное копирование, отправка уведомлений).
  • Обработка изображений и видео: изменение размера, конвертация форматов, распознавание объектов.
  • Интеграция с облачными сервисами: связывание функций с базами данных, хранилищами, очередями сообщений.

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

  • Обработка загрузок файлов: при загрузке файла в облачное хранилище (например, IBM Cloud Object Storage) срабатывает триггер, который запускает функцию для изменения размера изображения или извлечения метаданных.
  • Чат-боты: функция, вызываемая через HTTP-запрос, обрабатывает сообщение пользователя и возвращает ответ.
  • Мониторинг IoT: датчики отправляют данные в очередь сообщений, откуда они извлекаются функцией для анализа и сохранения в базу данных.

Критика и ограничения

  • Ограничение времени выполнения: функции не могут выполняться дольше заданного лимита (обычно 60 секунд), что делает платформу непригодной для длительных задач.
  • Холодный старт: при первом вызове функции после длительного простоя может наблюдаться задержка, связанная с запуском контейнера.
  • Сложность отладки: из-за распределённой архитектуры и отсутствия постоянного состояния отладка функций может быть затруднена.
  • Зависимость от Docker: для работы требуется наличие Docker-среды, что может быть ограничением в некоторых инфраструктурах.
  • Ограниченная поддержка языков: хотя список поддерживаемых языков широк, некоторые популярные языки (например, C#, Rust) требуют дополнительной настройки через Docker.

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

  • OpenWhisk является одним из немногих проектов Apache, который предоставляет полностью открытую реализацию бессерверной платформы.
  • Платформа поддерживает выполнение функций в нескольких регионах одновременно, что позволяет создавать географически распределённые приложения.
  • В 2020 году проект OpenWhisk был включён в рейтинг лучших открытых проектов по версии журнала InfoWorld.

Источники

  • Apache OpenWhisk. Официальная документация проекта.
  • IBM Cloud Functions. Руководство пользователя.
  • OpenWhisk на GitHub. Исходный код и документация.
  • Статья «Apache OpenWhisk: An Open Source Serverless Platform» на сайте The New Stack.
  • Документация по архитектуре OpenWhisk в репозитории Apache.

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

На главную BFOmetr →