【Rust日报】 Danube Messaging - 云原生消息平台
Rusqlite 使用示例
这是一个 Rust 语言中使用 SQLite 数据库的基础教程示例。
主要知识点
1. 基本设置
使用
rusqlitecrate 提供的Connection、params和Result类型定义了一个
Person结构体,包含 id、name 和可选的 data 字段
2. 数据库连接
使用
Connection::open_in_memory()创建内存数据库连接
3. 创建表
通过
conn.execute()执行 SQL 语句创建 person 表表结构包含:id (主键)、name (非空文本)、data (二进制数据)
4. 插入数据
使用参数化查询 (
?1,?2) 插入数据通过元组传递参数值,避免 SQL 注入
5. 查询数据
使用
prepare()准备 SQL 查询语句使用
query_map()将查询结果映射为 Person 对象通过闭包
|row|从每行数据中提取字段值
6. 遍历结果
使用 for 循环遍历查询结果
打印每个找到的 Person 对象
关键特性
类型安全的数据库操作
使用 Rust 的
Result类型进行错误处理参数化查询防止 SQL 注入
https://docs.rs/rusqlite/latest/rusqlite
Danube Messaging - 云原生消息平台
Danube 是一个用 Rust 构建的开源分布式消息代理平台,具有轻量级、云原生和成本效益的特点。
核心特性
嵌入式 Raft 共识:基于 openraft 实现元数据复制,无需依赖 ETCD 或 ZooKeeper
可靠消息传递:结合本地预写日志(WAL)、持久化段存储和元数据驱动恢复
低延迟分发:支持本地磁盘、共享文件系统和对象存储
基于 Tokio 构建:异步高性能运行时
快速开始方式
1. Docker Compose 集群部署
mkdir danube-docker && cd danube-docker
curl -O [docker-compose.yml]
curl -O [danube_broker.yml]
docker-compose up -d包含:3个高可用 Broker、Prometheus 监控、danube-cli 工具
2. 单节点本地运行
./danube-broker --single-node --data-dir ~/danube-data无需 Docker 和配置文件
Broker 运行在 127.0.0.1:6650
管理端口 127.0.0.1:50051
数据持久化到本地目录
集群特性
水平扩展:零停机时间快速添加 Broker
智能负载均衡:自动主题分配和重新平衡
高可用性:自动领导者选举、故障转移和主题协调
无外部依赖:元数据存储完全嵌入式
项目结构
包含多个模块:broker、client、admin、CLI、core、持久化存储、Raft 实现等,最新版本 v0.9.0 进行了持久化和单节点 broker 的重大改进。
https://github.com/danube-messaging/danube
Danube 消息系统的持久化与存储
核心概念
Danube 可靠主题(reliable topics)通过持久化消息,使消费者能够回放历史记录,并确保主题在代理服务器之间移动时不会丢失数据。存储系统基于三个核心思想:
最近的写入存储在快速的本地预写日志(WAL)中
历史数据通过持久化导出的段(segments)保存
恢复和主题迁移依赖于嵌入式 Raft 元数据存储
三种存储模式
1. local(本地模式)
所有数据保存在代理服务器的本地磁盘
无后台导出,无远程存储
适用场景:单节点部署、开发环境、简单部署
2. shared_fs(共享文件系统模式)
热写入数据存储在本地 WAL
后台导出将封闭段复制到所有代理服务器可见的共享文件系统
适用场景:使用 NFS 或共享 POSIX 卷的本地多代理集群
3. object_store(对象存储模式)
热写入数据存储在本地 WAL
后台导出将封闭段推送到云对象存储(S3、GCS、Azure Blob)
适用场景:云原生多代理部署
关键配置项
WAL(预写日志)设置
缓存容量、文件同步间隔
批处理字节数上限
文件轮转阈值(大小和时间)
本地保留策略
控制本地 WAL 文件的清理时机
基于时间(默认 48 小时)和大小(默认 20GB)的清理策略
仅删除本地 WAL 文件,不删除持久化段对象
持久化后端配置
shared_fs:配置共享段目录
object_store:配置云存储后端、存储桶、区域等参数
选择建议
需求 | 推荐模式 |
|---|---|
最简单的单代理部署 | local |
多代理 + 共享磁盘 | shared_fs |
多代理 + 云原生 | object_store |
https://danube-docs.dev-state.com/concepts/persistence/
--
From 日报小组 Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss
微信公众号:Rust语言中文社区
更多推荐
所有评论(0)