Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

KIKUCHI Shunsuke

November 24, 2021
Tweet

More Decks by KIKUCHI Shunsuke

Other Decks in Research

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. さくら(研究所)で想定するコンピュータネットワークインフラストラクチャのかたち
    4
    ˜4",63"JOUFSOFU*OD
    ͘͞ΒΠϯλʔωοτݚڀॴ ೥Ϗδϣϯʢʣ


    Π
    ϯ
    ϑ
    ϥ
    α

    Ϗ
    ε
    ج

    ٕ

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

    View full-size slide

  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タイプ(ビッグエッジ)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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
    明⽰的な指定が
    必要

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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側

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide