domain-cloud-native

Use when building cloud-native apps. Keywords: kubernetes, k8s, docker, container, grpc, tonic, microservice, service mesh, observability, tracing, metrics,…

INSTALLATION
npx skills add https://github.com/actionbook/rust-skills --skill domain-cloud-native
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

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
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card