Save 37% off PRO during our Black Friday Sale! »

クラウド・エッジ・デバイスを統合するアプリケーション実行環境のための分散型通信ミドルウェアに関する検討

 クラウド・エッジ・デバイスを統合するアプリケーション実行環境のための分散型通信ミドルウェアに関する検討

クラウドを利用するIoTサービスが一般的になってきている。しかし既存のアーキテクチャは、現場に複数のIoTデバイスが存在するときにもそれらはクラウドを介してしか通信することはできないなど、システム構成や機能配備が固定的である。Fogコンピューティング、エッジコンピューティングと言われる、面的な広がりを持つ次世代のIoTコンピューティング環境が求められる。IoTデバイス間の連携や、データ処理タスクの柔軟な配備などを実現するために、IoTデバイス、エッジノード、クラウドノード間でシームレス(に近いかたち)で接続・通信が可能なアプリケーション実行環境が必要である。筆者らは、分散性とスケーラビリティ性能に優れた関数型言語Elixirに注目しており、Elixir言語環境にクラウド・エッジ・デバイス間のシームレス接続・通信環境を構築する検討を進めている。本発表では、Elixir環境向け分散型通信ミドルウェアの1構成要素となる、DDS(Data Distribution Service)によるIoTデバイス・エッジノード間接続方式について紹介する。
(本資料は、ITRC Meet50 RICCセッションでの発表資料です。)

Fccb5974b63d64636a7c90faf3bab51f?s=128

KIKUCHI Shunsuke

November 24, 2021
Tweet

Transcript

  1. クラウド・エッジ・デバイスを統合する アプリケーション実⾏環境のための 分散型通信ミドルウェアに関する検討 ITRC Meet50 RICC分科会セッション 2021/11/24 (C) Copyright 1996-2021

    SAKURA Internet Inc さくらインターネット研究所 上級研究員 菊地俊介 さくらインターネット株式会社
  2. 話者紹介 2 菊地 俊介 (東京都出⾝) 所属 さくらインターネット研究所 学歴 早稲⽥⼤学⼤学院 理⼯学研究科

    電⼦・情報通信学専攻 修⼠課程修了 早稲⽥⼤学⼤学院 国際情報通信研究科 博⼠課程単位取得退学 職歴 富⼠通(株)富⼠通研究所に就職 ネットの研究やったり、SEやったり、NICTに出向したり、 トイレIoT作ったり さくらインターネットに転職 データ流通(FIWARE, NGSI)、OpenFogコンソーシアム(標準化)、 量⼦(アニーリング)コンピュータ、 AR/VR、モビリティ、RISC-V 専⾨ エッジ・Fogコンピューティング(分散系システムのあたり) ビジョナリーとして技術・社会、会社の将来を思い描く 趣味 新技術調査、読書、最近はガンプラ作り @kikuzokikuzo https://note.mu/kikuzokikuzo https://www.facebook.com /kikuzokikuzo
  3. はじめに • さくらインターネット研究所では、超個体性を持ったコンピュータ ネットワークインフラストラクチャ(=超個体型データセンター)の 実現を⽬指し研究を進めている。 • クラウドとエンドという線での接続だけでなく、エッジ、更にそれらの⾯で の広がり • クラウド・エッジに加えエンドデバイスも包含して扱うことのできるシステ

    ム・アーキテクチャ の実現を⽬指す。 • クラウドとエッジ・エンドを統合し、⾯的に扱えるアプリケーション 実⾏環境として、Elixir/Nerves環境を検討中。 • Elixir/Nervesで分散型通信ミドルウェアを構築する。 • 本資料の構成 • めざすべきコンピュータネットワークインフラストラクチャ環境 • 分散型通信ミドルウェア • DDSとElixir/Nerves 3
  4. さくら(研究所)で想定するコンピュータネットワークインフラストラクチャのかたち 4 ˜4",63"JOUFSOFU*OD ͘͞ΒΠϯλʔωοτݚڀॴ ೥Ϗδϣϯʢʣ     

           Π ϯ ϑ ϥ α ồ Ϗ ε ج ૅ ٕ ज़ ػցֶशద༻ ηΩϡϦςΟ "373 "3. ( ৽ετϨʔδ ෼ࢄిݯ 3*4$7 5 -PDBM( ਫྫྷ Ծ૝ԽɾࣗಈԽద༻ ͋ΒΏΔ৔ॴ΍ࣾձʹ༹͚ࠐΜͩίϯϐϡʔςΟϯάϦιʔεʹΑΔڠௐɾڠಉ %9 ηϯλʔϨεɾ ෼ࢄγεςϜ ूதɾ෼ࢄͷ ϋΠϒϦου .&$Τοδ ΦϯϓϨ࠶ຄڵ Ծ૝Խ ࣗಈԽ ػցֶश όΠΦΠϯϑΥϚςΟΫε ෼ࢄ୆ாʢϒϩοΫνΣʔϯʣ Τοδɾ'PHɾ෼ࢄγεςϜ ϩδεςΟΫε ϩϘςΟΫε ϓϩηεΠϯϑΥϚςΟΫε ྔࢠίϯϐϡʔλ 43& σʔλྲྀ௨ .BB49BB4 εϚʔτγςΟ %ϓϦϯτʢଟ඼छগྔੜ࢈ʣ *P5$14 σʔληϯλʔτϨϯυ ( தن໛σʔληϯλʔ ʢ֤੓ྩࢦఆ౎ࢢ΁ʣ %/"ɾ༗ػίϯϐϡʔλετϨʔδ )1$ Ϋϥ΢υɾΤοδɾ ֊૚ܕΞʔΩ ௒ݸମͷྖҬ΁ 'PHɾ෼ࢄܕ ΞʔΩ ϨΠϠϨε ෼ࢄΞʔΩ ࣗಈߏ੒ɾ ࣗಈো֐ݕग़ɾ෮چ ࣗ཯ಈ࡞ ࣗಈػೳ௥ՃɾਐԽ ӡ༻؅ཧτϨϯυ γεςϜΞʔΩτϨϯυ
  5. 【参考】エッジコンピューティングの概要 ※ Z. Zhou et al.: Edge Intelligence: Paving the

    Last Mile of Artificial Intelligence With Edge computing, Proceedings of the IEEE, Vol. 107, 1738 2019. 5 エッジコンピューティングも様々なタイプがあり、求められる要件や適合するシステム構成も様々。 センサ収容、スモー ルエッジタイプ エッジAIタイプ ⾃動⾞(V2X) タイプ Micro-DataCenterタイプ(ビッグエッジ)
  6. 現在のIoT/エッジ環境 スマートホーム • 現状では、エッジ環境内での装置間直接連携はしない • 装置とクラウド上のサービスがつながる • クラウド上のサービスとサービスがつながる • 制御はすべてクラウドから

    • 同⼀エッジ環境内にある装置間であっても連携はクラウドで • 装置ベンダーのサービスにがっちり紐付け 6 エンドデバイス エッジ環境 サービス クラウドノード クラウド
  7. 現在の(少し先の)IoT/エッジ環境 ロボット • ⾃律的に動く(働く)ノード • 設定は直接接続あるいはリモートから • 現場で様々な機器と連携して動作したい/させたい 7 エンドデバイス

    エッジ環境 管理システム 管理端末 クラウドノード Robot 管理システム Robot
  8. ⽬指すべきシステム構成 • エンド-クラウドでもなく、分散システムでもない、 エンド・エッジ・クラウドの3要素からなるシステム • ⾯的に広がりを持ったシステム 8 現場 (エンドデバイス) クラウドでの

    サービス 管理サービス エッジノード 当⾯のフォーカス領域 (デバイス・エッジ間接続) クラウド
  9. Elixir / Nerves とは • ElixirはErlangをベースにした関数型、アクターモデル採⽤⾔語 • 分散性・スケーラビリティ性能に優れる • アクターモデルは、データをメッセージにしネットワーク上に投げる。結果DB依存度合いを下げる。

    • NervesはIoT向け統合開発環境 • Nerves-Hubはデプロイ・端末管理環境 • OTAアップデート機能あり • ⾔語仕様に組み込みの、管理機能(親⼦プロセス監視、ログ送信等) 9 VM Hardware App OS Hardware エンドデバイス クラウド Hypervisor OS Mgr. Nerves-Hub Linux OS(汎⽤) Elixirプロセス OS Linux OS BEAM App BEAM Erlang仮想マシン BEAM Nervesでは1パッケージ化して扱う 凡例
  10. Elixir / Nerves とは • Elixir/Nervesをエッジ内環境に拡張適⽤したい • エンド・エッジデバイス間通信 • クラウドからの通信制御

    10 VM Hardware Hardware App OS Hardware エンドデバイス エッジノード クラウド Hypervisor OS OS Mgr. Nerves-Hub BEAM App App BEAM BEAM Hardware App OS BEAM エンドデバイス (将来的には、MEC(Local-5G)、マルチクラウド(分散)環境に拡張していく)
  11. 問題点︓エッジ領域内での折返し通信の実現 11 エッジ内折返しで連携(データ通信)できるか︖ • 素のElixirでは、通信はできるが相⼿ノードアドレスの明⽰的な設定が必要。 • Wi-Fi(=DHCP)環境ではアドレス指定が困難→デバイスディスカバリ機能が必要 • →DDS(Data Distribution

    Service)の導⼊を検討 • DDSは、トピック指定のみで、通信先ノードアドレスを指定しなくても通信が可能 Hardware Hardware App エンドデバイス エッジノード OS (Buildroot) OS (Buildroot) BEAM App BEAM Hardware App OS (Buildroot) BEAM エンドデバイス Hardware Hardware App エンドデバイス エッジノード OS (Buildroot) OS (Buildroot) BEAM App BEAM Hardware App OS (Buildroot) BEAM エンドデバイス DDS 明⽰的な指定が 必要
  12. 提案⽅式 • Elixir / NervesにCyclone DDSを組み込む • Elixirには外部ライブラリ呼び出し機能 Nif :

    Native Implemented Functions がある。 • Cyclone DDS : EclipseプロジェクトによるDDSの実装の⼀ つ。シェアを伸ばしている。ROS2の次期通信ミドルウェア として採⽤が決定。 • https://github.com/eclipse-cyclonedds/cyclonedds • https://projects.eclipse.org/projects/iot.cyclonedds 12
  13. CycloneDDS NIF実装 • CycloneDDSをNIF経由でElixir(Erlang)から呼び出す 13 CycloneDDS ddstest (NIF) App VM

    Linux Kernel iEX (Elixir Shell) ERTS (Erlang Run-Time System) vagrant@ubuntu-bionic:~$ sudo apt-get install bison vagrant@ubuntu-bionic:~$ sudo apt-get install cmake vagrant@ubuntu-bionic:~$ git clone https://github.com/eclipse- cyclonedds/cyclonedds.git vagrant@ubuntu-bionic:~$ cd cyclonedds/ vagrant@ubuntu-bionic:~/cyclonedds$ mkdir build vagrant@ubuntu-bionic:~/cyclonedds$ cd build/ vagrant@ubuntu-bionic:~/cyclonedds/build$ cmake - DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_EXAMPLES=ON .. vagrant@ubuntu-bionic:~/cyclonedds/build$ cmake --build . vagrant@ubuntu-bionic:~/cyclonedds/build$ sudo cmake --build . --target install vagrant@ubuntu-bionic:~/cyclonedds/build$ vagrant@ubuntu-focal:~/ddstest$ ls Makefile README.md _build deps lib mix.exs mix.lock src test vagrant@ubuntu-focal:~/ddstest$ iex -S mix Erlang/OTP 24 [erts-12.0.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit] gcc -c -I/usr/lib/erlang/usr/include -O2 -Wall -Wextra -Wno-unused-parameter -pedantic -fPIC -o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/ddstest_nif.o src/ddstest_nif.c gcc -c -I/usr/lib/erlang/usr/include -O2 -Wall -Wextra -Wno-unused-parameter -pedantic -fPIC -o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/HelloWorldData.o src/HelloWorldData.c gcc -o /home/vagrant/ddstest/_build/dev/lib/ddstest/priv/ddstest_nif.so -L/usr/lib/erlang/usr/lib -fPIC -shared /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/ddstest_nif.o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/HelloWorldData.o - L/usr/local/lib -lddsc Interactive Elixir (1.12.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> CycloneDDSのインストール ddstest(NIFコード)のインストール
  14. 通信テスト • 2つのノード間で通信が可能 • 相⼿先IPアドレスを指定せず通信できることを確認 14 vagrant@ubuntu-focal:~/ddstest$ iex -S mix

    Erlang/OTP 24 [erts-12.0.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async- threads:1] [jit] gcc -c -I/usr/lib/erlang/usr/include -O2 -Wall -Wextra -Wno-unused- parameter -pedantic -fPIC -o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/ddstest_nif.o src/ddstest_nif.c gcc -c -I/usr/lib/erlang/usr/include -O2 -Wall -Wextra -Wno-unused- parameter -pedantic -fPIC -o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/HelloWorldData.o src/HelloWorldData.c gcc -o /home/vagrant/ddstest/_build/dev/lib/ddstest/priv/ddstest_nif.so -L/usr/lib/erlang/usr/lib -fPIC -shared /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/ddstest_nif.o /home/vagrant/ddstest/_build/dev/lib/ddstest/obj/HelloWorldData.o - L/usr/local/lib -lddsc Interactive Elixir (1.12.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> Ddstest Ddstest iex(2)> Ddstest.create_publisher Waiting for dds publication match... 0 iex(3)> Ddstest.sendmsg('hoge') 'hoge' iex(4)> vagrant@ubuntu-focal:~/ddstest$ iex -S mix Erlang/OTP 24 [erts-12.0.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async- threads:1] [jit] make: Nothing to be done for 'all'. Interactive Elixir (1.12.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> Ddstest Ddstest iex(2)> Ddstest.create_subscriber === [Subscriber] Waiting for a sample... === [Subscriber] Received : hoge 0 iex(3)> Publisher側 Subscriber側
  15. 性能評価に向けて • 現状のElixirへのCyclone DDS組み込み実装(下記の右図)は、単純なデュ アルスタック構成であり、Elixirの良さを活かせていない可能性が⾼い • Elixirの良さ=プログラムの書きやすさ(流儀)、並列動作性能など • DDSのメリット(デバイスディスカバリ)は活かせる •

    両者の性能差など評価していく予定 15 Hardware App Linux Kernel iEX (Elixir Shell) BEAM ERTS Hardware App Linux Kernel iEX (Elixir Shell) ERTS シームレスなプログラミングの実現 Hardware App Linux Kernel iEX (Elixir Shell) ERTS pub/sub DDSの流儀で、 他のノードと通信 できる(ROS2 ノード含む) 現状のCycloneDDSを 組み込んだ実装 Elixirでのノード間通信 CycloneDDS ddstest
  16. おまけ︓さくらで作りたい構成 • Elixir/Nerves⽤クラウド環境 • エンド・エッジデバイスに向けてFirmware導⼊、状態監視、 ログ閲覧、リモートログインができるように • サーバサイドサービス(Phoenixアプリ)も実⾏できる 16 VM

    Hardware Hardware App OS Hardware エッジノード クラウド (x86) Hypervisor OS OS Mgr. NervesHub (⾃前) BEAM App App BEAM OTAアップデート BEAM SSHd SSH リモートトンネル Hardware App エンドデバイス OS BEAM
  17. まとめ • 超個体型データセンターとして、⾯的に広がる、クラウド・ エッジ・エンドデバイス統合環境を考えている • ビッグエッジ(MECなど)は通信事業者などと協業しつつ実現 を⽬指す • スモールエッジ(スマートホーム/IoT)にフォーカス •

    Elixir/Nerves環境に注⽬ • エッジ内での折返し通信に課題があるため、その解消のために DDS(Data Distribution Service)を導⼊ • Elixir/Nerves + CycloneDDSの実装を作成 • 今後評価を進める • クラウド・エッジ・エンドデバイス統合環境の構築に向けた研 究もすすめる 17