Slide 1

Slide 1 text

クラウド・エッジ・デバイスを統合する アプリケーション実⾏環境のための 分散型通信ミドルウェアに関する検討 ITRC Meet50 RICC分科会セッション 2021/11/24 (C) Copyright 1996-2021 SAKURA Internet Inc さくらインターネット研究所 上級研究員 菊地俊介 さくらインターネット株式会社

Slide 2

Slide 2 text

話者紹介 2 菊地 俊介 (東京都出⾝) 所属 さくらインターネット研究所 学歴 早稲⽥⼤学⼤学院 理⼯学研究科 電⼦・情報通信学専攻 修⼠課程修了 早稲⽥⼤学⼤学院 国際情報通信研究科 博⼠課程単位取得退学 職歴 富⼠通(株)富⼠通研究所に就職 ネットの研究やったり、SEやったり、NICTに出向したり、 トイレIoT作ったり さくらインターネットに転職 データ流通(FIWARE, NGSI)、OpenFogコンソーシアム(標準化)、 量⼦(アニーリング)コンピュータ、 AR/VR、モビリティ、RISC-V 専⾨ エッジ・Fogコンピューティング(分散系システムのあたり) ビジョナリーとして技術・社会、会社の将来を思い描く 趣味 新技術調査、読書、最近はガンプラ作り @kikuzokikuzo https://note.mu/kikuzokikuzo https://www.facebook.com /kikuzokikuzo

Slide 3

Slide 3 text

はじめに • さくらインターネット研究所では、超個体性を持ったコンピュータ ネットワークインフラストラクチャ(=超個体型データセンター)の 実現を⽬指し研究を進めている。 • クラウドとエンドという線での接続だけでなく、エッジ、更にそれらの⾯で の広がり • クラウド・エッジに加えエンドデバイスも包含して扱うことのできるシステ ム・アーキテクチャ の実現を⽬指す。 • クラウドとエッジ・エンドを統合し、⾯的に扱えるアプリケーション 実⾏環境として、Elixir/Nerves環境を検討中。 • Elixir/Nervesで分散型通信ミドルウェアを構築する。 • 本資料の構成 • めざすべきコンピュータネットワークインフラストラクチャ環境 • 分散型通信ミドルウェア • DDSとElixir/Nerves 3

Slide 4

Slide 4 text

さくら(研究所)で想定するコンピュータネットワークインフラストラクチャのかたち 4 ˜4",63"JOUFSOFU*OD ͘͞ΒΠϯλʔωοτݚڀॴ ೥Ϗδϣϯʢʣ Π ϯ ϑ ϥ α ồ Ϗ ε ج ૅ ٕ ज़ ػցֶशద༻ ηΩϡϦςΟ "373 "3. ( ৽ετϨʔδ ෼ࢄిݯ 3*4$7 5 -PDBM( ਫྫྷ Ծ૝ԽɾࣗಈԽద༻ ͋ΒΏΔ৔ॴ΍ࣾձʹ༹͚ࠐΜͩίϯϐϡʔςΟϯάϦιʔεʹΑΔڠௐɾڠಉ %9 ηϯλʔϨεɾ ෼ࢄγεςϜ ूதɾ෼ࢄͷ ϋΠϒϦου .&$Τοδ ΦϯϓϨ࠶ຄڵ Ծ૝Խ ࣗಈԽ ػցֶश όΠΦΠϯϑΥϚςΟΫε ෼ࢄ୆ாʢϒϩοΫνΣʔϯʣ Τοδɾ'PHɾ෼ࢄγεςϜ ϩδεςΟΫε ϩϘςΟΫε ϓϩηεΠϯϑΥϚςΟΫε ྔࢠίϯϐϡʔλ 43& σʔλྲྀ௨ .BB49BB4 εϚʔτγςΟ %ϓϦϯτʢଟ඼छগྔੜ࢈ʣ *P5$14 σʔληϯλʔτϨϯυ ( தن໛σʔληϯλʔ ʢ֤੓ྩࢦఆ౎ࢢ΁ʣ %/"ɾ༗ػίϯϐϡʔλετϨʔδ )1$ Ϋϥ΢υɾΤοδɾ ֊૚ܕΞʔΩ ௒ݸମͷྖҬ΁ 'PHɾ෼ࢄܕ ΞʔΩ ϨΠϠϨε ෼ࢄΞʔΩ ࣗಈߏ੒ɾ ࣗಈো֐ݕग़ɾ෮چ ࣗ཯ಈ࡞ ࣗಈػೳ௥ՃɾਐԽ ӡ༻؅ཧτϨϯυ γεςϜΞʔΩτϨϯυ

Slide 5

Slide 5 text

【参考】エッジコンピューティングの概要 ※ 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タイプ(ビッグエッジ)

Slide 6

Slide 6 text

現在のIoT/エッジ環境 スマートホーム • 現状では、エッジ環境内での装置間直接連携はしない • 装置とクラウド上のサービスがつながる • クラウド上のサービスとサービスがつながる • 制御はすべてクラウドから • 同⼀エッジ環境内にある装置間であっても連携はクラウドで • 装置ベンダーのサービスにがっちり紐付け 6 エンドデバイス エッジ環境 サービス クラウドノード クラウド

Slide 7

Slide 7 text

現在の(少し先の)IoT/エッジ環境 ロボット • ⾃律的に動く(働く)ノード • 設定は直接接続あるいはリモートから • 現場で様々な機器と連携して動作したい/させたい 7 エンドデバイス エッジ環境 管理システム 管理端末 クラウドノード Robot 管理システム Robot

Slide 8

Slide 8 text

⽬指すべきシステム構成 • エンド-クラウドでもなく、分散システムでもない、 エンド・エッジ・クラウドの3要素からなるシステム • ⾯的に広がりを持ったシステム 8 現場 (エンドデバイス) クラウドでの サービス 管理サービス エッジノード 当⾯のフォーカス領域 (デバイス・エッジ間接続) クラウド

Slide 9

Slide 9 text

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パッケージ化して扱う 凡例

Slide 10

Slide 10 text

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)、マルチクラウド(分散)環境に拡張していく)

Slide 11

Slide 11 text

問題点︓エッジ領域内での折返し通信の実現 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 明⽰的な指定が 必要

Slide 12

Slide 12 text

提案⽅式 • 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

Slide 13

Slide 13 text

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コード)のインストール

Slide 14

Slide 14 text

通信テスト • 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側

Slide 15

Slide 15 text

性能評価に向けて • 現状の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

Slide 16

Slide 16 text

おまけ︓さくらで作りたい構成 • 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

Slide 17

Slide 17 text

まとめ • 超個体型データセンターとして、⾯的に広がる、クラウド・ エッジ・エンドデバイス統合環境を考えている • ビッグエッジ(MECなど)は通信事業者などと協業しつつ実現 を⽬指す • スモールエッジ(スマートホーム/IoT)にフォーカス • Elixir/Nerves環境に注⽬ • エッジ内での折返し通信に課題があるため、その解消のために DDS(Data Distribution Service)を導⼊ • Elixir/Nerves + CycloneDDSの実装を作成 • 今後評価を進める • クラウド・エッジ・エンドデバイス統合環境の構築に向けた研 究もすすめる 17