# Revoke 框架
[](https://crates.io/crates/revoke)
[](https://docs.rs/revoke)
[](LICENSE)
一个使用纯 Rust 构建的高性能微服务基础设施框架,为构建分布式系统提供全面的组件支持。
## 特性
- 🚀 **高性能**:基于异步 Rust,开销极小
- 🌐 **API 网关**:由 Cloudflare Pingora 驱动,性能卓越
- 🔍 **服务发现**:动态服务注册和发现
- ⚙️ **配置管理**:集中式配置,支持热重载
- 📊 **分布式追踪**:集成 OpenTelemetry 实现可观测性
- 📨 **消息队列**:各种消息队列系统的统一接口
- 🛡️ **弹性机制**:熔断器、限流和重试机制
- 🦀 **纯 Rust**:无外部系统依赖,纯 Rust 实现
## 快速开始
在 `Cargo.toml` 中添加 `revoke`:
```toml
[dependencies]
revoke = "0.1"
tokio = { version = "1", features = ["full"] }
```
### 基础示例
```rust
use revoke::prelude::*;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建服务注册中心
let registry = Arc::new(MemoryRegistry::new());
// 注册服务
let service = ServiceInfo {
id: uuid::Uuid::new_v4(),
name: "user-service".to_string(),
version: "1.0.0".to_string(),
address: "127.0.0.1".to_string(),
port: 3000,
protocol: Protocol::Http,
metadata: Default::default(),
};
registry.register(service).await?;
// 查询服务
let services = registry.get_service("user-service").await?;
println!("找到 {} 个 user-service 实例", services.len());
Ok(())
}
```
## 功能标志
### 独立组件
- `gateway` - 带负载均衡的 API 网关
- `registry` - 服务注册和发现
- `config` - 配置管理
- `trace` - 分布式追踪
- `mq` - 消息队列抽象
- `resilience` - 熔断器和弹性模式
### 功能组合
- `default` = `full` - 所有功能启用
- `minimal` - 仅核心功能
- `service-mesh` - 网关 + 注册中心 + 配置 + 追踪
- `messaging` - 消息队列 + 配置
- `reliability` - 弹性 + 注册中心
### 使用示例
仅核心功能:
```toml
revoke = { version = "0.1", default-features = false }
```
服务网格组件:
```toml
revoke = { version = "0.1", default-features = false, features = ["service-mesh"] }
```
自定义选择:
```toml
revoke = { version = "0.1", default-features = false, features = ["gateway", "registry"] }
```
## 组件介绍
### API 网关
基于 Pingora 的高性能 API 网关:
```rust
use revoke::prelude::*;
use revoke::gateway::RevokeGateway;
let config = GatewayConfig {
bind: "0.0.0.0:8080".to_string(),
workers: 4,
log_level: "info".to_string(),
enable_health_check: true,
health_check_interval: 10,
backend_refresh_interval: 30,
};
let gateway = RevokeGateway::new(registry)?;
gateway.run(config)?;
```
### 服务注册中心
支持健康检查的动态服务发现:
```rust
// 开发环境使用内存注册中心
let registry = Arc::new(MemoryRegistry::new());
// 生产环境使用 Consul 注册中心
let consul_config = ConsulConfig::builder()
.address("http://localhost:8500")
.build()?;
let registry = Arc::new(ConsulRegistry::new(consul_config).await?);
```
### 配置管理
支持热重载的集中式配置:
```rust
use revoke::config::{ConfigProvider, memory::MemoryConfigProvider};
let config = Arc::new(MemoryConfigProvider::new());
config.set("database.url", "postgres://localhost/mydb").await?;
let db_url = config.get("database.url").await?;
```
### 熔断器
防止级联故障:
```rust
use revoke::resilience::{CircuitBreaker, CircuitBreakerBuilder};
let breaker = CircuitBreakerBuilder::new()
.failure_threshold(5)
.success_threshold(2)
.timeout(Duration::from_secs(60))
.build();
let result = breaker.call(async {
// 可能失败的操作
risky_operation().await
}).await?;
```
### 限流器
控制请求速率:
```rust
use revoke::resilience::{RateLimiter, RateLimiterBuilder};
let limiter = RateLimiterBuilder::new()
.requests_per_second(100.0)
.burst_size(200)
.build();
if limiter.check_key("user-123").await? {
// 处理请求
} else {
// 超出限流
}
```
## 完整示例
以下是一个完整的微服务设置示例:
```rust
use revoke::prelude::*;
use revoke::gateway::RevokeGateway;
use revoke::resilience::{CircuitBreaker, RateLimiter};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化组件
let registry = Arc::new(MemoryRegistry::new());
let config = Arc::new(MemoryConfigProvider::new());
// 配置限流器
let rate_limiter = RateLimiterBuilder::new()
.requests_per_second(1000.0)
.build();
// 配置熔断器
let circuit_breaker = CircuitBreakerBuilder::new()
.failure_threshold(5)
.build();
// 注册服务
for i in 0..3 {
let service = ServiceInfo {
id: uuid::Uuid::new_v4(),
name: "api-service".to_string(),
version: "1.0.0".to_string(),
address: "127.0.0.1".to_string(),
port: 3000 + i,
protocol: Protocol::Http,
metadata: Default::default(),
};
registry.register(service).await?;
}
// 启动网关
let gateway_config = GatewayConfig {
bind: "0.0.0.0:8080".to_string(),
workers: 4,
log_level: "info".to_string(),
enable_health_check: true,
health_check_interval: 10,
backend_refresh_interval: 30,
};
let gateway = RevokeGateway::new(registry.clone())?;
println!("在 {} 上启动 Revoke 网关", gateway_config.bind);
gateway.run(gateway_config)?;
Ok(())
}
```
## 架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ API 网关 │────▶│ 服务注册中心 │◀────│ 微服务 │
│ (Pingora) │ │ (Consul/内存) │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ ┌─────────────────┐ │
└─────────────▶│ 配置中心 │◀─────────────┘
│ (Consul/内存) │
└─────────────────┘
```
## 性能
Revoke 专为高性能设计:
- 尽可能使用零拷贝消息传递
- 全程使用 async/await 实现最佳并发
- 连接池和连接复用
- 使用 serde 进行高效序列化
- 热路径上的内存分配最小化
## 贡献
欢迎贡献!请阅读我们的[贡献指南](CONTRIBUTING.md)了解详情。
## 许可证
本项目采用以下任一许可证:
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) 或 http://opensource.org/licenses/MIT)
可自由选择。
## 致谢
- 基于 Cloudflare 的 [Pingora](https://github.com/cloudflare/pingora) 构建
- 受 Spring Cloud 和其他微服务框架启发
- 感谢 Rust 异步生态系统