10个版本 ()
1.0.0-alpha.6 | 2024年8月6日 |
---|---|
1.0.0-alpha.5 | 2024年7月26日 |
0.11.0 | 2024年6月4日 |
0.10.1-rc | 2023年12月21日 |
0.7.0-rc | 2022年12月22日 |
316 在 数据库接口
每月252次 下载
62KB
867 行
Eclipse Zenoh
Eclipse Zenoh:零开销的Pub/Sub、存储/查询和计算。
Zenoh(发音为 /zeno/)统一了运动中的数据、静止的数据和计算。它巧妙地将传统的pub/sub与地理分布的存储、查询和计算相结合,同时保持了超越任何主流堆栈的时间效率和空间效率。
S3后端
在Zenoh中,后端是一种存储技术(如DBMS、时间序列数据库、文件系统等),允许通过Zenoh存储键/值发布,并在查询时返回它们。有关更多信息,请参阅 Zenoh文档。
此后端依赖于 Amazon S3 来实现存储。它也兼容与 MinIO 对象存储一起工作。
Zenoh将依赖以下库名称(不带操作系统特定前缀和扩展)来查找和加载它:**libzenoh_backend_s3
**。
👉 安装最新版本:请参阅以下内容 安装方法
👉 构建 "main" 分支:请见下文下面
用法示例
先决条件
-
您已安装 Zenoh 路由器(
zenohd
),并且libzenoh_backend_s3
库文件位于~/.zenoh/lib
中。或者,我们可以通过运行以下命令来设置库的符号链接:ln -s ~/zenoh-backend-s3/target/release/libzenoh_backend_s3.dylib ~/.zenoh/lib/libzenoh_backend_s3.dylib
-
您有一个正在运行的 S3 实例,这可以是 AmazonS3 实例或 MinIO 实例。
您可以通过配置文件在 Zenoh 路由器启动时设置存储,也可以在运行时通过 Zenoh 管理空间设置,例如使用 REST API(见https://zenoh.io/docs/manual/plugin-storage-manager/)。
设置 MinIO 实例
为了运行下文中的用法示例,启动一个 MinIO 实例是方便的。要在 Docker 容器上启动 MinIO,首先使用以下命令安装 MinIO:
docker pull minio/minio
然后,您可以使用以下命令启动实例
docker run -p 9000:9000 -p 9090:9090 --user $(id -u):$(id -g) --name minio -e 'MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE' -e 'MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -v ${HOME}/minio/data:/data quay.io/minio/minio server data --console-address ':9090'
如果成功,则可以通过https://127.0.0.1:9090 访问控制台。
通过 JSON5 配置文件设置
-
创建一个包含以下内容的
zenoh.json5
配置文件:{ plugins: { // Configuration of "storage_manager" plugin: storage_manager: { volumes: { s3: { // AWS region to which connect (see https://docs.aws.amazon.com/general/latest/gr/s3.html). // This field is mandatory if you are going to communicate with an AWS S3 server and // optional in case you are working with a MinIO S3 server. region: "eu-west-1", // Endpoint where the S3 server is located. // This parameter allows you to specify a custom endpoint when working with a MinIO S3 // server. // This field is mandatory if you are working with a MinIO server and optional in case // you are working with an AWS S3 server as long as you specified the region, in which // case the endpoint will be resolved automatically. url: "https://s3.eu-west-1.amazonaws.com", // Optional TLS specific parameters to enable HTTPS with MinIO. Configuration shared by // all the associated storages. // tls: { // private: { // // Certificate authority to authenticate the server. // root_ca_certificate_file: "/home/user/certificates/minio/ca.pem", // // // Alternatively you can inline your certificate encoded with base 64: // root_ca_certificate_base64: "<YOUR_CERTIFICATE_ENCODED_WITH_BASE64>" // } //}, }, }, storages: { // Configuration of a "demo" storage using the S3 volume. Each storage is associated to a // single S3 bucket. s3_storage: { // The key expression this storage will subscribes to key_expr: "s3/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" strip_prefix: "s3/example", volume: { // Id of the volume this storage is associated to id: "s3", // Bucket to which this storage is associated to bucket: "zenoh-bucket", // The storage attempts to create the bucket, but if the bucket already exists and is // owned by you, then with 'reuse_bucket' you can associate that preexisting bucket to // the storage, otherwise it will fail. reuse_bucket: true, // If the storage is read only, it will only handle GET requests read_only: false, // strategy on storage closure, either `destroy_bucket` or `do_nothing` on_closure: "destroy_bucket", private: { // Credentials for interacting with the S3 bucket access_key: "SARASAFODNN7EXAMPLE", secret_key: "asADasWdKALsI/ASDP22NG/pWokSSLqEXAMPLEKEY", }, }, }, }, }, // Optionally, add the REST plugin rest: { http_port: 8000 }, }, }
-
使用以下命令运行 Zenoh 路由器:
zenohd -c zenoh.json5
与 AWS S3 存储一起工作的卷配置
当与 AWS S3 存储一起工作时,必须指定在Amazon Simple Storage Service 端点和配额 文档中指示的区域名称。端点 URL 不需要指定,因为内部端点解析器将自动找到与指定区域关联的端点。
与卷关联的所有存储都将使用相同的区域。
配置文件中的卷部分将如下所示:
storage_manager {
volumes: {
s3: {
// AWS region to which connect
region: "eu-west-1",
}
},
...
}
与 MinIO 一起工作的卷配置
相反,当与 MinIO S3 存储一起工作时,我们需要指定存储的端点而不是区域,MinIO 服务器将忽略区域。在这种情况下,我们可以省略指定区域。
配置文件中的卷部分将如下所示:
storage_manager {
volumes: {
s3: {
url: "https://127.0.0.1:9000",
}
},
...
}
通过管理空间的 curl
命令在运行时设置
- 运行 Zenoh 路由器
cargo run --bin=zenohd
- 添加 "s3" 后端(将加载 "zenoh_backend_s3" 库)
curl -X PUT -H 'content-type:application/json' -d '{url: "https://127.0.0.1:9000", private: {access_key: "AKIAIOSFODNN7EXAMPLE", secret_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/volumes/s3
- 使用 "s3" 后端添加 "s3_storage" 存储
curl -X PUT -H 'content-type:application/json' -d '{key_expr:"s3/example/*", strip_prefix:"s3/example", volume: {id: "s3", bucket: "zenoh-bucket", create_bucket: true, region: "eu-west-3", on_closure: "do_nothing", private: {access_key: "AKIAIOSFODNN7EXAMPLE", secret_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}}}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/storages/s3_storage
使用 REST API 进行测试
使用 curl
发布和查询键/值,您可以进行以下操作:
# Put values that will be stored in the S3 storage
curl -X PUT -H 'content-type:application/json' -d '{"example_key": "example_value"}' http://0.0.0.0:8000/s3/example/test
# To get the stored object
curl -X GET -H {} -d '{}' http://0.0.0.0:8000/s3/example/test
# To delete the previous object
curl -X DELETE -H {} -d '{}' http://0.0.0.0:8000/s3/example/test
# To delete the whole storage and the bucket if configured (note in order for this test to work, you need to setup adminspace read/write permissions)
curl -X DELETE 'http://0.0.0.0:8000/@/router/local/config/plugins/storage_manager/storages/s3_storage'
# To delete the whole volume (note in order for this test to work, you need to setup adminspace read/write permissions)
curl -X DELETE 'http://0.0.0.0:8000/@/router/local/config/plugins/storage_manager/volumes/s3'
在 MinIO 上启用 TLS
为了通过 HTTPS 建立安全通信,我们需要提供验证服务器凭据的证书颁发机构的证书。
TLS 证书可以使用 Minica 在zenoh 文档中生成。在运行以下命令时:
minica --domains localhost
将生成一个私钥、一个公钥证书和一个证书颁发机构证书
└── certificates
├── localhost
│ ├── cert.pem
│ └── key.pem
├── minica-key.pem
└── minica.pem
在配置文件中,我们需要指定 root_ca_certificate_file
,因为这将允许 s3 插件验证 MinIO 服务器的密钥。例如:
tls: {
private: {
root_ca_certificate_file: "/home/user/certificates/minio/minica.pem",
},
},
在这里,root_ca_certificate_file
对应于生成的 minica.pem 文件。您还可以通过在字段 root_ca_certificate_base64
中内联根 CA 证书来直接嵌入根 CA 证书,使用 base64 编码。
《cert.pem》和《key.pem》文件分别对应公钥证书和私钥。我们需要分别将它们重命名为《public.crt》和《private.key》,并将它们存储在MinIO配置目录下(如MinIO文档中指定)。如果您之前已运行Docker容器,则需要将包含证书的文件夹作为卷挂载;假设我们将证书存储在${HOME}/minio/certs
下,我们需要按照以下方式启动容器
docker run -p 9000:9000 -p 9090:9090 --user $(id -u):$(id -g) --name minio -e 'MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE' -e 'MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -v ${HOME}/minio/data:/data -v ${HOME}/minio/certs:/certs quay.io/minio/minio server data --certs-dir certs --console-address ':9090'
最终,卷配置应如下所示
storage_manager: {
volumes: {
s3: {
// Endpoint where the S3 server is located
url: "https://127.0.0.1:9000",
// Configure TLS specific parameters
tls: {
private: {
root_ca_certificate_file: "/home/user/certificates/minio_certs/minica.pem",
},
},
},
},
注意:不要忘记修改端点协议,例如从https://127.0.0.1:9090
更改为https://127.0.0.1:9090
如何安装它
要安装此后端库的最新版本,可以按以下步骤操作
手动安装(所有平台)
所有发布包都可以从以下地址下载
每个子目录都包含Rust目标的名称。请参阅https://doc.rust-lang.net.cn/stable/rustc/platform-support.html中每个目标对应的平台
选择您的平台并下载.zip
文件。
将其解压缩到与zenohd
相同的目录或任何可以找到后端库的目录(例如,/usr/lib或~/.zenoh/lib)
Linux Debian
将Eclipse Zenoh私有仓库添加到源列表,并安装zenoh-backend-s3
包
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-s3
如何构建它
⚠️ 警告 ⚠️ : Zenoh及其生态系统正在积极开发中。当您从git构建时,请确保您也构建了您计划使用的任何其他Zenoh仓库(例如,绑定、插件、后端等)。可能会发生某些git更改与最新的打包Zenoh版本不兼容(例如,deb、docker、pip)。我们在维护Zenoh项目中各种git仓库之间的兼容性方面付出了特别努力。
首先,安装Cargo和Rust。如果您已经安装了Rust工具链,请确保它是最新的
$ rustup update
⚠️ 警告 ⚠️ : 由于Rust没有稳定的ABI,后端库应使用与
zenohd
完全相同的Rust版本构建。否则,在zenohd
和库之间共享类型内存映射中的不兼容性可能导致"SIGSEV"
崩溃。
要了解zenohd
使用的Rust版本,请使用--version
选项。
示例
$ zenohd --version
zenohd v0.7.0-rc-365-geca888b4-modified built with rustc 1.69.0 (84c898d65 2023-04-16)
The zenoh router v0.7.0-rc-365-geca888b4-modified built with rustc 1.69.0 (84c898d65 2023-04-16)
在此,zenohd
已使用rustc版本1.69.0
构建。使用以下命令安装并使用此工具链
$ rustup default 1.69.0
然后使用以下命令构建后端
$ cargo build --release --all-targets
依赖项
~68MB
~1M SLoC