目次
EdgeX Foundry 関連エントリ
- 冬休みの自由研究: EdgeX Foundry (1) 概要
- 冬休みの自由研究: EdgeX Foundry (2) 導入とデータの確認
- 冬休みの自由研究: EdgeX Foundry (3) エクスポートサービスによるエクスポート
- 冬休みの自由研究: EdgeX Foundry (4) MQTT デバイスサービスの追加
- 冬休みの自由研究: EdgeX Foundry (5) ルールエンジンによる自動制御
- 冬休みの自由研究: EdgeX Foundry (6) アプリケーションサービスによるエクスポート
- 冬休みの自由研究: EdgeX Foundry (7) Kubernetes 上で Fuji リリースを動かす
- EdgeX Foundry ハンズオンラボガイド公開
- EdgeX Foundry: Geneva から Hanoi へ
きっかけ
本業が IT やさんではあるもの、IoT とその周辺とは疎遠な日々を過ごしていました。
そんなある日、あるイベントで EdgeX Foundry の存在を教えてもらい、手元に Raspberry Pi もあるものだから、いろいろ調べて実際に触ってみたわけです。IoT 関連のトレンドはまったく追えている気がしていなかったので、良い機会だしお勉強しましょうということで。
その結果、最新の Fuji リリースがすでに家で動いているのですが、技術的な諸々は長くなったので別のエントリにします。今回は概要編的なヤツです。
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.
https://www.edgexfoundry.org/
とされています。
ひとまずは、
- オープンソースで
- IoT のエッジコンピューティングを実現する
- フレームワークである
と思って向き合えば、大外れではないでしょう。
これは Linux Foundation が立ち上げた LF Edge のプロジェクトのひとつで、LF Edge には 現時点で 80 社以上 がメンバとして掲載されています。
つまり、素性のわからない謎の OSS ということではまったくなく、 実際のコントリビュータとしても Dell Technologies や Intel などの面々が精力的に活動しています。後ろ盾があるのは安心感がありますね。
EdgeX Foundry とエッジコンピューティング
クラウド、というキーワードが盛り上がり始めたころは、『とにかく全部クラウドに持っていけ! 何でもクラウドに投げこめ!』みたいな風潮も少なからずあったと思います。
が、その後、ハイブリッドクラウドやマルチクラウドなど諸々の議論を経て、最近は、いやいや、何をするにもやっぱり使い分けだよね、という共通認識が形成されつつあり、どちらかといえばふたたび分散型に(前向きに)回帰しています。
IoT の文脈では、処理すべきデータが生まれる場所、あるいは操作すべきデバイスが存在する場所は、少なくともクラウドの中ではないわけで、つまり工場やら家やらオフィスやら屋外やら、目の前にある現実の身近などこかであるわけです。
であれば、
- 何万もあるセンサが毎秒クラウドに生データを送り続けるのも非効率だ
- クラウド上で分析にかけるにしても、大量の生データである必要はなく、分析に適した形式にフィルタ(または変換)されたデータだけあればよい
- クラウドに送って、クラウドで処理して、クラウドから命令が来るとなると、端的に遅延がありすぎてリアルタイムに制御できない
- 機微データなのでそのままはクラウドに送りたくない
など、コストやら応答速度やらセキュリティやらの諸々で、
- だったらエッジ側に閉じて処理してしまったほうがよくない?
- 最終的にクラウドに集めるにしても、必要なデータを必要な形にエッジ側で加工してから送ればよくない?
ということになり、ここからいわゆる『エッジコンピューティング』の概念が導出されてきます。5G も最近話題ですが、これもエッジコンピューティングの文脈でもよく出てきますね。
とはいえ、こうしたエッジコンピューティングを実現しようとしても、いろいろなデバイスがいろいろなプロトコルを使っていることもあり、 特に産業分野での IoT の文脈では、いわゆる鉄板のアーキテクチャ的なモノが成熟しておらず、デバイスと上位の分析基盤やアプリケーションとの円滑な連携にはまだまだ課題もあるようです。
EdgeX Foundry は、こうした IoT の世界におけるエッジコンピューティングのためのプラットフォームとしてフレームワークを提供するものであり、具体的には、デバイス群の制御やそれらからのデータの収集、加工、分析、外部への送出など、必要な一連の機能それ自体とそのデザイン手段を一元的に提供するものといえる、のではないでしょうか。
このフレームワークを介することで、データへのアクセスやコントロールの手段が抽象化されるため、デバイスと分析基盤やアプリケーションの相互の運用性が高まる、のだと思います。
EdgeX Foundry のアーキテクチャ
で、実装面をもう少し調べていくわけですが、公式のドキュメント がけっこう充実しているので、これを紐解くのがよさそうです。
見ていくと、EdgeX Foundry が多数のマイクロサービスの集合体として実装されていることがわかります。 以下、アーキテクチャの画像を引用します。
データフローにかかわる部分だと、全体で大きく 4 つのレイヤで構成されています。レイヤごとに役割をざっくり押さえておくとよさそうです。
触ってみた感触も踏まえて、大まかにぼくなりの書き方をすると、実デバイスに近い(サウスサイド)側から、
- デバイスサービス層
- 実デバイスからデータを受け取って、コアサービス層に送る
- コアサービス層から命令を受け取って、実デバイスを操作する
- コアサービス層
- デバイスサービス層からのデータを蓄積する
- サポートサービス層(のルールエンジン)から命令を受け取って、デバイスサービス層にコマンドを発行する
- エクスポートサービス層にデータを送る
- EdgeX Foundry 内のサービス群やオブジェクトのメタデータを管理する
- サポートサービス層
- いわゆる分析機能(今のところは簡単なルールエンジンのみ)を提供する
- アラートやロギングの機能を提供する
- エクスポート済みのデータの削除を行う
- エクスポートサービス層
- EdgeX Foundry の外にデータを送出する
というところでしょうか。
実装は Go 言語が主のようです。動作させるためのハードウェア要件も厳しくなく、Raspberry Pi 上でも動かせるみたいですね。また、起動させるだけなら Docker Compose でさくっとできます。
家では、vSphere 上の Ubuntu 仮想マシン上に Docker Compose で動作させています。
EdgeX Foundry でできそうなこと
さて、で、つまり何ができるの、というところですが、ざっくり技術的な目線では、
- 様々なデバイスからの情報取得やそれらの操作が EdgeX Foundry に集約できる
- デバイスサービスが実デバイスに対するインタフェイスとして機能する
- デバイスごとの機種やプロトコルの差異をデバイスサービスが吸収するので、実デバイスの実装を意識しないで統一された手法(REST API や GUI)でデバイスにアクセスできる
- デバイスサービスはさまざまなプロトコル(REST、Modbus、MQTT、ZigBee、……)に対応しており、参考実装が GitHub にある
- SDK が提供され、比較的容易に自製できる
- デバイスサービスは製品への組み込みも視野に入っている
- ルールエンジンにより、イベントドリブンなデバイスの制御ロジックを EdgeX Foundry で完結する形で組み込める
- あるデバイスのセンサの値が閾値を越えたら別のデバイスのスイッチを入れる、など
- EdgeX Foundry 内の通信も REST API と ZeroMQ なので、他の分析基盤やアプリケーションとも連携させられそう
- 集約したデータは外部へ送り出せる
- MQTT での発行や REST エンドポイントへの POST などができる
- いわゆるストア&フォワード、常時接続でない環境でいったん自分の中に貯めておいて接続できたらまとめて送る、ができる模様
- マイクロサービス化されており、フォグコンピューティング的な階層化やサービス単位での機能追加、入れ替えにも柔軟に対応できる
- どこに何をおいてもよい
- エッジに全部おいてもいいし、クラウドに全部おいてもいい
- 例えば、デバイスサービスは Raspberry Pi、コアサービスは普通のサーバに置いて、分析系はつよいマシンに置くとか
- エコシステムが成熟するとアドオンできるサービスも増えそうだ
などは挙げられそうです。
関連しそうなプロジェクト
EdgeX Foundry は OSS ですが、これを商用製品としたのが IOTech の Edge Xpert だそうです。
このドキュメントは追い切れていませんが、少なくともデバイスサービスとエクスポートサービスのバリエーションは、OSS 版に加えてバンドルされたテンプレートがたくさんありそうでした。便利そうです。
また、IOTech は組み込み系などリソースや時間の制約に厳しい環境のための軽量・高速版ともいえる Edge XRT も発表しています。
ほか、競合する製品というと、そもそも知っている範囲が狭いのですが、オープンソース系だと KubeEdge、パブリッククラウド系だと Google Cloud IoT や Azure IoT Edge、AWS IoT Greengrass あたりになるでしょうか。
とはいえ、パブリッククラウド系の IoT サービスだと、どうしても中心はクラウド側で、最終的にはクラウドありきになってくるので、言い方が『クラウドで行う処理をエッジにオフロードする』というニュアンスになってきますね。トップダウン的な。
EdgeX Foundry は、その文脈でいうとボトムアップ的なアプローチっぽさがあります。この見方では、クラウドは必ずしも登場はしません。
動かしてみる
冒頭で書いたとおり、最新リリースの Fuji がいま家で動いています。
せっかくなので、導入部分、デバイスから値を貯める部分、デバイスを動かす部分、エクスポートする部分、ルールエンジンを使う部分、あたりに分けて、今後エントリを書いてみようかという気持ちでいます。先走ってタイトルに (1) って付けてしまった……。
いろいろリンク
- https://www.edgexfoundry.org/
- 本家
- https://docs.edgexfoundry.org/
- 本家のドキュメント
- https://github.com/edgexfoundry
- 本家の GitHub
- https://www.iotechsys.com/cmsfiles/iotech_systems/docs/edgexpert/index.html
- 商用版の Edge Xpert のドキュメント
- 本家ドキュメントにないことも書いてあることがあり、両方読むと理解が深まる
EdgeX Foundry 関連エントリ
- 冬休みの自由研究: EdgeX Foundry (1) 概要
- 冬休みの自由研究: EdgeX Foundry (2) 導入とデータの確認
- 冬休みの自由研究: EdgeX Foundry (3) エクスポートサービスによるエクスポート
- 冬休みの自由研究: EdgeX Foundry (4) MQTT デバイスサービスの追加
- 冬休みの自由研究: EdgeX Foundry (5) ルールエンジンによる自動制御
- 冬休みの自由研究: EdgeX Foundry (6) アプリケーションサービスによるエクスポート
- 冬休みの自由研究: EdgeX Foundry (7) Kubernetes 上で Fuji リリースを動かす
- EdgeX Foundry ハンズオンラボガイド公開
- EdgeX Foundry: Geneva から Hanoi へ