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

ドメイン内直接通信を実現するElixir/NervesのDDS実装 - BDDS

ドメイン内直接通信を実現するElixir/NervesのDDS実装 - BDDS

本資料は、ITRC RICC-PIoT workshop 2022での発表資料です。

さくらインターネット研究所(菊地)は他大学等と共同でNICTのBeyond 5Gシーズ創出型プログラムの研究委託「関数型パラダイムで実現するB5G時代の資源透過型広域分散コンピューティング環境」を共同で受託し、関数型言語のElixirをベースにしたエッジ・Fog型のコンピューティング環境実現に向けた研究開発を実施している。

本検討では、クラウドとエッジ・エンドを統合し、Fog的に(=面的に)扱えるアプリケーション実行環境を構築することを目指し検討を進めている。ここでは、Elixir/NervesにDDS(Data Distribution Service)を組み込み、分散通信ミドルウェアとして成立させる実装をしたので紹介する。

なお、本研究成果の一部は、国立研究開発法人情報通信研究 機構の委託研究(04001)により得られたものです。

KIKUCHI Shunsuke

March 01, 2022
Tweet

More Decks by KIKUCHI Shunsuke

Other Decks in Research

Transcript

  1. ドメイン内直接通信を実現する
    Elixir/NervesのDDS実装 - BDDS
    ITRC RICC-PIoT workshop 2022
    2022/03/01
    (C) Copyright 1996-2022 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. はじめに
    • さくらインターネット研究所(菊地)は、東京大学 高瀬先生、高知工科
    大学 菊池先生、大阪大学 中川先生、シティネット(高知)西内さん、大
    崎さん、NII 柏崎先生と、NICTのBeyond 5Gシーズ創出型プログラムの
    研究委託「関数型パラダイムで実現するB5G時代の資源透過型広域分散コ
    ンピューティング環境」を共同で受託し、関数型言語のElixirをベースに
    したエッジ・Fog型のコンピューティング環境実現に向けた研究開発を実
    施している。
    3
    • クラウドとエッジ・エンドを統合し、Fog的に(=面的に)扱えるアプ
    リケーション実行環境を構築する。実装にはElixir言語環境を用いる。
    • Elixir/NervesにDDS(Data Distribution Service)を組み込み、分散
    通信ミドルウェアとして成立させる。
    • 本資料の構成
    • 「関数型パラダイムで実現するB5G時代の資源透過型広域分散コンピュー
    ティング環境」受託内容と、そこでの通信ミドルウェア層のねらい
    • DDSとElixir/Nerves
    • BDDS - Bindings for DDS (Elixir/Nerves向けCyclone DDS組み込み実装)
    のご紹介

    View full-size slide

  4. 関数型パラダイムで実現するB5G時代の資源透過型広域分散コンピューティング環境
    (検討初期の)想定システムアーキテクチャ
    • クラウド・MEC・エッジ・現場デバイスにシームレスな分散プラット
    フォーム
    • アプリケーションの分散実行(タスク配分アルゴリズム)
    • 実証アプリ
    4
    :最適配分アルゴリズム
    :IoTノードの計算資源
    :資源透過型の分散処理プラットフォーム

    :IoTノードの能率的な実行環境

    :計算資源配分の決定手法

    :実証評価向けアプリケーション

    :透過型分散プラットフォーム
    :BEAM(Elixir処理系)
    MEC
    BEAM
    クラウド
    BEAM
    エッジ
    BEAM
    最適配分アルゴリズム
    透過型分散プラットフォーム
    BEAM
    システム開発者
    デプロイされる
    コード






    評価アプリ

    評価アプリ



    評価アプリ




    評価アプリ





    View full-size slide

  5. 目指すべきシステム構成(ネットワーク構成の観点から)
    • エンドデバイス、exMEC(自営エッジ環境+狭義MEC環
    境)、クラウド、の全てでElixirが動作し相互に通信可能
    なシステムを構築する。
    5
    MEC
    当面のフォーカス領域(デバイス・エッジ間接続)
    exMEC クラウド
    エンドデバイス
    local5G
    SOHOなどのLAN
    工場・拠点などのLAN
    (検討中)
    イントラネット /
    グローバル接続 グローバル接続
    その他のネットワーク(テストベッドなど)

    View full-size slide

  6. Elixir / Nerves でのデバイス・エッジ間接続
    • Elixir/Nervesをデバイス・エッジ間に分散適用する
    • エンドデバイス間通信の実現
    • クラウド(エッジの代替)との通信の実現
    6
    VM
    Hardware
    Hardware
    App
    OS
    Hardware
    エンドデバイス エンドデバイス
    (拠点内ハブ)
    クラウド
    (エッジ代替)
    Hypervisor
    OS OS
    BEAM
    App App
    BEAM
    BEAM
    Hardware
    App
    OS
    BEAM
    エンドデバイス

    View full-size slide

  7. エンドデバイス間での折返し通信における課題
    7
    エンドデバイス間折返しで通信できるか?
    • 素の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

  8. Elixir / NervesにCyclone DDSを組み込む
    • Elixir / NervesにCyclone DDSを組み込む:BDDS
    • Elixirには外部ライブラリ呼び出し機能 Nif : Native
    Implemented Functions がある。
    • DDS : Pub/Sub型通信ミドルウェア。
    • Cyclone DDS : EclipseプロジェクトによるDDSの実装の一
    つ。シェアを伸ばしている。ROS2の次期通信ミドルウェア
    として採用が決定。
    • https://github.com/eclipse-cyclonedds/cyclonedds
    • https://projects.eclipse.org/projects/iot.cyclonedds
    • Bindings for DDS : CycloneDDSを呼び出すElixirのNif実装
    • Cyclone DDSを下位モジュールとして自動で組み込み、かつNifを利
    用して呼び出せるようにしたパッケージ
    • (現状コンセプト実証モデルで、フル機能は未実装)
    • https://github.com/b5g-ex/bdds
    8

    View full-size slide

  9. BDDS : CycloneDDS NIF実装のプロトコルスタック構成とインストール
    • CycloneDDSをNIF経由でElixir(Erlang)から呼び出すことができる
    9
    CycloneDDS
    BDDS
    App
    VM
    Linux Kernel
    iEX (Elixir Shell)
    ERTS
    (Erlang Run-Time System)
    vagrant@ubuntu-bionic:~$ sudo apt-get install bison
    vagrant@ubuntu-bionic:~$ git clone https://github.com/eclipse-
    cyclonedds/cyclonedds.git
    vagrant@ubuntu-bionic:~$ cd cyclonedds
    vagrant@ubuntu-bionic:~/cyclonedds$ cd build
    vagrant@ubuntu-bionic:~/cyclonedds/build$ cmake -
    DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_EXAMPLE=ON ..
    vagrant@ubuntu-bionic:~/cyclonedds$ sudo cmake --build . --target install
    CycloneDDSのインストール
    vagrant@ubuntu-bionic:~$ mix nerves.new bddstest
    vagrant@ubuntu-bionic:~$ export MIX_TARGET=rpi4
    vagrant@ubuntu-bionic:~$ cd bddstest
    vagrant@ubuntu-bionic:~/bddstest$ vi mix.exs
    vagrant@ubuntu-bionic:~/bddstest$ mix deps.get
    vagrant@ubuntu-bionic:~/bddstest$ mix firmware
    vagrant@ubuntu-bionic:~/bddstest$ mix firmware.burn
    BDDSのインストール(Nerves環境下での場合)

    View full-size slide

  10. 通信の様子(プロトタイプ環境でのもの)
    • ノード間で通信が可能
    • 相手先IPアドレスを指定せず通信できることを確認
    10
    vagrant@ubuntu-focal:~/ddstest$ iex -S mix
    Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-
    threads:1] [jit]
    Interactive Elixir (1.12.3) - press Ctrl+C to exit (type h() ENTER for help)
    iex(1)> Ddstest.load_nif
    :ok
    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.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-
    threads:1] [jit]
    Interactive Elixir (1.12.3) - press Ctrl+C to exit (type h() ENTER for help)
    iex(1)> Ddstest.load_nif
    :ok
    iex(2)> Ddstest.create_subscriber
    === [Subscriber] Waiting for a sample...
    === [Subscriber] Received : hoge
    0
    iex(3)>
    Publisher側 Subscriber側
    (現状、topic固定、メッセージ型もtextのみ、など制約あり。)

    View full-size slide

  11. Elixir + DDSで何がうれしいのか?
    11
    →拠点内でノードが増えたり減ったりしたときに、個々のノードの通
    信設定を変更しなくてよい
    • センサやアクチュエータが増えたりしたときに、そのつながりを手動管理しなくてよい
    • データ参照権限の管理をハブノードで実施する場合でも、ハブノードへの接続設定が不要
    Hardware
    Hardware
    App
    エンドデバイス
    エンドデバイス
    (拠点内ハブ)
    OS (Buildroot) OS (Buildroot)
    BEAM
    App
    BEAM
    Hardware
    App
    OS (Buildroot)
    BEAM
    エンドデバイス
    Hardware
    App
    OS (Buildroot)
    BEAM
    エンドデバイス
    VM
    OS
    クラウド
    Nerves
    -Hub
    既存ノードへの
    設定変更不要
    (OTA)
    (管理マネージャ)

    View full-size slide

  12. 要検討項目
    • 現状のElixirへのCyclone DDS組み込み実装(下記の右図)は、単純なデュ
    アルスタック構成であり、Elixirの良さを活かせていない可能性が高い
    • Elixirの良さ => Node.connectを用いる、プログラムの書きやすさ、並列動作性能
    など
    • DDSのメリット(デバイスディスカバリ)は活かせる
    • 両者の性能差など評価していく予定
    12
    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でのノード間通信
    (Node.connect)
    CycloneDDS
    bdds

    View full-size slide

  13. その次の目標
    • Elixir/Nervesをデバイス・エッジ間に分散適用する
    • エンドデバイス間通信の実現
    • クラウド(エッジの代替)との通信の実現
    13
    VM
    Hardware
    Hardware
    App
    OS
    Hardware
    エンドデバイス エンドデバイス
    (拠点内ハブ)
    クラウド
    (エッジ代替)
    Hypervisor
    OS OS
    BEAM
    App App
    BEAM
    BEAM
    Hardware
    App
    OS
    BEAM
    エンドデバイス
    エンドデバイス・
    エッジ間接続

    View full-size slide

  14. まとめ
    • クラウドとエッジ・エンドを統合し、Fog的に(=面的に)扱え
    るアプリケーション実行環境をElixirで構築する。
    • Elixir/NervesにDDS(Data Distribution Service)を利用した
    分散通信ミドルウェアとして成立させる。
    • 1st Stepとして、拠点内でのエンドデバイス間通信に注目
    • エンドデバイス間折返し通信にはアドレス発見の課題があるた
    め、その解消のためにDDS(Data Distribution Service)を導

    • Elixir/Nerves + CycloneDDSの実装を作成した
    • Node.connect通信と独立した関係になってしまっている
    • 今後評価を進める
    • エンドデバイス、エッジ間通信の実現に向けた検討もすすめる
    14

    View full-size slide

  15. 謝辞
    • 本研究成果の一部は、国立研究開発法人情報通信研究
    機構の委託研究(04001)により得られたものです。
    15

    View full-size slide

  16. 補足スライド
    • Elixir, Nerves環境構築手順
    16
    vagrant@ubuntu-bionic:~$ sudo apt install build-essential automake autoconf git squashfs-tools ssh-askpass pkg-
    config curl
    vagrant@ubuntu-bionic:~$ sudo apt install libssl-dev libncurses5-dev bc m4 unzip cmake python
    vagrant@ubuntu-bionic:~$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.0
    vagrant@ubuntu-bionic:~$ echo -e '¥n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
    vagrant@ubuntu-bionic:~$ echo -e '¥n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
    vagrant@ubuntu-bionic:~$ source ~/.bashrc
    vagrant@ubuntu-bionic:~$ asdf plugin-add erlang
    vagrant@ubuntu-bionic:~$ asdf plugin-add elixir
    vagrant@ubuntu-bionic:~$ asdf install erlang 24.1.5
    vagrant@ubuntu-bionic:~$ asdf install elixir 1.12.3-otp-24
    vagrant@ubuntu-bionic:~$ asdf global erlang 24.1.5
    vagrant@ubuntu-bionic:~$ asdf global elixir 1.12.3-otp-24
    vagrant@ubuntu-bionic:~$ mix local.hex
    vagrant@ubuntu-bionic:~$ mix local.rebar
    vagrant@ubuntu-bionic:~$ mix archive.install hex nerves_bootstrap

    View full-size slide