EXIN - DEVOPS PROFESSIONAL
Três maneiras:
Fluxo, Feedback, Aprendizado contínuo.
Fluxo: Desenvolvimento rápido - Esquerda para a direita
Feedback: Rapidamente da Direita apara a esquerda
Aprendizado contínuo: Cultura de experiencia, experimentação e tomada de risco
DevOps é um conjunto de melhores práticas que enfatizam a colaboração e a
comunicação de profissionais de TI no clico de vida de aplicações e serviços.
Conceitos básicos do DevOps:
Implantação contínua
Infraestrutura ágil
Kata
WIP
Débito técnico
Lead time
Lean (enxuto): Filosofia de gestão baseado na Toyota - Evitar desperdícios
Toyota Kata: Rotinas de ensino para preservar e passar conhecimento.
Movimentos repetidos exaustivamente para fixação
Kanban: Gestão de fluxo de trabalho de forma bem visual
WIP (work in progress): Tarefa que está em execução (coluna DOING do Kanban).
Boa prática de limitar quantidade de trabalho simultaneo
-Valor: Benefício gerado pelo produto ou serviço ao cliente
-Fluxo de Valor: Converter hipotese em produto ou serviço
Mapa de fluxo de valor: Identificar desperdícios
Lead time: Mede o tempo de execução de cada etapa
Process time: Mede somente o tempo trabalhado em cada etapa/atividade (work
time)
Percent complete and accurate (%C/A): Mede qualidade da entrega
Se não houve retrabalho, o %C/A é 100%
Se houver 10% de retrabalho, o %C/A é 90%
-Fluxo
-Produção Puxada
-Perfeição
Manifesto ágil
4 valores:
-Indivíduos e interações entre eles mais que processos e ferramentas
-Software em funcionamento mais que documentação abrangente
-Colaboração com o cliente mais que negociação de contratos
-Responder a mudanças mais que seguir um plano
12 princípios:
1 Nossa maior prioridade é satisfazer o cliente através da entrega contínua e
adiantada de software com valor agregado
2 Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis
se adequam a mudanças, para que o cliente possa tirar vantagens competitivas
3 Entregar frequentemente software funcionando, de poucas semanas a poucos meses,
com preferencia a menor escala de tempo4
4 Pessoas de negócio e desenvolvedores devem trabalhar diariamente em conjunto por
todo o projeto
5 Construir projetos em torno de indivíduos motivados. Dando a eles o ambiente e o
suporte necessário, e confiando neles para fazer o trabalho
6 O método mais eficiente e eficaz de transmitir informações para e entre uma
equipe de desenvolvimento é através de conversa face a face
7 Software funcionando é a medida primária de progesso
8 Os processos ágeis promovem desenvolvimento sustentável. Os patrocinadores,
desenvolvedores e usuários devem ser capazes de manter um ritmo constante
indefinidamente
9 Contínua atenção a excelencia técnica e bom design aumenta a agilidade
10 Simplicidade: A arte de maximizar a quantidade de trabalho não realizado é
essencial
11 As melhores arquiteturas, requisitos e designs emergem de times auto
organizáveis
12 Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e
então refina e ajusta seu comportamento de acordo
Infraestrutura ágil
Pipeline de implantação
É a sequencia de atividades automatizadas para levar o código da máquina do
desenvolvedor para o ambiente de produção. Essa expressão é uma abstração que
envolve os processos de:
Integração contínua
Entrega contínua
Implantação contínua
A entrega contínua é a extensão da integração contínua. Permite mais testes,
implementações, integração entre áreas.
Ela garante que tanto o código quanto e infraestrura estejam sempre em um estado
implantável.
Implantação contínua garante que o código assim que entregue em um repositório,
possa ser implementado em produção automaticamente, sem intervenção manual.
Débito técnico: Custo de retrabalho
A primeira maneira: Fluxo
Esquerda -> Direita
Dev -> Ops
-Tornar o trabalho visivel
Kanban
-Limitar WIP
Limitar a quantidade de quadros de trabalhos simultaneos (Kanban)
-Reduzir o tamanho do lote de trabalho
Limitar o trabalho a uma atividade por vez
-Reduzir o número de transferências
-Identificar e melhorar as restrições
-Eliminar atritos e desperdicios no fluxo de valor
-Reduzir o numero de transferencias de informação, para evitar perdas por ruídos
-Identificar e mitigar as restrições: Reduzir lead time e aumentar o throughput
Principais restrições:
Criação de ambientes
Implementação de código
Execução de testes
Arquitetura altamente acoplada
No lean, desperdício é qualquer coisa que gere atraso na entrega
Segunda maneira: Feedback (Direita -> Esquerda)
Ver os problemas à medida que eles ocorrem (criação de processos automatizados)
Andon Cord: Resolver os problemas em conjunto
-Feedback rapido
-Rapidez no diagnóstico e resolução
-Foco na solucao
-Previnir que a falha ocorra novamente
-Aprendizado
-Evita esquecimentos ou outros fatores que tornem dificil encontra a
causa raiz
Controle de qualidade:
Aplicar Peer Reviews em mudanças
Automação de todo o trabalho possível
Testes sob demanda
Otimize o trabalho pensando na próxima etapa do fluxo
Terceira maneira: Aprendizado contínuo e experimentação
-Criar Aprendizado organizacional
-Criar uma cultura de segurança
"Ao remover a culpa, voce remove o medo; Removendo o medo, voce permite
a honestidade; E a honestidade permite a prevenção." -Bethany Macri
Blameless Post-Mortem*
-Institucionalizar a melhoria do trabalho diário
Kaizen Blitzes - Foco em solução de débito técnico
-Transformar descobertas locais em melhorias globais
Tornar relatorios de Blameless Post-Mortem acessivel a todos
KBs e repositorios compartilhados
-Adicionar testes de resiliencia no trabalho diario
Game days: Simular falhas em larga escala
Injetar problemas na infraestrutura para avaliar o comportamento, vizando melhorias
Adicionar resiliencia ao trabalho diário
-Líderes devem reforçar uma cultura de Aprendizado
Organização de empresas voltadas para DevOps
A chave é o fluxo de valor
Greenfield - Novo projeto de software
Brownfield - Produto ou servico ja existente - Geralmente vem com divida técnica
System of Registry (SoR) - Sistemas que suportam o negócio (criticos)
Tipo 1 - As empresas preferem fazer da forma correta do que da forma rápida
System of Engagement (SoE) - Não primordiais
Tipo 2 - Contrario do tipo 1
Recomendação para adoção DevOps - Começar com times mais bem dispostos e inovadores
(early adopters)
Identifique o time que suportará seu fluxo de valor
-Product Owners
-Development
-QA
-Operations
-Infosec
-Release managers
-Technology executives or value stream managers
*Criar um time 100% dedicado a transformação
Crie um espaço separado para este time (junto e isolado, livre de algumas regras e
políticas)
Arquétipos organizacionais
-Organizacao orientadas por funcao
-Organizacao orientadas por mercado ou Produto
-Organizacao matricial
Perfis de profissionais
I-Shaped - Especialista
T-Shaped - Generalista
E-Shaped - Alem de experiencia em varias areas tem especialidade em mais de
uma área (Maior aderencia com DevOps)
Conway's Law - Sistemas desenvolvidos de acordo com a organizaçao (mais rigida ou
flexivel)
Manter Ops perto, atraves de daily meetings, ver o trabalho de Ops em Kanban
Vantagem da regra Two-Pizza Team:
-Compreensão mais clara do processo
-Limita taxa de crescimento do produto/servico
-Descentralização do poder e autonomia
-Revezamento da liderança gerando mais experiencia
A primeira maneira: O Fluxo
Pipeline de implantação
Ambientes identicos ao de produção
Ambientes Self-Service
Recursos para automatização:
Vmware, EC2, vagrant
Bare metal - PXE
Puppet, Ansible, Chef, Salt..
Containers
Nuvem publica, privada ou paas
Benefício do container no pipeline de implantação: Dar uma stack identica para o
desevvolvedor testar seu código
Repositório unico para todo o Ambiente:
Codigo e dependencias
Scripts para schemas de banco
ferramentas e configuracao de infra as a code
dockerfile, dockercompose
manuais
scripts para deploy
arquivos de configuracao de cloud
scripts da infraestrutura (dns, firewall...)
DoD - Definition of Done - Definicao de Pronto
Otinizando o fluxo de valor
Elinine ou automatize:
Comunicacoes
Aprovacoes
Colaboracao
Trabalhe com Containers
Trabalhe IaaC
Use repositorios compartilhados
Adapte o DoD
De muita atencao ao %C/A no fluxo de valor
Use ferramental para construcao de Ambientes
Automação de Testes
Piramide de Testes - A regra é que devemos encontrar os erros nas categorias de
testes que sao executados mais rapidamente
Piramide ideal - Erros encontrados no inicio do teste - Do mais rapido pro
mais lento
Testes automatizados
Piramide nao ideal - Erros encontrados manualmente e de integraçao - Do mais
lento pro mais rapido
Testes manuais
TDD - Test-Driven Development
Pequenos ciclos de repeticoes - Um Teste para cada funcionalidade do sistema
Cliclo de desenvolvimento do TDD
Escrevemos um teste que inicialmente nao passa (red)
Adicionamos a funcionalidade do sistema
Fazemos o teste passar (green)
Refatoramos o codigo da nova funcionalidade (refactoring)
Escrevemos o proximo teste
Beneficios
Feedback
Codigo mais limpo
Seguranca
Produtividade
Codigo mais flexivel (menos acoplado)
Confianca na correcao do bug
Tempo de desenvolvimento menor
Integracao continua
Integraçao contínua
CI -> CDelivery -> CD
É a primeira etapa do pipeline CI/CD, ou seja, interaçao do desenvolvedor com
o repositorio
Maior quantidade de Branches, mais dificil a Integracao
Estrategias de branch:
Otimizadas para produtividade individual
Muitas branches - Perda de Produtividade
Otimizadas para produtividade do time
Sem branches - Trunk-Based
Andon cord
Deployment lead time
Reduzir débito técnico
Simplificar e automatizar o maior numero possivel de tarefas
Implementar servidor de CI
Escolher estrategia de Branches
Investir em automacao de Testes
Implementar infraestrutura que permita testes em VM
Fluxo de peca unica (WIP)
Kaizen Blitz (Metodo Toyota)
Tempo dedicado para resolucao de questao tecnica (deep dive)
Outros eventos direcionados a Reduzir divida tecnica:
Dojo
Sprint/Fall clearing
Ticket queue inversion week
Hack days
Hackathons
Releases de baixo risco
Deployment
Instalacao de uma versao especifica do software para determinado
Ambiente
Release
Disponibilização de produto
Padrao de release baseado em Ambiente
Blue-Green - Roteamento do trafego dos usuarios para blue (new) ou green
(atual). Simples rollback
Canary - Pequena parte de usuarios utilizando a versao nova. Mudanca gradual
Padrao de release baseado em aplicacao
Feature flags
Feature toggles
Dark launches
Segunda maneira: Feedback
Telemetria - É um processo automatizado de comunicação onde medições e outros são
coletados de dispositivos remotos e transmitidos para equipamentos de monitoramento
(plataforma de monitoração)
Quando estamos construindo nossas aplicações e ambientes, temos que desenha-
las com a implementação da telemetria. Visão global do ambiente
Framework de monitoramento
Coleta de dados
Eventos, logs, metricas..
Devem ser enviados para um serviço comum
Ferramentas que coletam informaçõesde desempenho: Dynatrace,
AppDynamics, NewRellic, DataDog.....
Roteador de eventos
Armazena dados
Toma ação em cima dos dados armazenados
Telemetria Self-Service
Importante usar a telemetria em produção, pré-produção e pipeline
Ter condições de propagar informação para todos os envolvidos no fluxo de
valor
Senso de responsabilidade compartilhada
Garantir o fácil acesso aos dados coletados, preferencialmente através de API
´s self-service
Níveis de logs
Debug level - monitora tudo e gera bastante log
Info level - monitora ações específicas
Warn level - monitora condição que pode gerar erros
Error level - informações sobre condições de erros
Fatal level - ultimo status do erro
Usando bem a telemetria:
Decisões de autenticação
Acesso a dados e sistemas
Mudança de sistemas e aplicações
Mudança de dados, como add, del ou edit
inputs inválidos
Monitorar recursos computacionais (hardware e serviços)
Como restaurar rapidamente erros em ambientes de produção
Feature toggles
Desativar recurso problematicos via código (mais fácil e menos
arriscada)
Fix Forward
Alteração no código para correção do problema via pipeline/novo commit
Rollback
Retornar o ambiente para release anterior, por meio de feature toggles
ou alterando roteamento para padrões Blue-Green ou Canary
Sustentando serviços em operação
S.R.E - Site Reliability Engineering
Os desenvolvedores gerenciam seus próprios serviços em produção antes
de se tornamremelegíveis para um grupo de engenheiros gerencias
Possibilita transição suave do serviço para operações
Ideal é definir um checklist de requisitos antes da liberação do
serviço
Após liberação do serviço para o operacional, os desenvolvedores atuam
como consultores
LRR - Launch Readiness Review/Revisão de Prontidão de Lançamento -
Revisão do checklist para liberação - Time do produto que faz/aplica/valida o
checklist
Antes da publicação do servico
HRR - Hand-off readiness review/Análise de Prontidão de Hands-Off -
(lista de requisitos) verificação de segurança para transferencia do serviço - Time
de sustentação que faz/aplica/valida o checklist
Após estado gerenciável
O que conta no checklist
-Contagem e severidade de defeitos
-Tipo / Frequencia de alertas
-Cobertura de monitoramento
-Arquitetura do sistema
-Processo de implantação
-Higiene da produção
Necessidade do SRE (lançamento baseado em DevOps) LRR e HRR:
-Necessidade de monitoramento eficaz
-Implantações confiáveis e determinísticas
-Arquitetura de suporte implementações rapidas e frequentes
UX como feedback
Ajuda a criar requisitos não funcionais codificados para atendimento de
backlog
Criação de qualidade e resulta em empatia
Testes A/B
EX.: Com base em análise estatística, é possível medir a experiencia do
usuario com duas versoes diferentes de página
Para termos testes A/B rápidos e iterativo precisamos ter:
-Implantação em produção sob demanda
-Feature Toggles
-Poder entregar varias versoes de codigo simultaneas a segmentos de clientes
-Telemetria de produção em todos os niveis da stack de aplicação
Revisão de código
Peer Review
Pull request (GitHub foi pioneiro)
Inspeção aumentando a qualidade
Bom PR
Detalhes sobre o motivo da mudança
Como a mudança foi feita
Quais os riscos e contramedidas
Ruim PR
Sem documentação ou informação
O objetivo é ter colegas proximo, examinando as mudanças, gerando
melhor qualidade e aprendizado entre o time
Pair programming - programação por dois programadores aleatoriamente
Sem metricas de melhorias
Revisão contínua de código
Eficaz para encontrar bugs
Não funciona com desenvolvedores remotos e não possui metricas de
melhoria no processo
Over-the-shoulder
Informal e fácil de ser implementada
Pode funcionar com trabalho remoto
Sem verificação de correção
Sem métricas de melhoria de processo
Preparation > Inspection meeting > Rework > Complete
E-mail pass-around
Autor ou sistema SCM (sistema de gerenciamento de código) envia código
por e-mail para os revisores
Discução para sugestão de alterações
Pode ser feito remotamente
Sem interrupção dos revisores
Bastante ineficiente
Sem verificação de correção de bugs
Sem métricas de melhoria
Revisão de código assistida por ferramentas
Uso de ferramentas especializadas
Coletar arquivos, transmitir, exibir arquivos, comentários e
problemas entre os participantes
Possui metricas
Maior controle no fluxo de trabalho
Terceira maneira
Aprendizagem
Organizações resilientes
Habeis em detectar problemas, resolver, multiplicar os efeitos,
tornando as soluções disponiveis em toda a organização
Chaos Monkey
Injeção de falha no ambiente de produção (Netflix)
Oportunidade de aprendizado
Simian Army Monkey
Suite criada pela netflix para simulação de falha
Teste de resiliencia
Game Day
Engenharia de resiliencia / Teste de injeção de falhas
Expor defeitos latentes no sistema
Ajuda a criar manuais
Cultura livre de culpa
Teoria da maçã podre é falha, segundo Dr Dekker
Ao inves de buscar culpados, devemos buscar entender o que
precisamos melhorar em nosso processo/servico
Reunião de blameless pos-mortem
Construa uma linha do tempo e colete detalhes sobre a
falha, garantindo não punir as pessoas
Garanta que não haverão culpados, permitindo que as pessoas
fornecam detalhes de sua contribuição para a falha
Habilite e incentive as pessoas que cometem erros a serem
especialistas que educam o restante sobre como não cometer o mesmo erro
Aceite que ha sempre um espaço onde os seres humanos podem
decidir agir ou nao, que o julgamento dessas decisoes está em retrospectiva
Proponha contramedidas para evitar que um acidente
semelhante aconteca no futuro
Quejm deve estar presente nesta reuniao
As pessoas envolvidas em decisoes, as que identificaram o
problema, as que responderam ao problema, que diagnosticaram o problema, que foram
afetadas pelo problema, e quem estevier interessado
Informações coletadas no pos-mortem devem ficar disponivel a
todos
Ainda sobre o chaos monkey:
Simian Army Monkey
Chaos gorilla
Simula a falha de toda uma zona de disponibilidade da AWS
Chaos kong
Simula falha de regiões inteiras da AWS
Latency Monkey
Induz latencia artificial ou tempo de inatividade para
simular degradação do servico
Conformity monkey
Localiza e desliga instancias da AWS que não seguem
práticas recomendadas
Security monkey
Localiza e desliga instancias da AWS com falha de segurança
Doctor monkey
Atua nas verificações de integridade que são executadas em
cada instancia, na busca de instancias não integras, desativando-as se não houver
correção
Janitor monkey
Garante ambientes de nuvem livre de desordem e desperdício.
Procura por recurso não utilizado e os elimina
Requisitos não funcionais (NFR)
São requisitos relacionados ao uso da aplicação em termos de desempenho,
usabilidade, confiabilidade, segurança, disponibilidade, manutenção e tecnologias
envolvidas
Telemetria suficiente
Serviços resilientes
Compatibilidade com versões anteriores e futuras
Analise de logs
Rastreabilidade de solicitações de usuários por meio de vários serviços
Configuração simples e centralizada de tempo de execução (feature
flags)
Padronizar tarefas manuais.
Automatizar o máximo possível
Crie histórias de usuários de operação reutilizaveis no desenvolvimento
Para os trabalhos recorrentes, é necessário saber:
Qual o trabalho necessário
Quem é necessário para executá-lo
Quais são as etapas para concluí-lo
Um único repositorio de codigo fonte compartilhado para toda a organizaçao
Padrões de configuração (lib e infra)
Ferramentas
Testes
Codigos
Tutoriais e documentação
Compartilhamento de conhecimento
Compartilhar bibliotecas permite a propagação de conhecimentos e melhorias
Manter bibliotecas atualizadas e completas
Grupos de discursão ou salas de bate-papo
Segurança da informação
Adicionar ao repositorio compartilhado, mecanismos ou ferramentas que
garantam a segurança no ambiente
Utilizar bibliotecas pré-validadas pela equipe de segurança
Bibliotecas de serviço de autenticação e criptografia
Controle de versão para mecanismo de comunicação sobre como as coisas estão
sendo feitas
Manter equipes de projetos envolvidas com a segurança da informação
Integrar equipe de InfoSec no projeto, o mais cedo possível (no final de cada
sprint)
Integração da segurança no pipeline de implantação
Automatizar ao máximo testes de secinfo
Feedback rápido sobre seu trabalho
Detectar e corrigir problemas de segurança com mais rapidez
Telemetria de segurança na aplicação
Logins de usuários (bem e mau sucedidos)
Redefinições de senha
Alteração de end. de e-mail
Alteração de cartão de crédito
Criar alertas sobre eventos importantes para detectar e corrigir mais
rapidamente
Effective Patching
Gerenciamento de Mudanças
Principais controles para reduzir os riscos de segurança na operação
REVISÃO
Telemetria
Informação rápida
Organizações de alta performance possuem capacidade de rapidamente
identificar a causa raíz do problema e corrigi-la rapidamente
Telemetria é um processo automatizado de comunicação de coleta de dados para
dispositivos de monitoramento
Plataforma de monitoração
Necessário criar telemetria entre nossas aplicações e ambientes. Producao, pre-
producao e pipeline de implantacao
Unifircar logs! dev e ops
Visão global do ambiente
Alertas pro-ativos
Framework de monitoramento:
Coletor de dados
Camada do logica de negocios
Camada de aplicacao
Sistema operacional
Roteador de eventos
Armazena eventos e metricas
Threshoulds
Telemetria self-service
Qualquer pessoa pode ter acesso as informações relevantes
Senso de responsabilidade compartilhada / Cultura sem culpa
Debug level - Monitora sistemas
Info level - ações de usuarios ou sistemas especificos
Warn level - condicao q pode levar ao erro
Error level - info de condicao de erro
Fatal level - ultimo status do erro