Новый движок для бессерверных приложений обработки данных
Наш движок приложений данных Scramjet имеет собственный подход к развертыванию и запуску бессерверных приложений; в нескольких аспектах отличается от решений в таких областях, как программные шины, интеграционные платформы и предложения FaaS. В этой статье объясняется наш подход. Надеемся, вам будет интересно.
Платформа обработки данных «3 в 1»
Сердце нашего решения и его механизма обработки данных называется «Scramjet Transform Hub». Он доступен в виде отдельного программного пакета на GitHub и станет основным элементом нашей облачной платформы Scramjet.
Мы называем наш подход «платформа обработки данных 3 в 1», поскольку он объединяет 3 концепции в одно решение:
- механизм обработки данных
- бессерверные приложения для работы с данными
- полный API с выделенным интерфейсом командной строки (охватывающий конечные точки ввода-вывода и управления)
Рассмотрим каждый пункт отдельно.
Механизм обработки данных
Scramjet Transform Hub создает унифицированную среду развертывания, выполнения, управления и выполнения для бессерверных приложений (последовательностей).
Короче говоря, STH позволяет начать обработку данных в 3 простых шага:
1. Развернуть
si sequence send <sequence-package-tar>
2. Беги
si sequence run <sequence-id>
3. Отправить данные
curl -H “Content-Type: application/octet-stream” — data-binary “@file.txt” <instance-input-endpoint>
Вы можете опубликовать в нашей последовательности простой HTTP-запрос, файл, отправить поток или даже прочитать данные из другого потока или API.
Обратите внимание, что, в отличие от типичных архитектур микросервисов, здесь нет дорогостоящего этапа создания образа в контейнере, помещения его в реестр и последующей загрузки в оркестратор контейнеров для запуска микросервиса. Вы можете перейти от каталога с кодом к последовательной обработке ваших данных менее чем за минуту.
Мы упаковываем наши приложения, но их размер измеряется в килобайтах, а не в сотнях мегабайт, как в случае образов контейнеров. Минимальный дизайн приложения обеспечивает лучшую производительность, оптимизированное использование ресурсов и более простой процесс CI/CD.
Мы подготовили короткую трехминутную демонстрацию, показывающую весь процесс подготовки, развертывания и запуска приложения (последовательности) на нашем канале YouTube (см. Scramjet Transform Hub — Intro demo)
Бессерверные приложения для работы с данными
Мы называем пользовательские приложения последовательностями. У них есть возможность выполнять непрерывную обработку данных и потоков, у них нет ограничений по времени выполнения или размеру входных данных.
Каждая последовательность имеет простую структуру — это каталог как минимум с двумя основными файлами:
- package.json — простой файл JSON, описывающий метаданные последовательности.
- index.[js/ts] — файл JavaScript или TypeScript с кодом последовательности. Вы можете структурировать свое приложение в несколько файлов, если хотите.
Ниже приведено содержимое одной из наших образцов последовательностей «hello world», дающих целые числа.
const {DataStream} = require(“scramjet”); module.exports = async function(stream, start = 0, end = 1000) { await DataStream.from(async function*() { let i = +start || 0; while(i++ < end) { await new Promise(res => setTimeout(res, 1000)); yield {x: i}; } }) .do(console.log) .run() }
Вы можете найти вводную информацию и другие примеры в нашем специальном репозитории scramjetorg/scramjet-cloud-docs.
API и интерфейс командной строки
Давайте посмотрим на Transform Hub API с помощью команд, доступных в нашем CLI:
- pack [options] — директория пакета с кодом последовательности в файл tar.gz
- host [команда] — контролировать и проверять версию хоста
- config|c [команда] — отображать и управлять конфигурацией
- sequence|seq [команда] — упаковка, развертывание, управление и мониторинг последовательностей (шаблонов приложений)
- instance|inst [команда] — управление и мониторинг экземпляров (запущенных приложений)
Приведенные выше команды (и связанный с ними API) охватывают полное управление механизмом обработки данных и бессерверными приложениями, работающими поверх него.
После запуска каждый запущенный экземпляр предоставляет следующие конечные точки API:
- ввод, вывод
- стандартный ввод, стандартный вывод, стандартный вывод
- журнал, мониторинг
- _event (в экземпляр), событие (из экземпляра)
- остановись, убей
Этот подход соответствует подходу «батареи включены», и каждый работающий экземпляр обрабатывается одинаково.
Почему наша облачная платформа Scramjet
Наш подход, показанный выше, имеет несколько преимуществ:
- Свобода и гибкость — никаких искусственных ограничений на размер данных и время выполнения приложений; нет «ограничения времени выполнения» или «ограничения размера полезной нагрузки».
- Отличное соотношение цены и качества — эффективные рабочие процессы данных с полностью программируемым сбором данных, возможностью создания шаблонов между экземплярами, выполняющими различные задачи обработки данных.
- Производительность по дизайну — мгновенное выполнение данных без прокси, очередей и шлюзов. Легкие приложения с минимальным потреблением ресурсов.
- Работает кросс-нативно (Edge & Cloud) — из коробки, охватывающей разные местоположения. Запускайте приложения того же типа на периферийных или интеллектуальных устройствах через автономный концентратор Scramjet Transform Hub и на нашей облачной платформе Scramjet.
Подводя итог, ниже вы найдете диаграмму, показывающую различные шаблоны цепочки обработки данных на нашей платформе:
Здесь вы можете найти дополнительные ресурсы, связанные с Scramjet Transform Hub и решениями oru: