Guia dos Conceitos Básicos do SRE
Série de artigos com o objetivo de esclarecer os conceitos básicos do SRE (Site Realiability Engineering).
SRE nada mais é do que uma disciplina que incorpora os aspectos da engenharia de software e as aplica em problemas de infraestrutura e operações de TI.
Benjamin Treynor (fundador do Google SRE) definiu SRE de forma muito feliz com a seguinte frase:
"SRE é o que acontece quando você pede a um engenheiro de software para projetar uma equipe de operações."
Operar ambientes computacionais de alta disponibilidade e complexidade não é nada fácil. Fica ainda mais difícil quando essa operação está imersa em um ambiente de TI tradicional, onde existe não só um muro, mas sim um abismo praticamente intransponível entre o time de desenvolvimento e o time de operação (com a clássica e chata visão contraditória: DEVS empurrando entregas em um pseudo ambiente ágil e OPS congelando mudanças e dando a vida para segurar a disponibilidade). Quem nunca? :)
Ter esse atrito, em um mundo onde as empresas precisam validar seu progresso com aprendizagem validada, no modelo de construir-medir-aprender, onde esse aprendizado precisa ser altamente acelerado e a tecnologia é o core de todo o sistema de valor, é decretar a falência da TI como driver da transformação digital.
Então vem o DevOps como o alavancador da cultura para quebrar os silos da TI. Se pensarmos em DevOps como um "software" (com suas filosofias e práticas), o SRE é uma "classe" que implementa uma parte das funcionalidades do DevOps, aquelas mais voltadas para infraestrutura e operações.
O SRE e sua filosofia possui 5 ideias chaves e que estão alinhados com o DevOps:
1- Reduzir os silos organizacionais (no more silos): compartilhando propriedade e responsabilidade entre os times;
2- Acidentes são normais (accidents are normal): abraçando o risco e usando e abusando de observabilidade e de indicadores de níveis de serviços (SLIs), objetivos de níveis de serviços (SLOs) e compartilhando a cultura de análise de causa raiz sem culpa (blameless RCA);
3- Mudanças implementadas gradualmente (change should be gradual): reduzindo o lote de implantação, diminuindo o risco e acelerando o pipeline de implantação com o CI/CD;
4- Eliminando o trabalho manual e rotineiro (tooling and culture are interrelated): segredo aqui é ter um pensamento, cultura e arquitetura de TI que incentiva a automação dos trabalhos manuais e rotineiros da operação. A ideia de entregar software com uma ou uma tonelada de ações manuais que a operação precisa executar rotineiramente de forma manual passa longe desse item.
5- Medir é crucial (measurement is crucial): medir e ser guiado por SLIs e SLOs é fundamental para uma cultura de sucesso de SRE.
São essas ideias chaves que guia os 6 principios e práticas do SRE:
1- Operação é um problema de software: SRE usa as abordagens de engenharia de software para resolver os problemas;
2- Gerenciar por Objetivos de Níveis de Serviços (SLOs): SRE não tem o objetivo de tudo estar 100% disponível o tempo todo, a ideia aqui é entender o alvo ideal de SLO e então gerenciar. SLO está ligado com o conceito de Error Budget e ambos são conceitos essenciais (na minha opinião o mais importante) para as definições e decisões do que priozar;
3- Trabalhar para Minimizar o Toil: a cultura aqui é que trabalhos repitivos e manuais são ruins e ocupam um tempo que poderia sem empregado em algo que realmente entrega valor para a organização (entregando funcionalidades de escalabilidade e confiabilidade, por exemplo);
4- Automação: aqui o trabalho é entender o que automatizar, em quais condições e como. Ter uma arquitetura e um framework de automação é essencial para o sucesso dessa prática;
5- Reduzir o Custo de Falha: o fato aqui é que quanto mais tarde se descobrir um problema no ciclo de entrega de um produto, mais caro é para corrigir;
6- Compartilhar responsabilidade com os Desenvolvedores: a rígida fronteira entre desenvolvedores e operação é contraprodutiva. SRE trabalha junto com o time de desenvolvimento levando as habilidades de produção para o desenvolvimento do produto. A visão da "vida real de produção" deve ser inserida no contexto de entrega de uma solução. Queestões como disponibilidade, latência, performance, eficiência, monitoração, resposta à emergências, plano de capacidade devem ser incorporadas no ciclo de desenvolvimento e evolução das plataformas.
Esses são os conceitos básicos para entender as ideias e os princípios por trás da sigla SRE. Nos próximos artigos vou pontuar, um por um, os assuntos fundamentais do SRE:
- Guia dos Conceitos Básicos (esse aqui);
- Vídeo sobre os Conceitos Básicos: https://www.youtube.com/watch?v=9uvS6WeCuVg&t=172s
- SLOs e Error Budget (https://medium.com/@mclortizz/o-que-%C3%A9-sli-slo-error-budget-e-como-isso-evita-a-fal%C3%AAncia-do-sla-3ebfee7c140c).
- Observabilidade (https://medium.com/@mclortizz/1e60194cc337).
- Redução de Toil (https://medium.com/@mclortizz/o-que-%C3%A9-toil-quais-suas-caracter%C3%ADsticas-quais-s%C3%A3o-os-passos-para-a-redu%C3%A7%C3%A3o-d8e640fcb265).
- Aprendizagem com a falha (e sem culpa) (https://medium.com/@mclortizz/post-mortem-sem-culpa-5a36f27b885b).
Veja também meu vídeo, onde falo um pouco dos conceitos e práticas de SRE no link https://www.youtube.com/watch?v=9uvS6WeCuVg&t=172s.
Para quem quer buscar mais informações, deixo alguns livros e sites interessantes sobre SRE:
- Livro: Engenharia de Confiabilidade do Google (https://sre.google/sre-book/table-of-contents/)
- Livro: The Site Reliability Workbook (https://sre.google/workbook/table-of-contents/)
- Site DevOps: https://devops.com/
- Site Google SRE: https://sre.google/
- Site The New Stack: https://thenewstack.io/
- Site SRE Weekly: https://sreweekly.com/
- Vídeo de conceitos e práticas do SRE: https://www.youtube.com/watch?v=9uvS6WeCuVg&t=172s
Obrigado e até a próxima.
Marcelo Ortiz
Engenheiro da Computação, mestrando em Ciências da Computação.