Engenharia de Confiabilidade do Google
Como o Google administra seus sistemas de produção
Descrição do livro
Engenharia de Confiabilidade do Google – Site Reliability Engineering (SRE)
A maior parte do tempo de vida de um sistema de software se dá em seu uso, e não no design ou na implementação. Então, por que a sabedoria convencional insiste que os engenheiros de software devam se concentrar principalmente nas fases de design e de desenvolvimento dos sistemas computacionais de larga escala?
Nesta coletânea de dissertações e artigos, membros essenciais da equipe de SRE (Site Reliability Engineering – Engenharia de Confiabilidade) do Google explicam como e por que seu comprometimento com todo o ciclo de vida tem permitido que a empresa desenvolva, implante, monitore e mantenha alguns dos maiores sistemas de software do mundo com sucesso. Você conhecerá os princípios e as práticas que possibilitam aos engenheiros do Google deixar os sistemas mais escaláveis, confiáveis e eficientes – lições que podem ser diretamente aplicáveis à sua empresa.
Este livro está dividido em quatro partes:
• Introdução – Saiba o que é SRE e por que ela difere das práticas convencionais do mercado de TI.
• Princípios – Analise os padrões, os comportamentos e as áreas de preocupação que influenciam o trabalho de um SRE (Site Reliability Engineer – Engenheiro de Confiabilidade).
• Práticas – Entenda a teoria e a prática do trabalho cotidiano de um SRE: desenvolver e operar sistemas computacionais distribuídos de grande porte.
• Gerenciamento – Explore as melhores práticas do Google para treinamento, comunicação e reuniões, que poderão ser usadas pela sua empresa.
Ver menos ▲Sumário
- Apresentação
- Prefácio
- Parte I Introdução
- Capítulo 1 ■ Introdução
- A abordagem com administradores de sistemas para gerenciamento de serviços
- A abordagem do Google para o gerenciamento de serviços: Site Reliability Engineering
- Princípios da SRE
- Garantindo um foco durável em engenharia
- Buscando a máxima rapidez nas mudanças sem violar o SLO de um serviço
- Monitoração
- Resposta a emergências
- Gerenciamento de mudanças
- Previsão de demanda e planejamento de capacidade
- Provisionamento
- Eficiência e desempenho
- O fim do começo
- Capítulo 2 ■ O ambiente de produção do Google do ponto de vista de um SRE
- Hardware
- Sistema de software que “organiza” o hardware
- Administrando as máquinas
- Armazenagem
- Rede
- Outros softwares de sistemas
- Serviço de lock
- Monitoração e alertas
- Nossa infraestrutura de software
- Nosso ambiente de desenvolvimento
- Shakespeare: um exemplo de serviço
- Vida de uma requisição
- Organização de jobs e dados
- Parte II Princípios
- Capítulo 3 ■ Aceitando os riscos
- Administrando riscos
- Mensurando os riscos a um serviço
- Tolerância dos serviços aos riscos
- Identificando a tolerância a riscos dos serviços para consumidores
- Identificando a tolerância a riscos dos serviços de infraestrutura
- Motivação para provisão de erros
- Calculando sua provisão para erros
- Vantagens
- Capítulo 4 ■ Objetivos do nível de serviço
- Terminologia do nível de serviço
- Indicadores
- Objetivos
- Acordos
- Indicadores na prática
- Com o que você e seus usuários se importam?
- Coletando indicadores
- Agregação
- Padronize os indicadores
- Objetivos na prática
- Definindo objetivos
- Definindo as metas
- Medidas de controle
- Os SLOs definem expectativas
- Acordos na prática
- Capítulo 5 ■ Eliminando tarefas penosas
- Definição de tarefas penosas
- Por que menos tarefas penosas é melhor
- O que é qualificado como engenharia?
- As tarefas penosas são sempre ruins?
- Conclusão
- Capítulo 6 ■ Monitorando sistemas distribuídos
- Definições
- Por que monitorar?
- Definindo expectativas razoáveis para monitoração
- Sintomas versus causas
- Caixa-preta versus caixa-branca
- Os quatro sinais de ouro
- Preocupando-se com a cauda (ou instrumentação e desempenho)
- Escolhendo uma resolução apropriada para as medições
- O mais simples possível, não mais simples que isso
- Juntando esses princípios
- Monitoração no longo prazo
- SRE do Bigtable: uma história de excesso de alertas
- Gmail: respostas previsíveis de seres humanos, possíveis de estar em um script
- O longo prazo
- Conclusão
- Capítulo 7 ■ A evolução da automação no Google
- O valor da automação
- Consistência
- Uma plataforma
- Correções mais rápidas
- Ação mais rápida
- Economia de tempo
- O valor da SRE no Google
- Os casos de uso para automação
- Casos de uso para automação pela SRE do Google
- Uma hierarquia de classes de automação
- Automatizar a você mesmo para deixar de executar uma tarefa: automatize TUDO!
- Reduzindo o sofrimento: aplicando a automação em ativação de clusters
- Detectando inconsistências com o Prodtest
- Resolvendo inconsistências de forma idempotente
- A tendência em especializar
- Ativação de cluster orientada a serviços
- Borg: nascimento do computador em escala de warehouse
- Confiabilidade é a característica fundamental
- Recomendações
- Capítulo 8 ■ Engenharia de release
- O papel de um engenheiro de release
- Filosofia
- Modelo autônomo
- Alta velocidade
- Builds herméticas
- Garantindo o cumprimento de políticas e de procedimentos
- Build e implantação contínuas
- Construção
- Branching
- Testes
- Empacotamento
- Rapid
- Implantação
- Gerenciamento de configuração
- Conclusões
- Não serve apenas para os Googlers
- Use a engenharia de release desde o princípio
- Capítulo 9 ■ Simplicidade
- Estabilidade versus agilidade do sistema
- A virtude do tédio
- Não abrirei mão do meu código!
- A métrica “linhas de código negativas”
- APIs mínimas
- Modularidade
- Simplicidade em releases
- Uma conclusão simples
- Parte III Práticas
- Capítulo 10 ■ Alertas práticos a partir de dados de séries temporais
- O surgimento do Borgmon
- Instrumentação das aplicações
- Coleta de dados exportados
- Armazenagem na arena de séries temporais
- Rótulos e vetores
- Avaliação de regras
- Geração de alertas
- Fragmentando a topologia de monitoração
- Monitoração caixa-preta
- Mantendo a configuração
- Dez anos se passaram
- Capítulo 11 ■ De plantão
- Introdução
- Vida de um engenheiro de plantão
- Plantão equilibrado
- Equilíbrio quanto à quantidade
- Equilíbrio quanto à qualidade
- Pagamentos
- Sentindo-se seguro
- Evitando uma carga operacional inadequada
- Sobrecarga operacional
- Um inimigo traiçoeiro: pouca carga operacional
- Conclusões
- Capítulo 12 ■ Resolvendo problemas de modo eficiente
- Teoria
- Na prática
- Relato do problema
- Triagem
- Análise
- Diagnóstico
- Teste e tratamento
- Resultados negativos são mágicos
- Cura
- Estudo de caso
- Facilitando a resolução de problemas
- Conclusão
- Capítulo 13 ■ Resposta a emergências
- O que fazer quando os sistemas falham
- Emergência induzida por testes
- Detalhes
- Resposta
- Descobertas
- Emergência induzida por alterações
- Detalhes
- Resposta
- Descobertas
- Emergência induzida por processo
- Detalhes
- Resposta
- Descobertas
- Todos os problemas têm soluções
- Aprenda com o passado. Não deixe que ele se repita
- Mantenha um histórico das interrupções de serviço
- Faça as perguntas importantes e até mesmo improváveis: E se...?
- Incentive testes proativos
- Conclusão
- Capítulo 14 ■ Administrando incidentes
- Incidentes não administrados
- A anatomia de um incidente não administrado
- Foco centrado no problema técnico
- Comunicação precária
- Trabalho sem coordenação
- Elementos do processo de gerenciamento de incidentes
- Separação recursiva de responsabilidades
- Um posto de comando reconhecido
- Documento vivo do estado do incidente
- Passagem de responsabilidade clara e direta
- Um incidente administrado
- Quando declarar que há um incidente
- Resumindo
- Capítulo 15 ■ Cultura de postmortem: aprendendo com o fracasso
- A filosofia de postmortem no Google
- Colabore e compartilhe conhecimentos
- Introduzindo uma cultura de postmortem
- Conclusão e melhorias contínuas
- Capítulo 16 ■ Monitorando interrupções de serviço
- Escalator
- Outalator
- Agregação
- Atribuição de rótulos
- Análise
- Benefícios inesperados
- Capítulo 17 ■ Testes voltados à confiabilidade
- Tipos de testes de software
- Testes tradicionais
- Testes de produção
- Criando um ambiente de teste e de build
- Testando em escala
- Testando ferramentas escaláveis
- Testando para desastres
- A necessidade de ser rápido
- Atualizando versões em produção
- Falha esperada em testes
- Integração
- Sondas na produção
- Conclusão
- Capítulo 18 ■ Engenharia de software em SRE
- Por que a engenharia de software na SRE é importante?
- Estudo do caso Auxon: contexto do projeto e domínio do problema
- Planejamento de capacidade tradicional
- Nossa solução: planejamento de capacidade baseado em intenção
- Planejamento de capacidade baseado em intenção
- Precursores da intenção
- Introdução ao Auxon
- Requisitos e implementação: sucessos e lições aprendidas
- Aumentando a divulgação e levando à adoção
- Dinâmica das equipes
- Promovendo a engenharia de software na SRE
- equipe e tempo de desenvolvimento
- Chegando lá
- Conclusões
- Capítulo 19 ■ Distribuição de carga no frontend
- Capacidade não é a resposta
- Distribuição de carga usando DNS
- Distribuição de carga no endereço IP virtual
- Capítulo 20 ■ Distribuição de carga no datacenter
- O caso ideal
- Identificando tarefas ruins: controle de fluxo e estado de incapacidade
- Uma abordagem simples para tarefas não saudáveis: controle de fluxo
- Uma abordagem robusta para tarefas não saudáveis: estado de incapacidade
- Limitando o pool de conexões com a criação de subconjuntos
- Escolhendo o subconjunto correto
- Um algoritmo de seleção de subconjunto: criação aleatória de subconjuntos
- Um algoritmo de seleção de subconjuntos: criação determinística de subconjuntos
- Políticas de distribuição de carga
- Round Robin Simples
- Least-Loaded Round Robin
- Weighted Round Robin
- Capítulo 21 ■ Tratando sobrecarga
- As armadilhas das “consultas por segundo”
- Limites por cliente
- Throttling do lado cliente
- Criticidade
- Sinais de utilização
- Tratando erros de sobrecarga
- Decidindo fazer uma nova tentativa
- Carga de conexões
- Conclusões
- Capítulo 22 ■ Tratando falhas em cascata
- Causas de falhas em cascata e design para evitá-las
- Sobrecarga de servidores
- Esgotamento de recursos
- Indisponibilidade do serviço
- Evitando a sobrecarga nos servidores
- Gerenciamento de filas
- Rejeição de carga e degradação elegante
- Retentativas
- Latência e tempos de espera
- Inicialização lenta e caching frio
- Sempre desça na pilha
- Condições para disparo de falhas em cascata
- Morte de processo
- Atualizações de processos
- Novos rollouts
- Crescimento orgânico
- Mudanças, drenagens e desativações planejadas
- Testes para falhas em cascata
- Teste até falhar, e um pouco além
- Teste clientes populares
- Teste backends não críticos
- Passos imediatos para tratar falhas em cascata
- Aumente os recursos
- Interrompa as falhas de verificação de sanidade/mortes
- Reinicie os servidores
- Desacerte tráfego
- Entre no modo de degradação
- Elimine a carga em batch
- Elimine o tráfego ruim
- Observações finais
- Capítulo 23 ■ Administrando estados críticos: consenso distribuído para confiabilidade
- Motivação para o uso do consenso: falha na coordenação de sistemas distribuídos
- Estudo de caso 1: o problema do split-brain
- Estudo de caso 2: failover exige intervenção humana
- Estudo de caso 3: algoritmo de pertencimento a grupo com falha
- Como o consenso distribuído funciona
- Visão geral do Paxos: um protocolo de exemplo
- Padrões de arquitetura de sistema para o consenso distribuído
- Máquinas de estado replicadas confiáveis
- Bancos de dados e repositórios de configuração replicados e confiáveis
- Processamento altamente disponível usando eleição de líder
- Coordenação distribuída e serviços de locking
- Enfileiramento distribuído e troca de mensagem confiáveis
- Desempenho do consenso distribuído
- Multi-Paxos: fluxo de mensagens detalhado
- Escalando cargas de trabalho intensas em leitura
- Leases de quórum
- Desempenho do consenso distribuído e latência de rede
- Pensando no desempenho: Fast Paxos
- Líderes estáveis
- Batching
- Acesso a disco
- Implantando sistemas baseados em consenso distribuído
- Número de réplicas
- Localização das réplicas
- Capacidade e distribuição de carga
- Monitorando sistemas de consenso distribuído
- Conclusão
- Capítulo 24 ■ Escalonamento periódico e distribuído com o cron
- Cron
- Introdução
- Ponto de vista da confiabilidade
- Cron jobs e idempotência
- Cron em larga escala
- Infraestrutura estendida
- Requisitos estendidos
- Desenvolvendo o cron no Google
- Monitorando o estado dos cron jobs
- O uso do Paxos
- Os papéis de líder e de seguidor
- Armazenando o estado
- Executando o cron em larga escala
- Resumo
- Capítulo 25 ■ Pipelines de processamento de dados
- Origem do padrão de projeto pipeline
- Efeito inicial do Big Data no padrão pipeline simples
- Desafios com o padrão de pipeline periódico
- Problemas causados por distribuição de carda irregular
- Desvantagens de pipelines periódicos em ambientes distribuídos
- Monitorando problemas em pipelines periódicos
- Problemas de “thundering herd”
- Padrão de carga Moiré
- Introdução ao Google Workflow
- Workflow como um padrão Modelo-Visão-Controlador
- Estágios de execução no Workflow
- Garantia de que o Workflow está correto
- Garantindo a continuidade do negócio
- Resumo e considerações finais
- Capítulo 26 ■ Integridade de dados: o que você lê é o que você escreveu
- Requisitos rigorosos da integridade de dados
- Escolhendo uma estratégia para uma integridade de dados superior
- Backups versus arquivamentos
- Requisitos do ambiente de nuvem em perspectiva
- A integridade dos dados é o meio, a disponibilidade é a meta
- Entregando um sistema de recuperação, e não um sistema de backup
- Tipos de falha que levam à perda de dados
- Desafios de manter a integridade de dados ampla e profunda
- Como a SRE do Google enfrenta o desafio da integridade de dados
- As 24 combinações de modos de falha de integridade de dados
- Primeira camada: remoção soft
- Segunda camada: backups e seus métodos relacionados de recuperação
- Camada abrangente: replicação
- 1T versus 1E: não é “apenas” um backup maior
- Terceira camada: detecção precoce
- Saber se a recuperação de dados funcionará
- Estudos de caso
- Gmail – fevereiro de 2011: restauração a partir do GTape
- Google Music – março de 2012: detecção de remoção furtiva
- Princípios gerais de SRE conforme aplicados à integridade de dados
- Mente de principiante
- Confie, mas verifique
- Esperança não é uma estratégia
- Defesa em profundidade
- Conclusão
- Capítulo 27 ■ Lançamento de produtos confiáveis em escala
- Launch Coordination Engineering
- O papel do Launch Coordination Engineer
- Definindo um processo de lançamento
- A checklist de lançamento
- Levando à convergência e à simplificação
- Lançando o inesperado
- Desenvolvendo uma checklist de lançamento
- Arquitetura e dependências
- Integração
- Planejamento de capacidade
- Modos de falha
- Comportamento do cliente
- Processos e automação
- Processo de desenvolvimento
- Dependências externas
- Planejamento do rollout
- Técnicas selecionadas para lançamentos confiáveis
- Rollouts graduais e em fases
- Frameworks de flag para funcionalidades
- Lidando com comportamentos abusivos de clientes
- Comportamento de sobrecarga e testes de carga
- Desenvolvimento da LCE
- Evolução da checklist de LCE
- Problemas que a LCE não resolveu
- Conclusão
- Parte IV Gerenciamento
- Capítulo 28 ■ Acelerando os SREs para chegar ao plantão e além
- Você contratou seus próximos SREs; e agora?
- Experiências iniciais de aprendizado: o caso da estrutura sobre o caos
- Caminhos de aprendizagem cumulativos e organizados
- Trabalho específico em projeto, e não tarefas braçais
- Criando profissionais espetaculares em engenharia reversa e em raciocínio de improviso
- Engenharia reversa: descobrindo como os sistemas funcionam
- Artistas do improviso: quando o inesperado acontece
- Reunindo tudo: engenharia reversa de um serviço em produção
- Cinco práticas para os engenheiros que aspiram ao plantão
- Fome de falhas: lendo e compartilhando postmortems
- Interpretando papéis em situações de desastre
- Provoque falhas reais, faça correções reais
- Documentação como aprendizado
- Acompanhando o plantão com antecedência e frequência
- De plantão e além: ritos de passagem e colocando a educação contínua em prática
- Considerações finais
- Capítulo 29 ■ Lidando com interrupções
- Administrando a carga operacional
- Fatores que determinam como as interrupções são tratadas
- Máquinas imperfeitas
- Estado de fluxo cognitivo
- Fazer bem uma tarefa
- É sério, diga-me o que devo fazer
- Reduzindo as interrupções
- Capítulo 30 ■ Incluindo um SRE para se recuperar de uma sobrecarga operacional
- Fase 1: conheça o serviço e saiba qual é o contexto
- Identifique as principais causas de estresse
- Identifique os fatores que causam estresse
- Fase 2: compartilhando o contexto
- Escreva um bom postmortem para a equipe
- Classifique os fatores que causam estresse de acordo com o tipo
- Fase 3: conduzindo as mudanças
- Comece pelo básico
- Consiga ajuda para eliminar as causas de estresse
- Explique o seu raciocínio
- Faça perguntas inteligentes
- Conclusão
- Capítulo 31 ■ Comunicação e colaboração em SRE
- Comunicações: reuniões de produção
- Agenda
- Participação
- Colaboração na SRE
- Composição da equipe
- Técnicas para trabalhar de modo eficiente
- Estudo de caso sobre colaboração em SRE: o Viceroy
- O surgimento do Viceroy
- Desafios
- Recomendações
- Colaboração fora da SRE
- Estudo de caso: migração do DFP para F1
- Conclusão
- Capítulo 32 ■ O modelo de engajamento da SRE em evolução
- Engajamento da SRE: o quê, como e por quê
- O modelo PRR
- O modelo de engajamento da SRE
- Suporte alternativo
- Revisões de Prontidão para Produção: Modelo Simples de PRR
- Engajamento
- Análise
- Melhorias e refatoração
- Treinamento
- Integração à SRE
- Melhorias contínuas
- Evolução do Modelo Simples de PRR: Engajamento Precoce
- Candidatos a um Engajamento Precoce
- Vantagens do Modelo de Engajamento Precoce
- Desenvolvimento de serviços em evolução: frameworks e plataforma de SRE
- Lições aprendidas
- Fatores externos que afetam a SRE
- Em direção a uma solução estrutural: Frameworks
- Novo serviço e vantagens do gerenciamento
- Conclusão
- Parte V Conclusões
- Capítulo 33 ■ Lições aprendidas com outros mercados
- Conheça os veteranos do mercado
- Preparo e testes para desastre
- Foco organizacional incansável em segurança
- Atenção aos detalhes
- Capacidade de alternância
- Simulações e treinamentos ao vivo
- Treinamento e certificação
- Foco na coleta de requisitos detalhados e no design
- Defesa em profundidade e em largura
- Cultura de postmortem
- Automatizando tarefas repetitivas e o overhead operacional
- Tomada de decisão estruturada e racional
- Conclusões
- Capítulo 34 ■ Conclusão
- Apêndice A ■ Tabela de disponibilidade
- Apêndice B ■ Um conjunto de melhores práticas para serviços em produção
- Falhe de forma saudável
- Rollouts progressivos
- Defina SLOs como um usuário
- Provisões de erro
- Monitoração
- Postmortems
- Planejamento de capacidade
- Sobrecargas e falhas
- Equipes de SRE
- Apêndice C ■ Exemplo de documento de estado do incidente
- Apêndice D ■ Exemplo de postmortem
- Lições aprendidas
- Linha do tempo
- Informações para suporte
- Apêndice E ■ Checklist da coordenação de lançamentos
- Apêndice F ■ Exemplo de minutas de reunião de produção
- Bibliografia
- Sobre os autores
- Colofão
Sobre os autores
Betsy Beyer é membro da organização Site Reliability Engineering do Google, responsável pelos cuidados e pela manutenção dos sistemas de produção dessa empresa.… Ver perfil completo ▶
Chris Jones é membro da organização Site Reliability Engineering do Google, responsável pelos cuidados e pela manutenção dos sistemas de produção dessa empresa.… Ver perfil completo ▶
Jennifer Petoff é membro da organização Site Reliability Engineering do Google, responsável pelos cuidados e pela manutenção dos sistemas de produção dessa empresa.… Ver perfil completo ▶
Niall Richard Murphy é membro da organização Site Reliability Engineering do Google, responsável pelos cuidados e pela manutenção dos sistemas de produção dessa empresa.… Ver perfil completo ▶
Livros relacionados
Recursos
Opinião dos leitores
Christiano B
Livro excelente para quem quer conhecer os conceitos da SRE Site Reliability Engineering, com uma ótima introdução, uma descrição bem detalhada dos princípios, alem das práticas e do gerenciamento.
WELLINGTON R DE C
O livro é fantástico para quem trabalha na área de TI com grandes parques tecnológicos. A leitura é fácil e a tradução ficou muito bem feita.






