Implementando Site Reliability Engineering (SRE)

Marcos de Benedicto (Bene)
5 min readOct 20, 2019

--

A Engenharia de Confiabilidade do Site (SRE) é uma abordagem de operação de TI, que garante a entrega continua dos serviços de uma maneira eficiente e confiável utilizando soluções de engenharia de automação e desenvolvimento de software. O conceito principal da abordagem é uma operação que aprende com as falhas, que é orientada a analise de comportamento de consumo dos recursos e sempre com uma cultura de automatizar tudo.

O SRE tem foco em melhorar as coisas, para isso precisa observar todo o ambiente e procurar pontos onde pode desatar nós de performance ou gaps de fluxo. Os engenheiros de confiabilidade do site não apenas “fazem” a automação e restauram os serviços com falha, o trabalho deles é garantir que as falhas não aconteçam novamente. Após uma falha é feito um “postmortem” onde o foco é o porque ocorreu uma falha, as causas, e um plano de ação que abrange todo o ambiente e não apenas o ponto de falha.

Error Budget (Custo de Erro)

Ao contrário dos administradores de sistema tradicionais que normalmente são avessos ao risco, os SREs adotam o risco de maneira controlada. Eles usam o conceito de “custo de erro” para determinar o risco aceitável e tomar decisões sobre quando as mudanças devem ser feitas. O “custo de erro” é um limite de quanto tempo o sistema pode ficar inativo, definido pelo contrato de nível de serviço (SLA) e pelo objetivo de nível de serviço (SLO). Muitos clientes adiam novas entregas quando podem perder o SLA.

Se um sistema estiver instável, as alterações serão restritas; se é estável, os engenheiros podem aproveitar o custo excedente de SLO para inovar ou atualizar os ambientes.

DevOps + SRE

Embora o SRE não tenha surgido do DevOps, ele está alinhado ao desenvolvimento. O DevOps tem uma filosofia subjacente de responsabilidade do ciclo de vida das equipes de desenvolvimento e de iteração. O lema é: “Você constrói, você executa.”

Embora essa abordagem tenha muitas vantagens, ela também tem desvantagens. Os desenvolvedores agora podem operações, embora possam muitas vezes não terem especialidade neste assunto. Nem todo serviço tem desenvolvedores designados, mas cada serviço ainda deve ser operado e mantido. Além disso, em uma empresa em que você possui centenas de equipes de DevOps, pode não haver sinergia entre as equipes. Nesse caso, uma equipe do SRE se concentra em áreas entre domínios, suportando o monitoramento, estrutura de log e estrutura de automação. Os engenheiros de confiabilidade do site trabalham com as equipes de DevOps no gerenciamento de incidentes e post-mortem.

Conforme mostrado no diagrama abaixo, os engenheiros de confiabilidade do site podem usar uma parte do tempo em trabalhos relacionados às operações e o restante em tarefas de desenvolvimento. Na operação, eles tratam dos problemas dos clientes e mantém os turnos de plantão. Como se espera que os aplicativos que eles supervisionam sejam altamente automatizados e com recuperação automática, os engenheiros têm tempo para executar tarefas de desenvolvimento, como escrever novos recursos, dimensionar ou implementar automação.

O candidato ideal para engenheiro de confiabilidade do site tem um vies de engenharia de software e administração de sistemas, conhece codificação e automação. Os SREs também podem trabalhar para eliminar gargalos de desempenho, isolar falhas usando os padrões de escalabilidade e auto-recuperação, criando runbooks e automatizando os processos operacionais diários.

O objetivo do SRE é tornar os sistemas mais confiáveis. O desenvolvimento e o SRE trabalham juntos para fornecer desempenho e confiabilidade do aplicativo, usando os mesmos pipelines de entrega de CI/CD de desenvolvimento e processos de lançamento, mas cada um deles se concentra em suas próprias métricas de sucesso.

O desenvolvimento se concentra na velocidade de liberação de novas funções, enquanto as equipes de operações se concentram na manutenção da confiabilidade. Como os engenheiros de confiabilidade do site passam parte de seu tempo em tarefas de desenvolvimento e são integrados à equipe de DevOps, a meta abrangente da equipe deve incluir as metas de desenvolvimento e operações.

Gerenciamento de mudança

A maioria dos problemas de indisponibilidade estão relacionados às mudanças nos ambientes/sistemas em produção. Diante disso, rollouts progressivos, fast fail, e rollback podem te ajudar a impactar um numero menor de usuários quando mudanças ruins acontecem. Remover humanos do processo de lançamento também reduz a chance de falhas de uma mudança. Com isso, aumenta a velocidade de entrega de funcionalidades e confiança/segurança do ambiente.

Observação e Monitoramento

O primeiro processo visualizar sua aplicação como ela é, e para isso é extremamente importante definir seus Níveis de Serviço de maneira que você consiga encaixar e metrificar a aplicação.

Sem um bom mapa de parâmetros você não tem meios de saber se seu serviço esta funcionando, é como voar com os olhos vendados, talvez todos os usuários estejam usando o seu produto, talvez não, por isso monitorar sua aplicação é extremamente importante no caminho de ter confiabilidade de seu software é como se as saídas válidas de sua aplicação, seja ela um alerta, ticket ou log, fossem sua matéria prima para tomada de decisões no futuro.

https://img2.storyblok.com/1440x852/smart/filters:quality(100)/f/70749/676x400/711c6d3b49/observability-redefined-5.png

Se você não sabe por onde começar é posivel iniciar pelos The Four Golden Signals (Os quatro sinais de ouro), que são latência, tráfego, erros e saturação com esses sinais você já consegue ter um bom começo.

O que é Observabilidade? E porque é necessário num ambiente de constante mudança: https://thenewstack.io/observability-a-3-year-retrospective/

Princípios SRE

Ao criar suas habilidades e processos de SRE, considere estes princípios para aplicar à maneira como sua equipe opera:

  • Use a automação para executar operações em escala com carga.
  • Limite a carga operacional: gaste 50% do tempo em trabalho e 50% em melhorias.
  • Compartilhar 5% das operações trabalha com a equipe de desenvolvimento. Qualquer trabalho excedente de operações transborda para a equipe de desenvolvimento.
  • Tenha um SLA ou SLO para o serviço e avalie-o.
  • Crie um “custo de erro” para controlar a velocidade. Equilibre recursos contra a estabilidade.
  • Pratique a observabilidade, incluindo os quatro sinais dourados: latência, tráfego, erros e saturação.
  • Use alertas acionáveis, baseados em sintomas. Para controlar ações, use runbooks automatizados.
  • Faça um post-mortem sem culpa para cada evento.
  • Use um pool de equipe comum para SRE e desenvolvimento.

O valor de SRE

Ao adotar o SRE, você obtém vários benefícios:

  • Redução do tempo médio de reparo (MTTR) e tempo médio entre falhas (MTBF).
  • Lançamento mais rápido de atualizações de versão e correções de bugs
  • Redução de risco através da automação.
  • Maior retenção de recursos, tornando os trabalhos operacionais atraentes e interessantes.
  • Alinhamento do desenvolvimento e operações através de objetivos compartilhados.
  • Separação de funções e conformidade.
  • Equilíbrio entre requisitos funcionais e não funcionais.

Fonte Principal: Engenharia de Confiabilidade do Google — Como o Google administra seus sistemas de produção. (Betsy Beyer, Chris Jones, Jennifer Petoff e Niall Richard Murphy)

--

--

No responses yet