コンテンツにスキップ

Lab 1 - 概要

EdgeX Foundry の大まかなアーキテクチャを理解します。

EdgeX Foundry とは

公式サイト によれば、

The World’s First Plug and Play Ecosystem-Enabled Open Platform for the IoT Edge.

A highly flexible and scalable open software framework that facilitates interoperability between devices and applications at the IoT Edge, along with a consistent foundation for security and manageability regardless of use case.

とされています。

ひとまずは、

  • オープンソースで
  • IoT のエッジコンピューティングを実現する
  • フレームワークである

と思って向き合えば、大外れではないでしょう。

EdgeX Foundry は Linux Foundation が立ち上げた LF Edge のプロジェクトのひとつで、LF Edge には 現時点で 80 社以上がメンバとして掲載されています。

EdgeX Foundry のアーキテクチャ

アーキテクチャの概要は 公式のドキュメント からも読み解けます。

EdgeX Foundry は多数のマイクロサービスの集合体として実装されており、図中の各コンポーネントそれぞれがひとつのサービス(プロセスまたはコンテナ)として動作します。コンポーネント同士は、REST API や ZMQ で連携します。

データフローにかかわる部分では、図の中央部分のように全体で大きく 4 つのレイヤに分けられます。レイヤごとの役割をざっくり押さえておくとよいでしょう。

実デバイスに近い側(サウスサイド)から、大まかには以下の通りです。

  • デバイスサービス層
    • 様々なプロトコルを使って、デバイス群からデータを集める
    • 様々なプロトコルを使って、デバイス群を操作する
  • コアサービス層
    • デバイスサービスからのデータを蓄積する
    • デバイスサービスにデバイスの操作を依頼する
    • エクスポートサービスにデータを送る
    • メタデータを管理する
  • サポートサービス層
    • データを分析する(現時点では簡単なルールエンジン)
    • アラートの発行、ロギング、データのクリーンアップなど、様々なサポート機能を実行する
  • エクスポートサービス(アプリケーションサービス)層
    • EdgeX Foundry の外部にデータを送る

これらは、ソースコードからビルドして動作させるほか、Docker Compose を利用してコンテナとして動作させたり、Ubuntu では Snap による導入も可能です。動作させるためのハードウェア要件は厳しくなく、Raspberry Pi 4 のような小さなハードウェアでも充分に動作します。

実装は、Fuji リリースでは一部 Java も残っているものの、Go 言語と C 言語が主のようです。デバイスサービス層やエクスポートサービス層の実装のためには SDK も提供されており、開発に参加もできます。

アプリケーションサービス層

エクスポートサービス層 の役割と名称は、徐々に アプリケーションサービス層 に置き換えられつつあり、Geneva リリースからは アプリケーションサービス層 に統一されています。Fuji リリースのドキュメントでは、エクスポートサービス用の記述とアプリケーションサービス用の記述が混在していますが、できるだけアプリケーションサービスを利用したほうがよいでしょう。本ガイドでも、エクスポート機能の実装にはアプリケーションサービスを利用しています。

参考リンク