GitScrum / Docs
Todas as Boas Práticas

Desenvolvimento Cloud-Native | Containers e Kubernetes

Aplicações 12-factor, conteinerização Docker, orquestração Kubernetes e GitOps. GitScrum rastreia migrações cloud, pipelines de deploy e mudanças de infraestrutura.

14 min de leitura

O desenvolvimento nativo da nuvem foca na construção de aplicações que aproveitam a escalabilidade, resiliência e benefícios operacionais das plataformas de nuvem. O GitScrum permite que as equipes rastreiem migrações para a nuvem, mudanças de infraestrutura e pipelines de implantação em arquiteturas nativas da nuvem.

Fundamentos do desenvolvimento nativo da nuvem

As aplicações nativas da nuvem são projetadas para explorar todo o potencial da computação em nuvem por meio de arquiteturas escaláveis, resilientes e observáveis. Essa abordagem difere das aplicações tradicionais ao adotar padrões e práticas específicos da nuvem.

Metodologia de aplicações de doze fatores

Base de código: Uma base de código rastreada no controle de versão, muitas implantações Dependências: Declarar e isolar dependências explicitamente Configuração: Armazenar configuração no ambiente, não no código Serviços de apoio: Tratar serviços de apoio como recursos anexados Construir, liberar, executar: Separar estritamente os estágios de construção e execução Processos: Executar a aplicação como um ou mais processos sem estado Vinculação de porta: Exportar serviços via vinculação de porta Concorrência: Escalar via modelo de processo Descartabilidade: Maximizar robustez com inicialização rápida e desligamento gracioso Paridade dev/prod: Manter desenvolvimento, preparação e produção o mais similares possível Logs: Tratar logs como fluxos de eventos Processos administrativos: Executar tarefas administrativas/gerenciais como processos únicos

Conteinerização e orquestração

Conteinerização com Docker

Ciclo de vida do contêiner:

Código Fonte ──► Dockerfile ──► Imagem Docker ──► Registro de Contêiner ──► Implantação
      │              │              │              │              │
      ▼              ▼              ▼              ▼              ▼
  Aplicação     Instruções de Construção  Pacote Portátil  Controle de Versão  Ambiente de Execução
  & Dependências  para Contêiner      com Todas as Deps     & Distribuição   & Escalabilidade

Melhores práticas para Dockerfile:

# Use imagens base específicas
FROM node:18-alpine

# Defina o diretório de trabalho
WORKDIR /app

# Copie arquivos de pacote primeiro para melhor cache
COPY package*.json ./
RUN npm ci --only=production

# Copie código da aplicação
COPY . .

# Use usuário não-root
USER node

# Exponha porta
EXPOSE 3000

# Verificação de saúde
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

# Comando de início
CMD ["npm", "start"]

Orquestração com Kubernetes

Padrão de implantação de pod:

Implantação ──► ReplicaSet ──► Pods ──► Contêineres
     │              │            │            │
     │              ▼            ▼            ▼
     └─► Serviço ──► Endpoints ──► Contêineres ──► Aplicação

Gerenciamento de recursos do Kubernetes:

  • Implantações: Atualizações declarativas de aplicações
  • Serviços: Abstração de rede para pods
  • ConfigMaps/Secrets: Gerenciamento de configuração
  • PersistentVolumes: Abstração de armazenamento
  • Ingress: Gerenciamento de acesso externo

Microsserviços na nuvem nativa

Implementação de service mesh

Arquitetura de service mesh Istio:

Pods de Aplicação ──► Proxy Sidecar (Envoy) ──► Plano de Controle do Service Mesh
        │                        │                        │
        ▼                        ▼                        ▼
  Lógica de Negócios         Gerenciamento de Tráfego         Configuração
  & Processamento de Dados      & Observabilidade         & Políticas de Segurança

Benefícios do service mesh:

  • Descoberta de serviço transparente e balanceamento de carga
  • Observabilidade integrada com rastreamento distribuído
  • Segurança com mTLS mútuo e autorização
  • Gerenciamento de tráfego com implantações canary e circuit breakers

Padrões de API gateway

API gateway Kong:

Cliente ──► API Gateway ──► Autenticação ──► Limitação de Taxa ──► Roteamento ──► Serviços
   │              │              │                    │              │            │
   │              ▼              ▼                    ▼              ▼            ▼
   └─► Tráfego Externo ──► Validação JWT ──► Verificações de Cota ──► Balanceamento ──► Microsserviços

Responsabilidades do gateway:

  • Roteamento e composição de solicitações
  • Autenticação e autorização
  • Limitação de taxa e controle
  • Transformação de solicitação/resposta
  • Cache e otimização de desempenho

Entrega contínua na nuvem

Fluxo de trabalho GitOps

Git como fonte da verdade:

Desenvolvedor ──► Commit Git ──► Pipeline CI ──► Construção de Imagem ──► Repositório GitOps ──► ArgoCD ──► Cluster
    │              │              │              │              │              │            │
    │              ▼              ▼              ▼              ▼              ▼            ▼
    └─► Mudanças de Código ──► Testes Automatizados ──► Verificação de Segurança ──► Atualização de Manifesto ──► Sincronização ──► Implantação

Princípios do GitOps:

  • Configuração declarativa armazenada no Git
  • Implantação automatizada a partir do estado do Git
  • Agentes de software garantem que o estado real corresponda ao desejado
  • Modelo de implantação baseado em pull para segurança

Infraestrutura como código

Implantação na nuvem com Terraform:

resource "aws_ecs_cluster" "app_cluster" {
  name = "production-cluster"
}

resource "aws_ecs_service" "app_service" {
  name            = "app-service"
  cluster         = aws_ecs_cluster.app_cluster.id
  task_definition = aws_ecs_task_definition.app.arn
  desired_count   = 3

  load_balancer {
    target_group_arn = aws_lb_target_group.app.arn
    container_name   = "app"
    container_port   = 3000
  }
}

Melhores práticas de IaC:

  • Controle de versão do código de infraestrutura
  • Use módulos para componentes reutilizáveis
  • Implemente testes automatizados para infraestrutura
  • Planeje gerenciamento de estado e bloqueio
  • Documente mudanças de infraestrutura e justificativas

Segurança nativa da nuvem

Arquitetura de confiança zero

Proxy com reconhecimento de identidade:

Usuário ──► Provedor de Identidade ──► Token JWT ──► API Gateway ──► Service Mesh ──► Serviços
   │              │              │              │              │              │
   │              ▼              ▼              ▼              ▼              ▼
   └─► Autenticação ──► Autorização ──► Validação de Solicitação ──► mTLS ──► Lógica de Negócios

Princípios de segurança:

  • Nunca confiar, sempre verificar
  • Usar acesso de menor privilégio
  • Assumir violação e segmentar redes
  • Criptografar dados em trânsito e em repouso
  • Implementar monitoramento abrangente

Gerenciamento de segredos

Operador de segredos externos:

Segredo Kubernetes ──► Operador de Segredos Externos ──► Armazenamento de Segredos (AWS/GCP/Azure)
         │                        │                        │
         │                        ▼                        ▼
         └─► Pods de Aplicação ──► Montar Segredos ──► Usar na Aplicação

Estratégias de gerenciamento de segredos:

  • Use serviços gerenciados de segredos (AWS Secrets Manager, GCP Secret Manager)
  • Rotacione segredos regularmente com automação
  • Implemente versionamento de segredos e reversão
  • Audite acesso e uso de segredos
  • Separe segredos por ambiente e aplicação

Observabilidade e monitoramento

Pilha de observabilidade nativa da nuvem

Três pilares da observabilidade:

Logs ──► Logging Estruturado ──► Coleta Centralizada ──► Análise & Alertas
Métricas ──► Dados de Séries Temporais ──► Agregação & Armazenamento ──► Dashboards & Alertas
Rastreamentos ──► Rastreamento Distribuído ──► Correlação de Solicitações ──► Análise de Desempenho

Ferramentas de monitoramento:

  • Prometheus: Coleta de métricas e alertas
  • Grafana: Visualização e dashboards
  • Jaeger/OpenTelemetry: Rastreamento distribuído
  • ELK Stack: Agregação e análise de logs
  • Fluentd/Fluent Bit: Envio e processamento de logs

Alertas e resposta a incidentes

Hierarquia de alertas:

Crítico ──► Notificar engenheiro de plantão imediatamente
Aviso ──► Criar ticket para investigação
Info ──► Registrar para análise de tendências

Processo de resposta a incidentes:

  • Alerta dispara com base em limites de monitoramento
  • Diagnóstico automatizado e resposta inicial
  • Investigação humana e análise de causa raiz
  • Comunicação com stakeholders
  • Resolução e análise post-mortem
  • Implementação de medidas preventivas
  • Computação serverless

    Função como serviço (FaaS)

    Implantação AWS Lambda:

    Código ──► Pacote ──► Upload ──► Configurar Gatilhos ──► Implantar Função
      │        │          │              │                    │
      │        ▼          ▼              ▼                    ▼
      └─► Fontes de Eventos ──► API Gateway ──► CloudWatch ──► Auto Scaling
    

    Benefícios do serverless:

    • Sem gerenciamento ou provisionamento de servidor
    • Escalabilidade automática baseada na demanda
    • Modelo de preços por execução
    • Alta disponibilidade e tolerância a falhas integradas
    • Overhead operacional reduzido

    Desafios do serverless

    Latência de inicialização a frio:

    • Latência inicial de solicitação devido à inicialização da função
    • Mitigação com concorrência provisionada
    • Considere impacto na arquitetura da aplicação
    Bloqueio de fornecedor:
    • Serviços e APIs específicos da plataforma
    • Complexidade de migração entre provedores
    • Dependência de serviços do provedor de nuvem

    Bancos de dados nativos da nuvem

    Serviços de bancos de dados gerenciados

    Opções de banco de dados como serviço:

    RDBMS Tradicional ──► Amazon RDS, Google Cloud SQL, Azure Database
    Bancos NoSQL ──► DynamoDB, Firestore, Cosmos DB
    Data Warehouses ──► Redshift, BigQuery, Snowflake
    Serviços de Cache ──► ElastiCache, Memorystore, Azure Cache
    

    Critérios de seleção de banco de dados:

    • Requisitos do modelo de dados (relacional, documento, grafo, etc.)
    • Necessidades de escalabilidade e desempenho
    • Requisitos de consistência e disponibilidade
    • Oportunidades de otimização de custos
    • Integração com pilha de aplicação

    Migração de banco de dados para nuvem

    Estratégias de migração:

    • Lift and shift: Migração direta com mudanças mínimas
    • Replatform: Otimizações menores para nuvem
    • Refactor: Mudanças significativas de arquitetura
    • Rebuild: Reescrita completa para nativo da nuvem
    Fases de migração:
  • Avaliação e planejamento
  • Migração de esquema e dados
  • Atualizações de código da aplicação
  • Testes e validação
  • Go-live e monitoramento
  • Otimização de custos na nuvem

    Gerenciamento de custos na nuvem

    Alocação e rastreamento de custos:

    Recursos ──► Tags de Alocação de Custos ──► Cost Explorer ──► Alertas de Orçamento ──► Otimização
         │              │                        │              │              │
         │              ▼                        ▼              ▼              ▼
         └─► Estratégia de Marcação ──► Análise de Uso ──► Relatórios de Custos ──► Dimensionamento Correto
    

    Técnicas de otimização de custos:

    • Instâncias reservadas: Compromisso a longo prazo para descontos
    • Instâncias spot: Use capacidade sobressalente para cargas não críticas
    • Auto scaling: Escalar recursos com base na demanda
    • Camadas de armazenamento: Mover dados para classes de armazenamento mais baratas
    • Limpeza de recursos: Remover recursos não utilizados automaticamente

    Práticas FinOps

    Integração de operações financeiras:

    • Incluir custos em decisões de arquitetura
    • Definir orçamentos e controles de custos
    • Monitorar tendências e anomalias de custos
    • Implementar práticas de desenvolvimento conscientes de custos
    • Revisões regulares de otimização de custos

    Cultura de equipe nativa da nuvem

    Práticas DevOps e SRE

    Engenharia de confiabilidade de site:

    Objetivos de Nível de Serviço (SLOs) ──► Orçamentos de Erro ──► Trabalho de Confiabilidade ──► Resposta a Incidentes
                  │                              │                    │                    │
                  ▼                              ▼                    ▼                    ▼
            Metas de Disponibilidade           Tolerância a Falhas     Confiabilidade Proativa  Cultura sem Culpa
            & Metas de Desempenho            & Gerenciamento de Riscos     & Monitoramento          & Aprendizado
    

    Elementos da cultura DevOps:

    • Responsabilidade compartilhada por operações
    • Mentalidade de melhoria contínua
    • Automação de tarefas repetitivas
    • Colaboração entre desenvolvimento e operações
    • Aprendizado com falhas e incidentes

    Habilidades de equipe nativa da nuvem

    Competências necessárias:

    • Infraestrutura como código e automação
    • Conteinerização e orquestração
    • Serviços e APIs de plataforma de nuvem
    • Ferramentas de monitoramento e observabilidade
    • Melhores práticas de segurança para nuvem
    • Otimização de custos e FinOps

    Migração para nativo da nuvem

    Avaliação e planejamento

    Análise de portfólio de aplicações:

    Aplicações ──► Avaliação de Complexidade ──► Preparação para Nuvem ──► Prioridade de Migração ──► Cronograma
           │                │                        │                    │              │
           │                ▼                        ▼                    ▼              ▼
           └─► Pilha Tecnológica ──► Dependências ──► Valor de Negócios ──► Nível de Risco ──► Recursos
    

    Fatores de preparação para migração:

    • Arquitetura de aplicação e dependências
    • Complexidade e volume de migração de dados
    • Requisitos de segurança e conformidade
    • Necessidades de desempenho e escalabilidade
    • Requisitos de habilidades e treinamento da equipe

    Abordagem de migração incremental

    Padrão strangler fig:

    Monolito ──► Extração de Funcionalidades ──► Criação de Microsserviço ──► API Gateway ──► Roteamento de Tráfego
         │              │                        │                    │              │
         │              ▼                        ▼                    ▼              ▼
         └─► Identificar Contexto Delimitado ──► Criar Novo Serviço ──► Implementar API ──► Migração Gradual
    

    Fases de migração:

  • Avaliação: Avaliar estado atual e preparação
  • Fundação: Configurar infraestrutura e ferramentas de nuvem
  • Migração: Mover aplicações incrementalmente
  • Otimização: Ajustar desempenho e custos
  • Inovação: Aproveitar capacidades nativas da nuvem
  • Integração GitScrum para nativo da nuvem

    Rastreamento de infraestrutura na nuvem

    Gerenciamento de mudanças de infraestrutura:

    • Rastrear implantações e mudanças de infraestrutura
    • Monitorar utilização de recursos na nuvem
    • Gerenciar dívida técnica de infraestrutura
    • Coordenar implantações multi-serviço
    Monitoramento de custos e recursos:
    • Rastrear gastos na nuvem por projeto e equipe
    • Monitorar uso e eficiência de recursos
    • Identificar oportunidades de otimização de custos
    • Planejar necessidades de capacidade e escalabilidade

    Gerenciamento de pipeline de implantação

    Rastreamento de fluxo de trabalho CI/CD:

    • Monitorar status de construção e implantação
    • Rastrear frequência e taxas de sucesso de implantação
    • Gerenciar coordenação de lançamentos entre serviços
    • Implementar procedimentos de reversão automatizados
    Gerenciamento de portões de qualidade:
    • Rastrear resultados de testes automatizados
    • Monitorar resultados de verificações de segurança
    • Gerenciar fluxos de trabalho de aprovação para implantações
    • Garantir conformidade com padrões de implantação

    Melhores práticas para desenvolvimento nativo da nuvem

    Princípios de arquitetura

    Design para falha:

    • Implementar circuit breakers e retentativas
    • Usar verificações de saúde e degradação graciosa
    • Projetar para consistência eventual
    • Implementar tratamento adequado de erros e logging
    Segurança por design:
    • Implementar princípios de confiança zero
    • Usar criptografia em todos os lugares
    • Implementar acesso de menor privilégio
    • Avaliações regulares de segurança e atualizações

    Excelência operacional

    Automação em primeiro lugar:

    • Automatizar implantações e infraestrutura
    • Implementar testes e monitoramento automatizados
    • Usar política como código para conformidade
    • Automatizar resposta a incidentes quando possível
    Melhoria contínua:
    • Revisões regulares de arquitetura
    • Otimização de desempenho e custos
    • Aprimoramento de postura de segurança
    • Desenvolvimento e treinamento de habilidades da equipe

    Desafios comuns e soluções

    Desafios de escalabilidade

    Escalabilidade de banco de dados:

    • Implementar réplicas de leitura para cargas pesadas de leitura
    • Usar fragmentação de banco de dados para aplicações pesadas de escrita
    • Considerar NoSQL para casos específicos
    • Implementar estratégias de cache
    Escalabilidade de aplicação:
    • Projetar aplicações sem estado
    • Usar auto scaling horizontal de pods
    • Implementar processamento baseado em fila
    • Usar CDN para conteúdo estático

    Desafios de confiabilidade

    Dependências de serviço:

    • Implementar padrões de circuit breaker
    • Usar service mesh para resiliência
    • Implementar lógica adequada de timeout e retentativa
    • Projetar para degradação graciosa
    Consistência de dados:
    • Usar padrões saga para transações distribuídas
    • Implementar sourcing de eventos quando apropriado
    • Projetar para consistência eventual
    • Usar transações compensatórias para falhas

    Tendências futuras no nativo da nuvem

    Tecnologias emergentes

    Evolução do service mesh:

    • Integração com WebAssembly (WASM)
    • Segurança aprimorada com SPIFFE/SPIRE
    • Suporte multi-cluster e multi-nuvem
    • Integração com plataformas serverless
    Computação de borda:
    • Implantação distribuída de aplicações
    • Latência reduzida para usuários globais
    • Integração com IoT e dispositivos móveis
    • Computação preservadora de privacidade

    Evolução da plataforma

    Crescimento do ecossistema Kubernetes:

    • Experiência aprimorada de desenvolvedor com ferramentas como Tilt
    • Adoção de GitOps com ferramentas como Flux e ArgoCD
    • Integração de service mesh (Istio, Linkerd)
    • Segurança e gerenciamento de política aprimorados
    Inovação de provedor de nuvem:
    • Contêineres e funções serverless
    • Integração de IA/ML e serviços gerenciados
    • Ferramentas aprimoradas de segurança e conformidade
    • Soluções multi-nuvem e híbridas

    Soluções Relacionadas