mcpField
D
domain-cloud-native

domain-cloud-native

github.com/actionbookCloud & DevOps1.6k2.9k installsUpdated 9w ago
Repository

About domain-cloud-native

A domain reference for Rust cloud-native development, linking constraints such as statelessness, observability, and graceful shutdown to design patterns and implementation approaches. It is for developers building services and Kubernetes workloads.

Key features

  1. 01Describe cloud-native constraints
  2. 02Map constraints to Rust implementations
  3. 03List commonly used crates
  4. 04Show health-check and shutdown patterns

Use cases

  1. 01Plan a stateless service architecture
  2. 02Add tracing and health checks to a service
  3. 03Design graceful shutdown on SIGTERM

Install

Copy the command and run it in a terminal.

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

After installing, type/domain-cloud-nativein Claude Code to confirm it loaded.

Details

From the project README

Cloud-Native Domain

Layer 3: Domain Constraints

Domain Constraints → Design Implications

Domain RuleDesign ConstraintRust Implication
12-FactorConfig from envEnvironment-based config
ObservabilityMetrics + tracestracing + opentelemetry
Health checksLiveness/readinessDedicated endpoints
Graceful shutdownClean terminationSignal handling
Horizontal scaleStateless designNo local state
Container-friendlySmall binariesRelease optimization

Critical Constraints

Stateless Design
RULE: No local persistent state
WHY: Pods can be killed/rescheduled anytime
RUST: External state (Redis, DB), no static mut
Graceful Shutdown
RULE: Handle SIGTERM, drain connections
WHY: Zero-downtime deployments
RUST: tokio::signal + graceful shutdown
Observability
RULE: Every request must be traceable
WHY: Debugging distributed systems
RUST: tracing spans, opentelemetry export

Trace Down ↓

From constraints to design (Layer 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

Key Crates

PurposeCrate
gRPCtonic
Kuberneteskube, kube-runtime
Dockerbollard
Tracingtracing, opentelemetry
Metricsprometheus, metrics
Configconfig, figment
HealthHTTP endpoints

Design Patterns

PatternPurposeImplementation
gRPC servicesService meshtonic + tower
K8s operatorsCustom resourceskube-runtime Controller
ObservabilityDebuggingtracing + OTEL
Health checksOrchestration/health, /ready
Config12-factorEnv vars + secrets

Code Pattern: Graceful Shutdown

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");
}

Health Check Pattern

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,
    }
}

Common Mistakes

MistakeDomain ViolationFix
Local file stateNot statelessExternal storage
No SIGTERM handlingHard killsGraceful shutdown
No tracingCan't debugtracing spans
Static configNot 12-factorEnv vars

Trace to Layer 1

ConstraintLayer 2 PatternLayer 1 Implementation
StatelessExternal stateArc for external
Graceful shutdownSignal handlingtokio::signal
TracingSpan lifecycletracing + OTEL
Health checksHTTP endpointsDedicated routes

Related Skills

WhenSee
Async patternsm07-concurrency
HTTP endpointsdomain-web
Error handlingm13-domain-error
Resource lifecyclem12-lifecycle

Comments

Markdown supported