Node-RED

ICE Coreでは、ICE Core上のデータの流れを制御するデータフローを定義する手段として Node-RED連携によりデータフローをNode-REDのフローで定義可能となります。これにより、以下のようなメリットが得られます。

  • データフローの定義をGUI上で開発
  • 標準ノードやコミュニティにより公開されている様々なノードを利用してデータを加工・分析

ICE CoreとNode-REDの連携イメージを以下の図に示します。

overview

ICE CoreがNode-REDのインスタンス起動/停止を制御し、ICE Coreの起動/停止時に自動でNode-REDの起動/停止を行います。Node-REDはICE Coreと同じNode.jsプロセス上で動作します。
Node-REDからICE Coreの通信機能を利用するための入力/出力ノードを提供しており、それらのノードをフローに組み込むことでICE Coreのクラウド接続設定やデバイスアダプタをNode-REDから利用できます。Node-RED連携のためにICE Coreのトポロジを定義する必要は無く、ノード設定により接続するバックエンドやデバイスの切り替えが可能です。

バックエンドとの通信

ice backend inice backend outを用いてバックエンドと通信する際のデータフローです。

flowcloud

  • イベントデータ Node-REDのフローで発生したデータをバックエンドに送信します。任意の入力ノードと接続されたデバイスの採取データや、Node-REDのフローでデータ分析を行った結果などをバックエンドに送信するケースで利用します。ice backend outを出力ノードとして使用し、ICE Coreのトポロジを経由してバックエンドとの通信を行います。入力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

  • アクチュエーション バックエンドからのメッセージをNode-REDで受信します。任意の出力ノードに接続されたデバイスに指示を届けたり、Node-REDのフローで特定の処理を実行するトリガとして利用します。ice backend inを入力ノードとして使用し、ICE Coreのトポロジを経由してバックエンドとの通信を行います。出力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

デバイスとの通信

ice device inice device outを用いてデバイスと通信する際のデータフローです。

flowdevice

  • イベントデータ デバイスからのイベントデータをNode-REDで受信します。任意の出力ノードからデータ送信したり、Node-REDのフローでデータ分析を行ったりするケースで利用します。ice device inを入力ノードとして使用し、ICE Coreのトポロジを経由してデバイスアダプタと接続されたデバイスとの通信を行います。出力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

  • アクチュエーション デバイスへのメッセージをNode-REDから送信します。任意の入力ノードで受信したデータをデバイスに届けたり、Node-REDのフローでデータ分析を行った結果をデバイスに返却したりするケースで利用します。ice device outを出力ノードとして使用し、ICE Coreのトポロジを経由してデバイスアダプタと接続されたデバイスとの通信を行います。入力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

エッジアプリケーションとの通信

ice app inice app outice app functionを用いてデバイスと通信する際のデータフローです。

flowapp

  • イベントデータ エッジアプリケーションからのイベントデータをNode-REDで受信します。任意の出力ノードからデータ送信したり、Node-REDのフローでデータ分析を行ったりするケースで利用します。ice app inを入力ノードとして使用し、ICE Coreのトポロジを経由してエッジアプリケーションとの通信を行います。出力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

  • アクチュエーション エッジアプリケーションのメッセージをNode-REDから送信します。任意の入力ノードで受信したデータをエッジアプリケーションに届けたり、Node-REDのフローでデータ分析を行った結果をエッジアプリケーションに返却したりするケースで利用します。ice app outを出力ノードとして使用し、ICE Coreのトポロジを経由してエッジアプリケーションとの通信を行います。入力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

flowappfunc

  • イベントデータ加工 Node-REDのフローを流れるイベントデータをエッジアプリケーションで加工します。任意の出力ノードや、ice device inから取得したデータを、バックエンドに送信する前に加工したい場合などに利用します。ice app functionをファンクションノードとして使用し、ICE Coreのトポロジを経由してエッジアプリケーションとの通信を行います。入出力ノードには、ICE提供ノードを含めた様々なノードを適用できます。

トポロジ機能(旧互換)

従来機能であるトポロジを併用する場合のデータフローです。

flowcompat

Node-REDと連携せず、トポロジによるデータフロー定義を行っているのが図中の青枠部分です。青枠の通信はV1.1までのデータフロー定義と互換性を保っており、Node-RED連携に影響を受けずに、従来通りの通信が可能です。

Node-REDフロー統計情報出力機能

Node-REDフローの動作統計情報を定期的に出力する機能です。
この機能を使用することで、Node-REDフロー上のノードの処理状況を確認することができます。
例として以下のような使い方ができます。

  • Node-REDフローを動作させるシステムでフロー上の指定したノードを通過する秒あたりのメッセージ数が想定量かどうかを確認することにより、システム運用者がフローの動作が期待通りに行われているかを監視
  • Node-REDフロー上の特定のノードを通過する秒あたりのメッセージ数を計測、比較することにより、フロー開発者がフローの特定箇所の性能を把握し、ボトルネックの抽出・評価に活用

提供機能

この機能では以下の統計情報を定期的に出力します。出力形式や採取間隔は設定ファイル内で指定します。

  • 採取間隔毎にNode-REDフロー上の指定したノードが送信(send)、受信(receive)、完了(done)したメッセージ数の秒あたりの平均値
  • 採取間隔毎にICEのプロセスが使用する実メモリ、総ヒープサイズ、使用ヒープサイズ(バイト単位)の値

また、以下のように複数ノードの統計情報を採取するように応用することも可能です。

  • 指定ノードをsend, receive, done毎に複数設定
    統計情報を採取するノードをsend, receive, done毎に複数指定できます。複数のノードを指定した場合は、send, receive, done毎に指定したノードのメッセージ数を合計した値の秒あたりの平均値が出力されます。
    この機能により、例えば以下のような構成の計測が行えます。 複数のノードを指定して総メッセージ数を取得するイメージ この構成では、二つのfunctionノードに対して、青丸のメッセージ受信数の総数と、緑丸のメッセージ送信数の総数の秒あたりの平均値が結果として出力されます。受信と送信のメッセージ数を比較することで、これら2つのノードがリアルタイムに処理できているかどうかを簡易的に確認することができます。
    この設定は任意で、既定値はノードの指定なしです。
  • 採取範囲(モニタリンググループ)を複数定義
    統計情報を採取するsend, receive, doneの組み合わせを複数個指定できます。これにより、一度の実行でフロー内の複数個所の統計情報が同時に採取できます。
    この機能は、例えば以下のような構成で利用できます。 複数のグループを指定して同時に取得するイメージ この構成では、赤四角のモニタリンググループ1とモニタリンググループ2の2箇所でそれぞれ受信と送信の秒あたりのメッセージ数をリアルタイムで取得します。これにより、各赤四角内のノードがそれぞれ想定通りの性能で処理を行えているかどうかを同時に確認することができます。
    この設定は任意で、既定値はモニタリンググループが一つ定義されています。

設定方法についてはnodered_settings.jsの項目を参照してください。