Zenoh 协议(Zero Overhead Network Protocol)
Zenoh 是 Eclipse 基金会主导的开源、高性能、去中心化的发布/订阅/查询(Pub/Sub/Query)协议,核心是统一动态数据(流)、静态数据(存储)与分布式计算,主打零开销、微秒级延迟、跨域自适应、零配置组网。
发展历史
2008:创始人参与智慧城市项目,发现协议断层,萌生统一协议构想。
2015:创立 ZettaScale 公司,用 OCaml 开发原型。
2020:加入 Eclipse 基金会,成为 Eclipse IoT 项目。
2024:发布 1.0.0 正式版 “Firesong”,引入零拷贝等关键特性。
2024‑2025:被 ROS 2 采纳为非 DDS 的首选中间件。
一、核心定位与设计目标
全称:Zero Overhead Network Protocol(零开销网络协议)
核心范式:以数据为中心(Data-Centric),而非以连接为中心;数据与位置解耦,天然支持位置透明。
设计目标:
1. 统一 Data in Motion(动态流)、Data at Rest(静态存储)、Computation(分布式计算) 2. 极低开销(报文头仅 5 字节,比 DDS 少 90%) 3. 微秒级延迟(局域网≈10μs,接近 DDS) 4. 跨网适配(TCP/UDP/WebSocket/共享内存 SHM/LPWAN) 5. 去中心化、零配置、自发现、弹性扩展
二、核心概念与数据模型
1. Key Expression(键表达式)
- 类似 MQTT Topic,但更强大:层级化 + 通配符 示例:robot/sensor/temp、sensor/**(匹配所有传感器)、**/status(所有节点状态) - 所有数据与资源均通过 Key+Value 标识,Value 支持任意序列化格式(二进制/JSON/Protobuf 等)
2. Session(会话)
- 节点接入 Zenoh 网络的唯一入口 - 自动完成:邻居发现、连接建立、传输协议协商(TCP/UDP/SHM 自动切换)、链路保活
3. 三大交互模式
(1). Pub/Sub(发布/订阅) - 单向数据流:Publisher 发 → Subscriber 收 - 支持可靠/尽力而为、优先级、分片/批量 - 场景:传感器实时数据、日志广播、事件通知 (2). Query/Get(查询/响应,类 RPC) - 双向请求-响应:Get(Key) → 所有匹配 Queryable 节点返回数据 - 支持多播查询、聚合、过滤、历史数据读取 - 场景:配置读取、状态查询、服务发现、参数聚合 (3). Storage(分布式存储) - 节点可声明为某 Key 的持久化存储 - 发布者离线后,订阅者仍可从 Storage 读取最新值/历史序列 - 原生支持时间序列、分片、复制、最终一致性 (4). Liveliness(存活检测) - 自动感知节点上下线、会话断开 - 场景:服务注册与发现、故障转移、集群管理
三、架构与节点角色
1. 从下到上:物理层 → 数据链路层 → 网络层 → 传输层 → Zenoh 会话层 → 应用抽象层(Pub/Sub/Query/Storage)

2. 三种节点角色
- Peer(对等节点):完全分布式,无中心,节点对等互联(Clique/Mesh 拓扑) - Router(路由器):核心转发节点,级联构建广域网路由树,跨区域数据分发 - Client(客户端):轻量接入,依赖 Peer/Router 转发,适合资源受限设备(MCU/边缘节点)


909

被折叠的 条评论
为什么被折叠?



