diff --git a/blog/2024-10-21-zenoh-firesong/index.html b/blog/2024-10-21-zenoh-firesong/index.html index e826d6c6..e7f3e319 100644 --- a/blog/2024-10-21-zenoh-firesong/index.html +++ b/blog/2024-10-21-zenoh-firesong/index.html @@ -1,6 +1,6 @@ Zenoh 1.0.0 "Firesong" is ready to rock! · Zenoh - pub/sub, geo distributed storage, query

Zenoh 1.0.0 "Firesong" is ready to rock!

21st October 2024

As a result of an incredible effort from the whole Zenoh team and Zenoh community, we can finally announce that Zenoh 1.0.0 Firesong is out!

Zenoh comic October 2024

This release marks an incredible milestone for Zenoh and comes with a lot of features and improvements:

  • API stabilization. Great attention has been given to the API, its revision and rework to provide the necessary level of stability and future extensibility.
  • The very first alpha version of the new TypeScript API.
  • A full rework of the Shared Memory subsystem in Zenoh, with a new API and more supported topologies.
  • Improved batching and jitter performance for high frequency publications.
  • Improved protocol for write-side filtering.

Let us take a closer look at what Zenoh 1.0.0 brings to the table.


Improved API approach

Zenoh’s API has been improved in terms of ergonomics, clarity, and composability for future extensibility! +

Zenoh 1.0.0 "Firesong" is ready to rock!

21st October 2024

As a result of an incredible effort from the whole Zenoh team and Zenoh community, we can finally announce that Zenoh 1.0.0 Firesong is out!

Zenoh comic October 2024

This release marks an incredible milestone for Zenoh and comes with a lot of features and improvements:

  • API stabilization. Great attention has been given to the API, its revision and rework to provide the necessary level of stability and future extensibility.
  • The very first alpha version of the new TypeScript API.
  • A full rework of the Shared Memory subsystem in Zenoh, with a new API and more supported topologies.
  • Improved batching and jitter performance for high frequency publications.
  • Improved protocol for write-side filtering.

Let us take a closer look at what Zenoh 1.0.0 brings to the table.


Improved API approach

Zenoh’s API has been improved in terms of ergonomics, clarity, and composability for future extensibility! The following sections highlight the main changes of the API in the various language bindings. The full migration guide of each language is available here.

Accessors

To better separate the public API from the internal implementation, we have introduced the accessor pattern in the Zenoh API across all language bindings. See an example in Rust below. @@ -454,7 +454,7 @@ This addition introduced the need for a way to describe subjects as combinations of multiple attributes of different types (interface, certificate common name, and/or username). We have addressed this need by reworking the ACL configuration format, making it modular by isolating the rules from the subjects. This allows the combination of subject attributes, while also avoiding the need to duplicate subject or rule configurations by adding the policies list.

On another note, we have shifted the focus of ACL from actions to messages to make it easier for users to associate the ACL rules to their respective operations exposed via the Zenoh API. -The get action has been replaced by the Query message, and we completed the array of supported message types in ACL with the addition of publisher Delete and queryable Reply messages.

Following this release, a guide on how to configure ACL is available on the Zenoh reference manual, and the Access Control Rules RFC has been updated.


Batching and jitter

The porting of Zenoh to Tokio in 0.11.0 had as a side effect a change in the batching behaviour as reported by some users. +The get action has been replaced by the Query message, and we completed the array of supported message types in ACL with the addition of publisher Delete and queryable Reply messages. Filters for liveliness messages are added later on in Zenoh v1.0.3.

Following this release, a guide on how to configure ACL is available on the Zenoh reference manual, and the Access Control Rules RFC has been updated.


Batching and jitter

The porting of Zenoh to Tokio in 0.11.0 had as a side effect a change in the batching behaviour as reported by some users. The issue has been thoroughly investigated resulting in a rework of the batching mechanism in Zenoh 1.0.0. This rework accounts for Tokio peculiarities in timing management and improves the overall jitter performance when publishing at high frequency.


Link selection refers to the process of choosing a network Link when transmitting messages. This is done in the Zenoh Transport layer when two Zenoh nodes are operating in multilink mode (i.e. more than one Link has been established).

In Zenoh 0.11.x, the Link selection implementation picks any Link that matches the Reliability of the transmitted message. diff --git a/docs/manual/access-control/index.html b/docs/manual/access-control/index.html index 881110b0..98f5f12f 100644 --- a/docs/manual/access-control/index.html +++ b/docs/manual/access-control/index.html @@ -1,6 +1,6 @@ Access Control · Zenoh - pub/sub, geo distributed storage, query

Access Control

NOTE: This documentation covers the Zenoh 1.0 ACL config. For Zenoh 0.11 ACL config, +

rules

Each rule within the rules list is identified by a unique id string. Rules apply on matched messages based on their individual characteristics:

  • messages: types of messages to apply the rule on. Supported message types are the following:
    • Declare Subscriber (declare_subscriber)
    • Publication (put)
    • Delete (delete)
    • Declare Queryable (declare_queryable)
    • Query (query)
    • Reply (reply)
  • flows: applies rule on incoming messages (ingress), outgoing messages (egress), or both directions. If this field is not provided in the config, the rule will apply to both directions by default.
  • key_exprs: the rule applies on messages for which the key matches one of the given key expressions. For more details on key expression matching, see Key Expressions.

Matched messages are filtered based on the rule’s permission: allow or deny.

For instance, the following rule denies all incoming and outgoing subscriptions, publications and deletions on key expressions matching demo/example/**:

{
+

rules

Each rule within the rules list is identified by a unique id string. Rules apply on matched messages based on their individual characteristics:

  • messages: types of messages to apply the rule on. Supported message types are the following:
    • Pub/Sub messages:
      • Declare Subscriber (declare_subscriber)
      • Publication (put)
      • Delete (delete)
    • Queryable messages:
      • Declare Queryable (declare_queryable)
      • Query (query)
      • Reply (reply)
    • Liveliness messages (as of Zenoh v1.0.3):
      • Liveliness Token (liveliness_token)
      • Declare Liveliness Subscriber (declare_liveliness_subscriber)
      • Liveliness Query (liveliness_query): note that its associated replies are Liveliness Token messages.
  • flows: applies rule on incoming messages (ingress), outgoing messages (egress), or both directions. If this field is not provided in the config, the rule will apply to both directions by default.
  • key_exprs: the rule applies on messages for which the key matches one of the given key expressions. For more details on key expression matching, see Key Expressions.

Matched messages are filtered based on the rule’s permission: allow or deny.

For instance, the following rule denies all incoming and outgoing subscriptions, publications and deletions on key expressions matching demo/example/**:

{
   "id": "deny pub/sub",
   "permission": "deny",
   "flows": ["ingress", "egress"],
@@ -107,7 +107,7 @@
 In this case, it is important to know decision priority to predict the outcome: explicit deny rule > explicit allow rule > default_permission rule.
 For more details on decision priority, please refer to the Priority section of the Access Control Rules RFC.
  • Key expression matching when applying rules on messages can have a substantial impact on performance, depending on how the rules are constructed. When possible, avoid using wildcards and DSL (eg: "**", "example/*", "example/t$*") and prefer keys (eg: example/test) which are much faster to match.
  • Look out for supersets and partial overlap between rule key expressions and message key, which are not considered valid matches and therefore will not apply said ACL rule on said message. -For more details on this regard, please refer to the Key-Expression Matching section of the Access Control Rules RFC.
  • When filtering queryable messages, keep in mind that a reply does not necessarily have the same key expression as its associated query.
  • Bare in mind that the effectiveness of ACL policies is highly dependent of your Zenoh network topology and how much control you have over it. The topology can evolve in unpredictable ways in certain scenarios when combined with configuration options like scouting and gossip, which is complicated further when factoring the mobility of Zenoh clients in certain use-cases.

  • For a more technical analysis of the ACL feature, please refer to the Access Control Rules RFC.

    Next up: Rust API