Cloud-native development
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