name: domain-cloud-native
description: “用于构建云原生应用。关键词:kubernetes, k8s, docker, container, grpc, tonic, microservice, service mesh, observability, tracing, metrics, health check, cloud, deployment, 云原生, 微服务, 容器”
user-invocable: false
云原生领域
第3层:领域约束
领域约束 → 设计影响
| 领域规则 |
设计约束 |
Rust 实现含义 |
| 12要素应用 |
配置来自环境 |
基于环境的配置 |
| 可观测性 |
指标 + 追踪 |
tracing + opentelemetry |
| 健康检查 |
存活/就绪探针 |
专用端点 |
| 优雅关闭 |
清理终止 |
信号处理 |
| 水平扩展 |
无状态设计 |
无本地状态 |
| 容器友好 |
小体积二进制文件 |
发布优化 |
关键约束
无状态设计
规则:无本地持久化状态
原因:Pod 可能随时被终止/重新调度
RUST:外部状态(Redis, DB),不使用静态可变变量
优雅关闭
规则:处理 SIGTERM,排干连接
原因:零停机部署
RUST:tokio::signal + 优雅关闭
可观测性
规则:每个请求必须可追踪
原因:调试分布式系统
RUST:tracing spans, opentelemetry 导出
向下追踪 ↓
从约束到设计(第2层):
"需要分布式追踪"
↓ m12-lifecycle: Span 生命周期
↓ tracing + opentelemetry
"需要优雅关闭"
↓ m07-concurrency: 信号处理
↓ m12-lifecycle: 连接排干
"需要健康检查"
↓ domain-web: HTTP 端点
↓ m06-error-handling: 健康状态
关键 Crate
| 用途 |
Crate |
| gRPC |
tonic |
| Kubernetes |
kube, kube-runtime |
| Docker |
bollard |
| 追踪 |
tracing, opentelemetry |
| 指标 |
prometheus, metrics |
| 配置 |
config, figment |
| 健康检查 |
HTTP 端点 |
设计模式
| 模式 |
目的 |
实现 |
| gRPC 服务 |
服务网格 |
tonic + tower |
| K8s 操作符 |
自定义资源 |
kube-runtime Controller |
| 可观测性 |
调试 |
tracing + OTEL |
| 健康检查 |
编排 |
/health, /ready |
| 配置 |
12要素应用 |
环境变量 + 密钥 |
代码模式:优雅关闭
use tokio::signal;
async fn run_server() -> anyhow::Result<()> {
let app = Router::new()
.route("/health", get(health))
.route("/ready", get(ready));
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.with_graceful_shutdown(shutdown_signal())
.await?;
Ok(())
}
async fn shutdown_signal() {
signal::ctrl_c().await.expect("failed to listen for ctrl+c");
tracing::info!("shutdown signal received");
}
健康检查模式
async fn health() -> StatusCode {
StatusCode::OK
}
async fn ready(State(db): State<Arc<DbPool>>) -> StatusCode {
match db.ping().await {
Ok(_) => StatusCode::OK,
Err(_) => StatusCode::SERVICE_UNAVAILABLE,
}
}
常见错误
| 错误 |
违反领域规则 |
修复方法 |
| 本地文件状态 |
非无状态 |
外部存储 |
| 无 SIGTERM 处理 |
硬终止 |
优雅关闭 |
| 无追踪 |
无法调试 |
tracing spans |
| 静态配置 |
非12要素应用 |
环境变量 |
追踪到第1层
| 约束 |
第2层模式 |
第1层实现 |
| 无状态 |
外部状态 |
Arc<Client> 用于外部 |
| 优雅关闭 |
信号处理 |
tokio::signal |
| 追踪 |
Span 生命周期 |
tracing + OTEL |
| 健康检查 |
HTTP 端点 |
专用路由 |
相关技能
| 何时 |
参见 |
| 异步模式 |
m07-concurrency |
| HTTP 端点 |
domain-web |
| 错误处理 |
m13-domain-error |
| 资源生命周期 |
m12-lifecycle |