10个版本 ()
1.0.0-alpha.6 | 2024年8月6日 |
---|---|
1.0.0-alpha.5 | 2024年7月26日 |
1.0.0-alpha.2 |
|
0.11.0 | 2024年6月4日 |
0.7.0-rc | 2022年12月22日 |
#172 in 网络编程
每月257次下载
57KB
907 行
Eclipse Zenoh
Eclipse Zenoh:零开销Pub/sub,存储/查询和计算。
Zenoh(发音为/zeno/)统一了数据流动、静态数据和计算。它巧妙地将传统的pub/sub与地理分布式存储、查询和计算相结合,同时保持了超越任何主流堆栈的时间效率和空间效率。
文件系统后端
在zenoh中,后端是一种存储技术(如DBMS、时间序列数据库、文件系统等),允许通过zenoh存储键/值发布并返回查询。有关详细信息,请参阅zenoh文档。
此后端依赖于主机的文件系统来实现存储。Zenoh将依赖于以下名称(不带操作系统特定的前缀和扩展名)来查找和加载它:zenoh_backend_fs
。
👉 安装最新版本:请参阅以下内容
👉 构建"main"分支:请参阅以下内容
使用示例
先决条件
- 您已安装zenoh路由器(
zenohd
),并且zenoh_backend_fs
库文件位于~/.zenoh/lib
。 - 声明
ZENOH_BACKEND_FS_ROOT
环境变量到您想要存储文件(或公开)的目录。如果您不声明它,将使用~/.zenoh/zenoh_backend_fs
目录。
您可以通过配置文件在 Zenoh 路由启动时设置存储,也可以在运行时通过 Zenoh 管理空间,例如使用 REST API 来设置。
通过 JSON5 配置文件设置
- 创建一个包含以下内容的
zenoh.json5
配置文件{ plugins: { // configuration of "storage-manager" plugin: storage_manager: { volumes: { // configuration of a "fs" volume (the "zenoh_backend_fs" backend library will be loaded at startup) fs: {}, }, storages: { // configuration of a "demo" storage using the "fs" volume demo: { // the key expression this storage will subscribes to key_expr: "demo/example/**", // this prefix will be stripped from the received key when converting to file path // this argument is optional. strip_prefix: "demo/example", volume: { id: "fs", // the key/values will be stored as files within this directory (relative to ${ZENOH_BACKEND_FS_ROOT}) dir: "example" } } } }, // Optionally, add the REST plugin rest: { http_port: 8000 } } }
- 使用以下命令运行 Zenoh 路由
zenohd-c zenoh.json5
通过 curl
命令在管理空间中设置
- 运行 Zenoh 路由,并具有对其管理空间的写入权限:
zenohd --adminspace-permissions rw
- 添加 "fs" 后端(将加载 "zenoh_backend_fs" 库)
curl -XPUT -H 'content-type:application/json' -d '{}'http://localhost:8000/@/router/local/config/plugins/storage_manager/volumes/fs
- 使用 "fs" 后端添加 "demo" 存储
curl -XPUT -H 'content-type:application/json' -d '{key_expr:"demo/example/**",strip_prefix:"demo/example", volume: {id: "fs", dir:"example"}}'http://localhost:8000/@/router/local/config/plugins/storage_manager/storages/demo
使用 REST API 进行测试
使用 curl
发布和查询密钥/值,您可以
# Put values that will be stored under ${ZENOH_BACKEND_FS_ROOT}/example
curl -X PUT -d "TEST-1" http://localhost:8000/demo/example/test-1
curl -X PUT -d "B" http://localhost:8000/demo/example/a/b
# Retrive the values
curl http://localhost:8000/demo/example/**
配置
基于文件系统的卷的额外配置
使用 fs
后端的卷不需要在卷级别进行任何额外配置。任何卷都可以通过指定 backend
配置键的值为 "fs"
来使用 fs
后端。如果没有指定其他后端,名为 fs
的卷将自动由 fs
后端支持。
基于文件系统的卷的存储级别配置
依赖于 fs
支持的卷的存储必须/可以指定对该卷特定的额外配置,如上例所示
-
dir
(必需,字符串):用于存储数据的目录。 -
read_only
(可选,布尔值):存储将只对 GET 查询做出响应。它将不接受任何 PUT 或 DELETE 消息,并且不会写入任何文件。默认值为false
。 -
on_closure
(可选,字符串):当存储被删除时使用的策略。有两个选项"do_nothing"
:存储的目录保持不变(这是默认行为)"delete_all"
:删除存储的目录及其所有内容。
-
follow_links
(可选,布尔值):如果设置为true
,存储将跟踪符号链接。默认值为false
。 -
keep_mime_types
(可选,布尔值):当对文件执行 GET 查询,并且 Zenoh 编码未知时,存储将根据文件扩展名猜测其 MIME 类型。如果 MIME 类型不对应于支持的 Zenoh 编码,则此选项将驱动返回值true
(默认值):返回一个带有描述设置为 MIME 类型的 Custom value。false
:返回一个使用 APP_OCTET_STREAM 编码的 Raw value。
后端的行为
映射到文件系统
每个存储将映射到一个路径为:${ZENOH_BACKEND_FS_ROOT}
/<dir>的目录,其中
${ZENOH_BACKEND_FS_ROOT}
是一个环境变量,可以在启动zenoh路由器之前指定。如果没有指定这个变量,将使用${ZENOH_HOME}/zenoh_backend_fs
(其中${ZENOH_HOME}
的默认值是~/.zenoh
)。<dir>
是存储创建时指定的"dir"
属性。每个放入存储的zenoh 键/值将映射到存储目录中的一个文件,其中- 文件路径将是
${ZENOH_BACKEND_FS_ROOT}/<dir>/<relative_zenoh_key>
,其中<relative_zenoh_key>
将是zenoh键,在存储创建时从"strip_prefix"
属性中去除。 - 文件的内容将是作为RawValue写入的值。也就是说,这是zenoh传输的相同的字节数据缓冲区。对于与UTF-8兼容的格式(StringUTF8、JSon、Integer、Float...),这意味着文件将以文本格式可读。
- 键/值的编码和时间戳将存储在存储目录中的RocksDB数据库中。
删除时的行为
在删除键时,相应的文件将被删除。在RocksDB数据库中插入一个具有删除时间戳的条目(以避免在无序消息的情况下重新插入较旧时间戳的点)。
在常规间隔中,一个任务将清除RocksDB数据库中具有旧时间戳且没有相应现有文件的条目。
GET时的行为
在GET操作中,存储将搜索匹配的现有文件,并作为回复返回它们的原始内容。对于每个文件,从RocksDB数据库中检索编码和时间戳。但如果没有在数据库中找到文件的条目(例如,对于没有使用zenoh创建的文件),将根据文件的扩展名(使用mime_guess)推断编码,并从文件的修改时间推断时间戳。
如何安装它
要安装此后端库的最新版本,可以按以下方式操作
手动安装(所有平台)
所有发布包都可以从以下网址下载
每个子目录都有Rust目标的名称。请参阅https://doc.rust-lang.net.cn/stable/rustc/platform-support.html中每个目标对应的平台。
选择您的平台,并下载.zip
文件。
将其解压到与 zenohd
相同的目录,或者任何它可以找到后端库的目录(例如 /usr/lib 或 ~/.zenoh/lib)
Linux Debian
将 Eclipse Zenoh 私有仓库添加到源列表,并安装 zenoh-backend-filesystem
软件包
echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list.d/zenoh.list > /dev/null
sudo apt update
sudo apt install zenoh-backend-filesystem
如何构建它
⚠️ 警告 ⚠️ : Zenoh 及其生态系统正在积极开发中。当你从 git 构建时,请确保同时从 git 构建你计划使用的任何其他 Zenoh 仓库(例如,绑定、插件、后端等)。可能会发生 git 中的某些更改与最新发布的 Zenoh 软件包(例如 deb、docker、pip)不兼容的情况。我们在维护 Zenoh 项目的各个 git 仓库之间的兼容性方面投入了特别多的努力。
首先,安装 Clang 和 Cargo 和 Rust。如果你已经安装了 Rust 工具链,请确保它与以下版本兼容
$ rustup update
⚠️ 警告 ⚠️ : 由于 Rust 没有稳定的 ABI,后端库应该使用与
zenohd
完全相同的 Rust 版本构建,并且对于zenoh
依赖项使用相同的版本(或提交号)。否则,在zenohd
和库之间共享类型内存映射的不兼容性可能导致"SIGSEV"
崩溃。
要了解 zenohd
构建所使用的 Rust 版本,请使用 --version
选项。
示例
$ zenohd --version
The zenoh router v0.6.0-beta.1 built with rustc 1.64.0 (a55dd71d5 2022-09-19)
在这里,zenohd
是使用 rustc 版本 1.64.0
构建的。
使用以下命令安装并使用此工具链
$ rustup default 1.64.0
并且 zenohd
版本对应于一个未发布的提交,其 id 为 1f20c86
。使用以下命令更新 Cargo.lock 中的 zenoh
依赖项
$ cargo update -p zenoh --precise 1f20c86
然后使用以下命令构建后端
$ cargo build --release --all-targets
依赖项
~64MB
~1M SLoC