d-engine:用于 Rust 的轻量级分布式协调引擎
Source: Dev.to
概览
轻量级 Raft 实现,旨在嵌入 Rust 应用程序——构建可靠分布式系统的共识层。
秉持简单愿景:让分布式协调变得易于获取、运行成本低、使用简便。
核心理念:倾向于采用简单的架构,而非复杂的架构。
- 单线程事件循环 – 无竞争条件,严格顺序;在单核上 CPU 绑定,可水平扩展。
- 角色分离(单一职责原则) – Leader、Follower、Candidate、Learner 各自处理自己的逻辑;主循环仅负责路由事件。
- 标准 Raft 设计 – 遵循典型的 Raft 架构。
操作模式
嵌入式模式
Runs inside your Rust process.
let engine = EmbeddedEngine::start().await?;
engine.wait_ready(Duration::from_secs(5)).await?;
let client = engine.client();
client.put(b"key".to_vec(), b"value".to_vec()).await?; // Lab numbers only—production performance varies by workload and hardware.
可插拔架构
d-engine provides working implementations (RocksDB storage, KV operations, gRPC transport). When defaults don’t fit, implement the required traits:
pub trait StorageEngine {
type LogStore: LogStore;
type MetaStore: MetaStore;
}
pub trait StateMachine {
async fn apply_chunk(&self, entries: Vec) -> Result;
}
Examples in the repository demonstrate:
- Sled storage backend.
- Custom HTTP handlers with HAProxy for high‑availability deployments.
一致性保证
三种读取策略(可针对每个操作或全服务器进行配置):
| 策略 | 保证 | 典型延迟 |
|---|---|---|
| LinearizableRead | 最强保证,法定副本验证 | ~2 ms |
| LeaseRead | 基于 Leader 租约的快速路径(需要 NTP) | ~0.3 ms |
| EventualConsistency | 本地读取,可能是陈旧的 | ~0.1 ms |
默认设置合理;权衡已记录。
扩展示例
// Start with 1 node (auto‑elected leader)
let engine = EmbeddedEngine::start().await?;
// Scale to 3 nodes later: update config, zero code changes
// See `examples/single-node-expansion`
不需要 Kubernetes 或复杂的设置——只需 Rust + 一个配置文件。
功能概述
- Raft 共识实现。
- 可插拔存储(RocksDB、Sled、自定义)。
- 灵活的一致性(线性一致、租约、最终一致)。
- 生产就绪的核心;API 正在趋向 v1.0 稳定。
- 版本 0.2:核心引擎已达生产就绪(1000+ 测试,已通过 TLA+ 与 Jepsen 验证)。
未来方向
- 云原生部署(Cloudflare、AWS、GCP 存储后端)。时间表取决于早期采用者的实际使用案例。
- 探索兼容 etcd 的 API 层。
入门
[dependencies]
d-engine = "0.2"
- GitHub:
- Documentation:
- Examples:
如果您在 Rust 中构建分布式系统并且需要共识,代码已经准备好。该仓库包含嵌入式模式、独立模式、自定义存储以及使用 HAProxy 的高可用部署示例。
征集用户
我们正在寻找构建分布式系统的 Rust 开发者,且他们面临真实的难题:
- 协调瓶颈(共识慢、etcd 集群成本高)。
- 强一致性需求(领袖选举、分布式锁、元数据存储)。
- 需要廉价、简洁、可靠协调的生产部署。
理想场景
- 生产级部署(非玩具项目)。
- 云原生环境(Cloudflare Workers、AWS Lambda、无服务器模式)。
- 对成本敏感的使用场景,etcd 过于奢侈。
如果您有具体问题,请在 issue 中提交您的使用案例或直接联系。
许可证与兼容性
- 许可证: MIT 或 Apache‑2.0
- 平台: Linux, macOS
- 最低支持的 Rust 版本 (MSRV): 1.88