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

2023年にクル(かもしれない)通信ミドルウェア技術(仮)

 2023年にクル(かもしれない)通信ミドルウェア技術(仮)

【オンライン】新年LT会「私の愛するIoT 2023」兼 STM32+mROS 2 作品発表会 で使用した資料です。
https://algyan.connpass.com/event/268971/

Shintaro Hosoai

January 28, 2023
Tweet

More Decks by Shintaro Hosoai

Other Decks in Programming

Transcript

  1. 2023年にクル(かもしれない)!?
    通信ミドルウェア技術
    細合 晋太郎(東京大学)
    Zenoh
    Algyan 新年LT会「私の愛するIoT 2023」
    https://zenoh.io/

    View Slide

  2. 自己紹介
     細合 晋太郎 (ほそあい しんたろう)
     Twitter : @ShintaroHosoai
     github : s-hosoai
     アカデミアとエンジニアの間を行ったり来たりしてます
     現在は東大で某高瀬先生と悪巧みしてます
     専門は、ソフトウェア工学(特にモデリング界隈)と組込みシステム(こちらはほぼ趣味)
     器用貧乏上等!ってことで、手広くあれこれやってますので、面白いネタがあったら振ってくださいませ
     趣味でダイビングはじめました。いい海知ってたら教えてください。

    View Slide

  3. Zenohってなんなん?
    🔥パブ!サブ!+α
    🔥じゅうなんな!ネットワーク!
    🔥マルチらんぐぇっじ!
    🔥マルチぷらっとふぉーむ!
    🔥ハイ!パフォーマンス!

    View Slide

  4. Zenohってなんなん?
     The Eclipse Zenoh: Zero Overhead Pub/sub, Store/Query and Compute.
     Zetta Scale社の通信ミドルウェア。現在はEclipse Foundation下のOSSとして公開されている。
     Zetta Scale社はROSの通信ミドルウェア仕様のDDSの実装の一つの開発にも関わっていた模様(Cyclone
    DDS)。低レイヤの通信ミドルウェアはお手の物。
     Zenohは当初Ocamlで実装されていたものをRustに移植(2020/10-)。バリバリの関数型で整えた設計を
    再構成しただけあり、かなり堅実な実装となっている。
     Github : https://github.com/eclipse-zenoh/zenoh
     Web : https://zenoh.io

    View Slide

  5. Publisher-Subscriber 通信
     Publisher – Subscriber 通信は、特定のトピックをSubscribe(購読)しているノードに対して、
    特定のトピック宛てにPublish(配信)したメッセージが届く形式
    パブ
    サブ1 サブ2 サブ3
    topicA
    を購読するやで
    topicBを~ topicAを~
    topicA 宛てにメッ
    セージを送るっす
    topicAを購読している、サブ1,3のどちらにも
    同じメッセージが届く
    Pub Sub
    Pub/Subを兼任できるし、
    複数のTopicの購読・
    配信も可能

    View Slide

  6. 通信方式 Pub / Sub。だけじゃない!
     Pub / Sub (Push) :購読しているTopicのメッセージが届くと、コールバック関数が呼ばれる方式
     Pub / Sub (Pull):Sub時に一時保管され、任意のタイミングで読み出す方式
     Pub / Store / Get:上記Pullの一時保管場所がRouter上になったもの
     Get / Reply:特定のTopicの配信元に配信を促す方式。RPCのように使える模様
    Peer Peer
    Peer Peer
    Peer Peer
    Peer Peer
    Pub
    sub(callback)
    sub(Pull)
    Pub
    Pub
    Get
    Reply
    Pull

    View Slide

  7. 柔軟なネットワーク構造
    Peer
    Peer Peer
    Peer
    Router
    Peer
    Peer
    Peer client
    client
    Peer
    Peer
    Router
    client
    client
    Router
    Peer to peer
    Clique Mesh
    Brokered Routed
    Router Router Router
    Router
    client
    client
    Router
    client
    client
    Peer Router
    client 機能は同じ要素っぽい。
    メッセージの送受をする
    中継のみ
    NAT内ならBroker不要
    Brokerを介せばNAT超えれる
    複数のRouterを登録しておいて、切り替えたりできる

    View Slide

  8. 通信レイヤ、対応言語
     ZenohはRust実装で、Rust, Python, Cのクライア
    ントライブラリあり
     各ネットワークレイヤが綺麗に抽象化されており、様々
    なネットワークレイヤの上で動作可能
     https://zenoh.io/blog/2022-08-12-zenoh-
    serial/
    QUIC, TLS, TCP,
    UDP Unicast,
    UDP Multicast
    IPc4, IPv6
    6LoWPAN
    WiFi, Ethernet,
    Thread, Bluetooth, Serial

    View Slide

  9. 相互運用性・拡張性
    組込み
    DB
    (Storeの裏における) 他ライブラリとの相互接続
    Web

    View Slide

  10. MQTT(*MQ系)じゃダメなの?
     好きなん選んだらええんやで
     ZenohはMQTTに比べると、
     同一NAT内ではブローカー不要にできるし、NAT越しでも他方のIPが分かればP2Pも可。ブローカーありも可
     Pub/Sub以外にもStore系が使える
     若干性能がいい
     一方で
     MQTTに比べると若干導入が難しい?ところもある
     まだ絶賛開発中でバージョン間で互換を保たない変更が良く入る
     標準のプロトコルがMQTTベース(確かAWS IoTにはMQTTで繋げたはず)のところもあるので、そこに繋ぐにはBridge
    が必要になる。

    View Slide

  11. High!Performance!
     8byteのペイロードで4.2M msg/s
     1MBペイロードで51GB/s
     無負荷時、最小15 μsecのレイテンシ
     パケットのオーバーヘッドは5 byte
    (状況によってはもうちょっと増える)
     https://zenoh.io/blog/
    2022-09-30-zenoh-bahamut/
     https://zenoh.io/blog/
    2021-07-05-zenoh-overhead/

    View Slide

  12. Zenoh Client Library:examples (Rust)
    Publisher
    Subscriber
    builder pattern Future Some
    セッション作成
    Publish
    セッション終了
    セッション作成
    Subscriber作成
    非同期でメッセージ待ち

    View Slide

  13. 組込みでも動くよ!Zenoh-pico!
     Cで再実装した組込みボード向け軽量Zenoh。もちろんPC向けのZenohとも通信できる。
     かなりええ感じの性能が出ているらしい
    2.2.1. Zephyr
    Note: tested with reel_board, nucleo-f767zi, nucleo-f420zi,
    and nRF52840 boards.
    2.2.2. Arduino
    Note: tested with az-delivery-devkit-v4 ESP32 board
    2.2.3. ESP-IDF
    Note: tested with az-delivery-devkit-v4 ESP32 board
    2.2.4. MbedOS
    Note: tested with nucleo-f747zi and nucleo-f429zi boards
    2.2.5. OpenCR
    Note: tested with ROBOTIS OpenCR 1.0 board
    https://github.com/eclipse-zenoh/zenoh-pico

    View Slide

  14. DEMO
    WSLだとNAT超えれんやん、PicoでRouterに繋ぐ方法分からんやん、WinでDocker使ったらポート被ってTeams落ち
    るやん・・、なんかよく分からんけど繋がらんやん・・
    ・・・・間に合いませんでした。。
    なんか動いてるっぽいZenoh本家のデモをご覧ください
    https://zenoh.io/blog/2022-02-08-dragonbot/

    View Slide

  15. おわりに
     Zenohは、
     主要な通信メソッド(Pub/Sub, Get, Store, Query)が揃ってる
     ネットワーク形態も自由自在
     言語対応も多く、多様な通信層にも対応
     相互運用性に優れ、多様なプロトコルに対応、組込みボードにも載せられる。
     通信性能も高い
    と、かなりつおいです。
     一方、
     ROSのようなツールやライブラリは揃ってなさそうです。他と繋いで真価を発揮するタイプです
     まだ絶賛開発中なのでしょっちゅう互換性を崩す変更が入ります
     いろんなところで使える、なんかええ感じの通信ミドルウェアないかなーって時に、
    ぜひ候補に覚えておいてくださいませ

    View Slide