OpenWhisk и двоичные данные из Google Flatbuffers

У нас есть данные, создаваемые имитируемым устройством, которое подключается к сети с помощью NanoMSG с полезной нагрузкой Google FlatBuffers (двоичный файл).

Мы бы хотели запускать шаблоны этих данных с помощью OpenWhisk и отвечать закодированными ответами Flatbuffer.

Предположим, что задержка и пропускная способность не являются большой проблемой здесь.

Какой подход мы можем использовать:

  1. Напишите ретранслятор, который преобразует Flatbuffer в JSON (для этого у FB есть утилита), а затем поместите данные на шину AMQP, которую слушает OpenWhisk? (у нас есть знакомые с AMQP, но не Kafka

  2. Попробуйте что-то сделать с Kafka, который, кажется, (возможно, это только версия IBM) напрямую обрабатывает двоичные Flabuffers (вероятно, все еще требуется переход от NanoMSG к Kafka. Например,

Как вызвать действие OpenWhisk из платформы IoT в Bluemix

https://medium.com/openwhisk/serverless-transformation-of-iot-data-in-motion-with-openwhisk-272e36117d6c

Не уверен, что нам все еще не нужен десериализатор и сериализатор JavaScript Flatbuffers для преобразования двоичных данных на основе64 в JavaScript в JSON

  1. Изучите Kakfa, а затем преобразуйте полезную нагрузку NanoMsg (Flatbuffers в JSON).

  2. Что-то другое?

Кто-нибудь имеет непосредственный опыт в этом?


Обновить

Спасибо, Джеймс, это точечные ссылки. Но это поднимает некоторые второстепенные вопросы:

  1. Если данные находятся в схеме Google FlatBuffers, то, по-видимому, нет никакого преимущества в использовании двоичного преобразования Kafka, так как mux/demux из base64 по-прежнему необходимо выполнять на уровне javascript.
  2. Немного тревожно, что Kafka (которая известна своей низкой задержкой) пакетирует события. Это влияет на задержку, когда у человека есть Iot (данные датчика), на которые нужно реагировать в замкнутом контуре на исполнительные механизмы (датчик-> управление-> исполнительные механизмы), - это обычная модель робототехники, и это в значительной степени близко к тому, что мы делает. На данный момент мы не выдвигаем проблему задержки, но я вижу новые случаи, когда нам понадобится низкая задержка. Что думают в сообществе провайдеров Kafka Whisk по этому поводу?
  3. Я должен что-то упустить, но провайдер AMQP говорит, что использует RHEA https://github.com/amqp/rhea. Это, кажется, обеспечивает все, что нужно для написания простого триггера / правил для работы с данными потока датчика. Зачем использовать OpenWhisk?

1 ответ

Решение

Любой вариант имеет смысл. Действия OpenWhisk получают и возвращают сообщения JSON. Двоичные данные, передаваемые в эти функции, должны быть в кодировке Base64.

Если вы используете ленту AMQP, вы можете вручную преобразовать двоичные данные в JSON.

Поставщик фидов Kafka поддерживает автоматическое кодирование двоичных входных значений (используя параметры isBinary*).

Kafka направляет пакеты сообщений в действия OpenWhisk. Это отличается от очереди сообщений, которая будет выдвигать одно сообщение за раз. Этот провайдер каналов встроен в OpenWhisk.

Здесь есть внешний провайдер сообщества для AMQP. Для этого вам нужно установить и запустить его вручную.

Другие вопросы по тегам