Melhores Práticas de Implantação
Vinte hábitos para enviar binários e contêineres Rust que sejam pequenos, reproduzíveis e observáveis.
-
Sempre
cargo build --release --lockedno CI: Artefatos de debug nunca devem chegar à produção. -
Commit
Cargo.lockpara aplicações: Implantações reproduzíveis dependem de um grafo de dependências congelado. -
Fixar
rust-versione toolchain de CI: Corresponder MSRV entre laptops de desenvolvimento e pipelines. -
Dockerfiles multi-estágio: Compilar no builder; a imagem de runtime contém apenas o binário e certificados CA.
-
Executar como não-root em contêineres:
nonrootdo Distroless ou diretivaUSERexplícita. -
Preferir rustls em vez de OpenSSL em imagens: Menos dependências nativas e menor superfície de cross-compile.
-
Expor
/healthe/ready: Liveness vs readiness devem diferir quando o DB estiver inativo. -
Desligamento gracioso em SIGTERM: Drenar requisições em andamento antes de sair (manipuladores de sinal do Tokio).
-
Configuração via ambiente: Injeção do Twelve-factor; sem segredos em imagens ou repositórios.
-
Logs JSON estruturados:
tracing-subscriberJSON para busca centralizada. -
Métricas RED em serviços HTTP: Taxa, erros, histogramas de duração exportados para Prometheus.
-
Amostrar traces distribuídos: Exportação OTLP em 1-10% a menos que esteja depurando um incidente ativo.
-
Cross-compile em matriz de CI: Construir amd64 e arm64 antes que usuários relatem binários da arquitetura errada.
-
Stripar ou usar LTO em binários de release: Imagens menores e inicializações a frio mais rápidas.
-
Executar migrações como um Job separado: Alterações de esquema concluídas antes que os novos pods do aplicativo sirvam tráfego.
-
Marcar releases com SemVer: Tags de contêiner e tags git alinhadas (
v1.2.3). -
Cache de dependências de CI:
Swatinem/rust-cacheou sccache para feedback de PR abaixo de 10 minutos. -
Falhar CI em
clippy -D warningsefmt --check: Dívida de estilo e linting bloqueia o merge. -
Documentar rollback: Tag da imagem anterior retida;
kubectl rollout undotestado trimestralmente. -
Teste de fumaça pós-implantação: Curl no endpoint de health e um caminho crítico da API a partir do CI ou monitor sintético.
FAQs
musl ou glibc em produção?
glibc em distribuições Linux padrão; musl para scratch/Alpine quando a portabilidade supera o desempenho máximo do alocador.
Blue/green ou rolling?
Rolling é o padrão no Kubernetes; blue/green quando migrações de esquema exigem reversão instantânea.
Quão pequenas devem ser as imagens?
Almejar abaixo de 50 MB comprimido para um único serviço Axum; investigar se ultrapassar 100 MB sem dependências de ML.
Binário único ou sidecar?
Manter agentes de observabilidade como sidecars da plataforma; a lógica de negócios permanece um binário Rust por serviço.
Relacionado
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4 e Polars 0.46+.