mcpField
D
domain-cloud-native

domain-cloud-native

github.com/actionbook云与 DevOps1.6k2.9k 次安装9 周前更新
代码仓库

关于 domain-cloud-native

面向 Rust 云原生开发的领域参考资料,将无状态设计、可观测性和优雅关闭等约束关联到设计模式与实现方式。适用于构建服务及 Kubernetes 工作负载的开发者。

主要功能

  1. 01说明云原生设计约束
  2. 02关联约束与 Rust 实现
  3. 03列出常用 Crate
  4. 04提供健康检查与关闭模式

适用场景

  1. 01规划无状态服务架构
  2. 02为服务添加追踪与健康检查
  3. 03设计 SIGTERM 优雅关闭流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/actionbook/rust-skills --skill domain-cloud-native

安装后在 Claude Code 中输入/domain-cloud-native确认已加载。

详细介绍

云原生领域

第 3 层:领域约束

领域约束 → 设计影响

领域规则设计约束Rust 影响
12 因子从环境变量读取配置基于环境的配置
可观测性指标 + 追踪tracing + opentelemetry
健康检查存活/就绪专用端点
优雅关闭平稳终止信号处理
水平扩展无状态设计不使用本地状态
容器友好小型二进制文件发布优化

关键约束

无状态设计
RULE: No local persistent state
WHY: Pods can be killed/rescheduled anytime
RUST: External state (Redis, DB), no static mut
优雅关闭
RULE: Handle SIGTERM, drain connections
WHY: Zero-downtime deployments
RUST: tokio::signal + graceful shutdown
可观测性
RULE: Every request must be traceable
WHY: Debugging distributed systems
RUST: tracing spans, opentelemetry export

向下追溯 ↓

从约束到设计(第 2 层):

"Need distributed tracing"
    ↓ m12-lifecycle: Span lifecycle
    ↓ tracing + opentelemetry

"Need graceful shutdown"
    ↓ m07-concurrency: Signal handling
    ↓ m12-lifecycle: Connection draining

"Need health checks"
    ↓ domain-web: HTTP endpoints
    ↓ m06-error-handling: Health status

关键 Crate

用途Crate
gRPCtonic
Kuberneteskube, kube-runtime
Dockerbollard
追踪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
优雅关闭信号处理tokio::signal
追踪Span 生命周期tracing + OTEL
健康检查HTTP 端点专用路由

相关技能

场景参见
异步模式m07-concurrency
HTTP 端点domain-web
错误处理m13-domain-error
资源生命周期m12-lifecycle

评论

支持 Markdown