Engenharia de Confiabilidade do Google

Como o Google administra seus sistemas de produção

Engenharia de Confiabilidade do Google
× Engenharia de Confiabilidade do Google

Engenharia de Confiabilidade do Google

VER AMOSTRA

Autores:

ISBN impresso: 978-85-7522-517-2
ISBN ebook: 978-85-7522-752-7
Ano: 2016
Páginas: 632
Preço impresso: R$ 159,00 O ebook deste livro está disponível na Amazon.

2 opiniões | Opine sobre este livro

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

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
Ver sumário completo ▼

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.

Ver todas ▼