覚書ブログ
覚えられないので書いておきます。
2024年5月19日日曜日
zenohについて調べてみる
Eclipse SDV Projectを調べていたら、 [zenoh](https://projects.eclipse.org/projects/iot.zenoh) というのが出てきた。 見てみるとROS界隈でも使われている軽量スタックだったので、調べて見ようと思いました。 # [zenoh](https://zenoh.io/)とは Zero Network Overhead Protocolからzenohと名付けているようです。 サイトを見るとZeroOverHead Network Protocolになっているため、あれ?って部分はありますが。 # 主な機能 機能としては * Pub/Sub * Storages * Queries and Queryables があります。 また、トポロジー構成は * Peer-to-Peer * Clique , Mesh トポロジを構築 * Brokered * zenoh routerで複数clientを接続 * Routed * routerを構築し、client間や別subnetを接続 が実現できるようです。参照:https://zenoh.io/docs/getting-started/deployment/ 非機能的な要素として * Scalable * Scalable Routing * Low Power Networks * Constrained Devices * Fast * Fast Adoption * Low Latency * High Throughput とあり、マイコンからクラウドまでサポートしているとのこと。 C言語で実装された[zenoh-pico](https://github.com/eclipse-zenoh/zenoh-pico)もあります。 # パフォーマンス 以下のブログでパフォーマンスについて言及されています。 https://zenoh.io/blog/2023-03-21-zenoh-vs-mqtt-kafka-dds/ MQTTよりも性能があることが示されています。 とはいえ、MQTTは低スペックや不安定なネットワーク向けだから同じ土俵に乗せるのもと思うが。 # 拡張性 プラグインを使う事により、様々なミドルウェアと接続することが可能になります。 * mqtt * dds * rocksdb * filesystem * influxdb * s3 * webserver * sql などがあり、自作で拡張することが可能です。 # 動作確認 簡単なpub/subの動作確認の手順です。 1. z_sub とz_pubをビルド ```bash $ git clone https://github.com/eclipse-zenoh/zenoh.git $ cd zenoh/examples $ cargo build --example z_sub $ cargo build --example z_pub ``` subscriberの実行 ```bash $ ../target/debug/examples/z_sub Opening session... Declaring Subscriber on 'demo/example/**'... Press CTRL-C to quit... >> [Subscriber] Received PUT ('demo/example/zenoh-rs-pub': '[ 1] Pub from Rust!') >> [Subscriber] Received PUT ('demo/example/zenoh-rs-pub': '[ 2] Pub from Rust!') >> [Subscriber] Received PUT ('demo/example/zenoh-rs-pub': '[ 3] Pub from Rust!') >> [Subscriber] Received PUT ('demo/example/zenoh-rs-pub': '[ 4] Pub from Rust!') ``` publisherの実行 ```bash $ ../target/debug/examples/z_pub Opening session... Declaring Publisher on 'demo/example/zenoh-rs-pub'... Press CTRL-C to quit... Putting Data ('demo/example/zenoh-rs-pub': '[ 0] Pub from Rust!')... Putting Data ('demo/example/zenoh-rs-pub': '[ 1] Pub from Rust!')... Putting Data ('demo/example/zenoh-rs-pub': '[ 2] Pub from Rust!')... Putting Data ('demo/example/zenoh-rs-pub': '[ 3] Pub from Rust!')... Putting Data ('demo/example/zenoh-rs-pub': '[ 4] Pub from Rust!')... ``` こんな感じで簡単に動かせます。 routerを使ったサンプルは別の投稿でかければと思います。 # 使ってみた感想 機能としては未知数なところもあるが、ROS2で使われている&色々拡張できるという面で 非常に期待しているミドルウェアではあります。 uProtocol というミドルウェアでも使われているということなので、そこでも調べてみようかと思います。 # 参考サイト 以下参考にしたサイトです。 * https://zenoh.io/ * https://www.zettascale.tech/ * https://zenoh.io/docs/getting-started/deployment/ * https://qiita.com/Shintaro_Hosoai/items/0bde489cde43a00d6f96 * https://github.com/eclipse-zenoh/zenoh/tree/master * https://speakerdeck.com/takasehideki/zenohnoros-2xiang-kedui-ying-noxian-zhuang-tofang-xiang-xing-just-my-thought
0 件のコメント:
コメントを投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿