Zenoh Aithusa Hatched Out!

8 October 2020 -- Paris.

We have been waiting this very moment for several months. Months of patient dedication, months of hard and creative work. Months in which each and every member of the zenoh team has made his and her best to give our little dragon all it needed to succed in the complicated world of Internet Scale Protocols.

Today, at about 11.00 Paris Time Zenoh Aithusa Hatched Out!

Aithusa is the code-name for the first release of our Rust-based zenoh infrastructure, A supercharged of new features and improvements, including better performance, improved network scheduling, ROS2 integration, and DDS Plugin.

Let’s find out together what are the main news and what’s next.

Protocol Updates

Zenoh Aithusa has several changes at the protocol level, most notably, we have reorganised the messages to neatly separate the transport session abstraction and the messages that are used by the protocol implementing zenoh’s primitives.

This protocol-level reorganisation has the advantage of clearly decoupling the portion of zenoh-net that deals with the underlying network and the portion of the protocol that buils upon the zenoh-channel abstraction. This reorganisation makes it eaier to port zenoh to disparate networks and also giges a better architecture for traffic scheduling.

Additional changes include the consolidation of data messages, now reduced to a single one, along with the addition of a generic message attachment decorator. The attachment decorator can be used by the application layer to attach arbitrary data to zenoh messages.

Finally, we have extended the representation of resources keys on the wire to allow us to represent effectively prefixes. In other terms, the previous version of zenoh could represent on the wire either a numerical resource identifier or a full resource key (meaning the string, such as “/org/eclipse/zenoh/demo/hello”). Now the protocol is able to represent resource keys made by resource identifier representing the prefix and a suffix. Thus we could represent the previous resource key as (42, “demo/hello).

This makes it possible for our runtime to play more optimisation tricks when deciding when, how and which portion of a key to map to a small integer. What has not changed is that these integer are invisible to you and completely managed by our runtime. You can just relax and enjoy their benefits in terms of reducing the wire-overhead.

Peers, Clients and Routers

Zenoh Aithusa supports peer-to-peer communication, as well as routed communication. Additionally, clients can leverage peers and routing nodes to communicate between each others. Likewise, group peers across separate networks can leverage routers to communicate with each other.

The routing protocol has also been updated to improve path selection while still maintaining the routing state under control.

Performance

Zenoh Aithusa gives major performance improvement when compared with the last release – the OCaml version of zenoh.

As rust async-std-1.6.4 has introduced some performance regression, while we work with the async team try go back to the level of performances of async-std-1.6.2, you should try performance with 1.6.2. The SED command below does precisely that.

$ git clone git@github.com:eclipse-zenoh/zenoh.git
$ cd zenoh
$ find . -name "*.toml" -exec sed -i s/=1.6.4/=1.6.2/ {} \;
$ export RUSTFLAGS="-C target-cpu=native"
$ cargo build --release
$ cargo build --release --examples

# then run the throughput benchmark

# run the subscriber asking to collect 30 measurement, each measurement uses 100K messages.
$ ./target/release/examples/zn_sub_thr -s 30

# run the publisher with <payload size> (1024 below). The subscriber is discovered via UDP multicast.
$ ./target/release/examples/zn_pub_thr 1024

When running these tests on a testbed made by Linux Workstations with an AMD Ryzen 7 3800X and 10GbE network. As you can read from the graph the 1Gbps mark is reached for messages of 128 bytes and the 10Gbps mark is reached for messages with a payload of just 1024 bytes.

msg-sec

mps

DDS Plugin and ROS2 Integration

Another goody coming with Zenoh Aithusa is the DDS plugin. This allows to route transparently data from Cyclone DDS, any other DDS implementation, and ROS2. As a consequence ROS2 based robot can be teamed, monitored and managed from anywhere across the Internet!

What’s Next

In the weeks to come we will be releasing:

  • Zenoh-pico. A C-based client stack for zenoh targeting the most constrained environemnts.

  • Language Bindings. More bindings are coming up including Go-Lang and Java APIs.

  • Storages Backends. Supporting addintional storage backends for time-series and relational DBs.

  • Micro-ROS RMW. Adding support for zenoh in MicroROS2.

Finally, do not hesitate to reach us out on the zenoh Gitter Channel

A+