Новый движок для бессерверных приложений обработки данных

Наш движок приложений данных 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: