7个版本
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.10.1-rc | 2023年12月21日 |
174 在 数据库接口 中
每月254次 下载
58KB
814 行
Eclipse Zenoh
Eclipse Zenoh:零开销的发布/订阅、存储/查询和计算。
Zenoh(发音为 /zeno/)统一了动态数据、静态数据和计算。它巧妙地将传统的发布/订阅与地理分布式存储、查询和计算相结合,同时保持了超越任何主流堆栈的时间空间效率。
InfluxDB后端
在Zenoh中,后端是一种存储技术(如数据库管理系统、时间序列数据库、文件系统等),允许通过zenoh存储键/值发布并通过查询返回它们。有关详细信息,请参阅zenoh文档。
此后端依赖于InfluxDB服务器来实现存储。Zenoh将依赖以下名称(不带特定于操作系统的前缀和扩展名)来找到并加载它:zenoh_backend_influxdb2
。
👉 安装最新版本:请参阅以下内容
👉 构建"main"分支:请参阅以下内容
:note: 这为InfluxDB 2.x提供了广泛的支持。
⚠️ 旧版0.5版本文档
以下文档与当前在"main"分支中开发中的0.6.x版本相关。
有关旧版本,请参阅相应标记版本的README和代码
使用示例
先决条件
- 您已安装zenoh路由器(
zenohd
),并且zenoh_backend_influxdb2
库文件在~/.zenoh/lib
中可用。 - 您的InfluxDB服务正在运行并监听于
https://127.0.0.1:8086
您可以通过配置文件在zenoh路由器启动时设置存储,也可以在运行时通过zenoh管理空间,例如使用REST API。
通过JSON5配置文件设置
- 创建一个
zenoh.json5
配置文件,例如{ plugins: { // configuration of "storage_manager" plugin: storage_manager: { volumes: { // configuration of a "influxdb2" volume (the "zenoh_backend_influxdb2" backend library will be loaded at startup) //this should be named influxdb2 for v2 influxdb2: { // URL to the InfluxDB service url: "https://127.0.0.1:8086/api/v2/", private: { // If needed: InfluxDB credentials, preferably ALL-ACCESS for databases creation and drop //if not ALL-ACCESS then atleast with authorization to create/delete buckets //Note: this should not be left empty for the plugin to work; if you have no admin creds, you can copy the user creds instead // org_id: "organization ID", // token: "admin access token" } } }, storages: { // configuration of a "demo" storage using the "influxdb2" 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 database key. // i.e.: "demo/example/a/b" will be stored as "a/b" // this option is optional strip_prefix: "demo/example", volume: { //this will be influxdb2 for v2 (exactly the same name as in volumes section) id: "influxdb2", // the database name within InfluxDB (not the db ID) db: "zenoh_example", // if the database doesn't exist, create it create_db: true, // strategy on storage closure on_closure: "drop_db", private: { //required // If needed: InfluxDB credentials, with read/write privileges for the database //this will be the same as for admin // org_id: "organization ID", //this is any token with either: //a.) Read-Write access to the existing DB mentioned above in the config //b.) Read-write access to ALL buckets in the organization so it can access the new bucket created by zenoh // token: "user access token" } } } } }, // Optionally, add the REST plugin rest: { http_port: 8000 } } }
- 使用以下命令运行zenoh路由器
zenohd-c zenoh.json5
通过在管理空间上使用 curl
命令在运行时设置
- 运行zenoh路由器,并具有对其管理空间的写入权限
zenohd--adminspace-permissions rw
- 添加 "influxdb2" 卷(将加载 "zenoh_backend_fs" 库),连接到位于 https://127.0.0.1:8086 的InfluxDB服务:
curl -X PUT -H 'content-type:application/json' -d '{url:"https://127.0.0.1:8086/api/v2"}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/volumes/influxdb2
- 使用 "influxdb2" 卷添加 "demo" 存储:
curl -X PUT -H 'content-type:application/json' -d '{key_expr:"demo/example/**",volume:{id:"influxdb2",db:"zenoh_example",create_db:true}}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/storages/demo
使用REST API进行测试
使用 curl
发布和查询键/值,您可以
# Put some values at different time intervals
curl -X PUT -d "TEST-1" https://127.0.0.1:8000/demo/example/test
curl -X PUT -d "TEST-2" https://127.0.0.1:8000/demo/example/test
curl -X PUT -d "TEST-3" https://127.0.0.1:8000/demo/example/test
# Retrive them as a time serie where '_time=[..]' means "infinite time range"
curl -g 'https://127.0.0.1:8000/demo/example/test?_time=[..]'
卷配置
支持InfluxDB的卷需要一些配置才能工作
-
"url"
(必需): InfluxDB服务的URL。例如:https://127.0.0.1:8086
-
"org_id"
(可选): 一个InfluxDB组织的组织ID。 -
"token"
(可选): 管理用户的令牌。它将用于创建数据库、授予映射到存储的数据库的读写权限以及删除数据库和度量。在Influxdb2.x中,您可以使用ALL ACCESS令牌进行此操作(https://docs.influxdata.com/influxdb/cloud/admin/tokens/#all-access-token)
org_id
和 token
都应该隐藏在一个 private
对象后面,如上例所示。一般来说,如果您希望在查询配置时隐藏配置的一部分,您应该将其隐藏在一个 private
对象后面。
特定于卷的存储配置
依赖于 influxdb2
支持的卷的存储可能可以通过 volume
部分进行额外的配置
-
"db"
(可选,字符串): 存储将映射到的InfluxDB数据库名。如果没有指定,将生成一个随机名称,并创建相应的数据库(即使未设置"create_db"
)。 -
"create_db"
(可选,布尔值) : 如果数据库不存在,则创建InfluxDB数据库。默认情况下,数据库不创建,除非指定了"db"
属性。(值不重要,只需检查属性是否存在) -
"on_closure"
(可选,字符串) : 移除存储时使用的策略。有以下3个选项- unset 或
"do_nothing"
: 数据库保持不变(这是默认行为) "drop_db"
: 删除数据库(即移除)"drop_series"
: 删除所有系列(测量),数据库保持为空。这在v2版本中目前不支持。
- unset 或
-
"org_id"
(可选,字符串) : 用户的组织。它应该与管理员的组织相同。 -
"token"
(可选,字符串) : InfluxDB访问令牌,通常是非管理员。它将被用于GET/PUT/DELETE zenoh操作中的数据库读写。
后端行为
映射到InfluxDB概念
每个 存储 将映射到InfluxDB的 数据库。
要存储的每个 键 将映射到以从 "strip_prefix"
属性中剥离的名称命名的InfluxDB 测量。(见下文)
放入存储中的每个 键/值 将映射到InfluxDB的 点,重用zenoh设置的timestamp(但精度为纳秒)。点的字段和标签如下
"kind"
标签:zenoh变更类型(对已放入的值使用"PUT"
,对标记键删除的操作使用"DEL"
)"timestamp"
字段:原始zenoh时间戳"encoding"
字段:值的编码标志"base64"
字段:一个布尔值,表示值是否以base64编码"value"
字段:作为字符串的值,可能是二进制值编码的base64。
删除时的行为
在删除键时,删除消息之前的所有点将被删除。插入一个具有 "kind"="DEL
的点(以避免无序消息中较旧时间戳点的重新插入)。在v1中,如果删除的键对应的测量在5秒后仍不含点,zenoh会丢弃该测量。然而,influxdb 2.x 不支持此功能。
GET 操作的行为
在GET操作中,默认情况下存储只返回每个键/测量的最新点。这是为了与其他仅存储每个键一个值的后端技术保持一致。
如果您想获取GET操作的结果作为时间序列,您需要通过您的 选择器 中的 "_time"
参数指定时间范围。
:note: 目前,通配符块 * 和 ** 对于 Influxdb 2.x 不起作用。这是由于 Influxdb 2.x API 对我们方法的缺乏支持。
选择器的示例
# get the complete time-series
/demo/example/**?_time=[..]
# get points within a fixed date interval
/demo/example/influxdb/**?_time=[2020-01-01T00:00:00Z..2020-01-02T12:00:00.000000000Z]
# get points within a relative date interval
/demo/example/influxdb/**?_time=[now(-2d)..now(-1d)]
有关时间范围格式的完整描述,请参阅 "_time"
RFC
如何安装它
要安装此后端库的最新版本,您可以按照以下步骤操作
手动安装(所有平台)
所有发布包都可以从以下地址下载
每个子目录都有 Rust 目标的名称。请参阅 https://doc.rust-lang.net.cn/stable/rustc/platform-support.html 上每个目标对应的平台
选择您的平台,并下载 .zip
文件。
将其解压缩到与 zenohd
相同的目录或任何可以找到后端库的目录(例如 /usr/lib 或 ~/.zenoh/lib)
Linux Debian
将 Eclipse Zenoh 私有仓库添加到源列表,并安装 zenoh-backend-influxdb-v2
软件包
echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
sudo apt install zenoh-backend-influxdb-v2
如何构建它
⚠️ 警告 ⚠️ : Zenoh 及其生态系统正在积极开发中。当您从 git 构建时,请确保您也使用 git 构建您计划使用的任何其他 Zenoh 仓库(例如绑定、插件、后端等)。可能发生的情况是 git 中的某些更改与最新打包的 Zenoh 版本(例如 deb、docker、pip)不兼容。我们在保持 Zenoh 项目中各个 git 仓库之间的兼容性方面投入了特别大的努力。
首先,安装 Cargo 和 Rust。如果您已经安装了 Rust 工具链,请确保它已更新至
$ rustup update
⚠️ 警告 ⚠️ : 由于 Rust 没有稳定的 ABI,后端库应该使用与
zenohd
相同的 Rust 版本构建,并且对于zenoh
依赖项使用相同的版本(或提交号)。否则,在zenohd
和库之间共享类型内存映射中的不兼容性可能导致"SIGSEV"
崩溃。
要了解 zenohd
构建时使用的 Rust 版本,请使用 --version
选项。
使用下载版本示例
$ zenohd --version
The zenoh router v0.10.0-rc built with rustc 1.72.0 (5680fa18f 2023-08-23)
在这里,zenohd
版本是0.10.0-rc
,使用1.72.0
版本的rustc构建。
使用以下命令安装和使用此工具链:
$ rustup default 1.72.0
然后编辑更新后的Cargo.toml
文件,将所有zenoh
依赖项的版本号设置为相同。
zenoh = { version = "0.10.0-rc", features = [ "unstable" ] }
然后仅针对v2后端构建库,您需要在构建命令中指定它。
$ cargo build --release --all-targets -p zenoh-backend-influxdb-v2
您也可以同时构建两个版本。
$ cargo build --release --all-targets
=======
以下是从源代码构建的版本示例
$ zenohd --version
The zenoh router v0.11.0-dev-37-g9f7a37ee built with rustc 1.72.0 (5680fa18f 2023-08-23)
在这里,zenohd
版本是v0.11.0-dev-37-g9f7a37ee
,其中
v0.11.0-dev
表示它是未来v0.11.0
版本的开发版本。-37
表示自标记开发开始的标签0.11.0-dev
以来,已有37次提交。-g9f7a37ee
表示源代码的提交编号:9f7a37ee
(前缀g
仅表示"git",应忽略)。
它已使用1.72.0
版本的rustc构建。
使用以下命令安装和使用此工具链:
$ rustup default 1.72.0
并将Cargo.lock
中的所有zenoh
依赖项更新为使用提交ID。
$ cargo update -p zenoh --precise 9f7a37ee
依赖项
~30–49MB
~782K SLoC