Engenharia de
DevOps
Fernando Augusto Medeiros Silva
Pipeline de
Entrega/Implantação
Quando começa a implantação
• Planejamento: Desenvolvimento Ágil, Kanban, Scrum
• Codificação: TDD, BDD, Controle de Versão
• Construção: Integração Contínua
• Implantação: Entrega Contínua
• Operação: Gestão de infraestrutura, incidentes,
Configuração, acesso...
• Feedback: Telemetria
Requisitos
• Release: Software liberado para ambiente tipo
produção
• Entregue da mesma forma em todos os ambientes:
UAT, PROD,...
• Teste de fumaça nas implantações
• Garantir a consistência entre todos os ambientes
O que precisamos para Entregar?
• Empacotar
• Aprovação
• Preparar ambiente
• Codificar • Copiar
• Compilar • Configurar
• Release • Lançar
• Entregar • Testes
O que precisamos para
Implantar?
• Empacotar
• Aprovação
• Preparar ambiente
• Codificar • Copiar software para o ambiente
• Compilar • Configurar
• Release • Lançar
• Implantar • Testes De Fumaça
• Migrar Banco de Dados
• Testes
• Remover versão anterior
Empacotar
• Reunir todos os artefatos necessários para execução
• Gestão de dependências
• Controlar versão do pacote para controle
• Armazenar o pacote
• Fazer verificação de Segurança
Empacotar
• Maven, Gradle
• Nexus, Jfrog Artifact
• Python setupTools
• Nexus, Artifact
• Docker (Funciona na minha máquina)
• Registry. Docker Hub, ECR, GCR,...
• Yarn
Empacotar
• Scan de vulnerabilidades
• Assinatura de pacotes
• Gestão de acesso
Aprovação Manual
• Sistema de Tickets
• Merge Request
• Manual Actions na pipeline
Preparação Ambiente
Preparação do Ambiente
Instalar Software
• Copiar arquivos para os sistemas do ambiente
• Backup dos arquivos anteriores
Configurar
• Integrar as configurações para início do software
• Arquivos de configuração
• Variáveis de ambiente
• Parâmetros de linha de comando
Instalação in-place
• Preparar ambiente
• Instalar/atualizar dependências
• Copiar software
• Configurar
• Reiniciar Serviços
• Testes De Fumaça
• Prova de vida /health
Ferramentas Ambiente/Config
• Chef
• Puppet
• Ansible
• SystemManager (Windows)
• CodeDeploy
Boas Praticas de Implantação
• Implantação idempotente (múltiplas aplicações não alteram
o resultado ex *1 *0)
• Torne a infraestrutura imutável
• Faça a implantação self-service
• Permita o Roll Back
• Entregue um DashBoard
• Separe o release da implantação
• Arquitete para baixo risco
Implantação idempotente
• Torne sua implantação idempotente
• Use ferramenta de controle de versão
como Ansible e Puppet
• Use um orquestrador de containers
Técnica - empacotar mais partes
do ambiente
• App e middleware
• Maquinas completas (Imagens ec2/instancias GCP)
• Imagens de containers
Uso de imagens de máquinas
• Instalação de dependências automática
• Integrar as camadas de forma separada
• Atualização pode ser possível
• Configuração automática
• Testes no pacote inteiro
• Infraestrutura imutável
• Não armazenar dados localmente
• Não faça configurações manuais
• A máquina torna-se descartável
Imagens de máquinas
• Ansible
• Packer
• AWS EC2 Image Builder
Uso de Containers
• Integração de todos as camadas de uma só vez
• Configuração separada da imagem
• Implantação em múltiplos hardwares
• Infraestrutura imutável
• Estado da arte
Ferramentas
• Builders
• Docker build
• Kaniko
• Orquestradores
• Kubernetes
• ECS
Implantação self-service
• Implantação com 1 botão
• Permita rollback com 1 botão
• Acompanhamento da implantação com dashboard
• Registro de histórico de implantação
• Lembre-se dos testes de fumaça
Separe o Release da implantação
• Release é a liberação para uso por parte dos usuários
• Implantação é a instalação e execução do software
em determinado ambiente
• Desacoplamento por ambiente
• Desacoplamento por aplicativo
Separação por ambiente
Ferramentas de separação por
ambiente
• BlueGreen: AWS CodeDeploy, KF (GCP cloudFoundry).
Pode ser necessário construir a sua
• Canary Deploy: AWS tem um padrão utilizando vários
componentes
• Para todos os casos existe Kubernetes
Fonte: amazon.com
Implantações por ambiente com
Kubernetes
• BlueGreen: Deploy nativo
• Canary-Deploy: argo-rollouts, flagger
Fonte: argoproject.org
Separação por aplicativo -
Feature Flags
• Técnica de habilitar ou desabilitar funcionalidade
• Permite lançamento no escuro e granulares
• Permitem Desativar Partes do sistema em
momentos críticos
• Permitem Testes A/B
• Permite segmentação de funcionalidade por
classes
Ferramentas
• LaunchDarkly: Foco em empresas de grande porte com
necessidades complexas de feature flags.
• Optimizely: Melhor para equipes de marketing e produto focadas
em experimentação e personalização.
• Unleash: : Flexibilidade de hospedagem, podendo ser usado
tanto como serviço hospedado quanto self-hosted
• ConfigCat: Ideal para PMEs por sua simplicidade e custo-
efetividade.
Arquitetar para Baixo Risco
Resiliência arquitetural
• Circuit breaker
• BulkHead
• RateLimit
• Arquitetura de microserviços
Circuit Breaker
• Degradação controlada
• Protege o ambiente principalmente MS
• Ajuda na contenção do blast radius
• Ferramentas
• Hystrix
• Resilience4J
• Istio
Rate Limit
• Aplicações compartilhadas
• Acordo de nível de serviço
• Normalmente implementado nos api-gateways
• Kong
• Traefik
• iStio (requer instalação e configuração a parte)
Arquétipos arquitetônicos
O termo "Arquitetura de Microsserviços" surgiu nos últimos
anos para descrever uma maneira particular de projetar
aplicações de software como conjuntos de serviços
independentemente implantáveis.
Martin Fowler
Fonte: microservices.io
Vantagens
• Times pequenos
• Ciclos separados de desenvolvimento
• Ciclos separados de operação
• Ciclos de testes separados
• Escalabilidade independente
• Permite uso de múltiplas tecnologias
• Melhor uso de tecnologias como Docker/Kubernetes
DesVantagens
• Ciclos separados de desenvolvimento
• Ciclos separados de operação
• Ciclos de testes separados
• Permite uso de múltiplas tecnologias
• Complexidade (literalmente)
• Telemetria Distribuída
• Rede
• Rede!
DesVantagens
• Ciclos separados de desenvolvimento
• Ciclos separados de operação
• Ciclos de testes separados
• Permite uso de múltiplas tecnologias
• Complexidade (literalmente)
• Telemetria Distribuída
• Rede
• Rede!
DesVantagens
• A rede é confiável
• A latência é zero
• A largura de banda é infinita
• A rede é segura
• A topologia não muda
• Há um administrador
• O custo de transporte é zero
• A rede é homogênea
Fonte: microservices.io